From f30475cdf4c8240d35b3d442fe622b983b349968 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Fri, 10 Apr 2026 09:34:38 -0700 Subject: [PATCH] Remove deprecated source stubs, update FAQ and install copy, add CLI cleanup - Delete source/skills/ directories for deprecated skills (arrange, normalize, onboard, extract, frontend-design, teach-impeccable). The cleanup script handles migration; stubs are no longer needed. - Add "npx skills update" command to the Stay Updated install section - Rewrite FAQ update answer: lead with npx skills update, add troubleshooting for failed updates (re-install + run /impeccable) - Run cleanup script in `npx impeccable skills update` before delegating to npx skills update, preventing failures from deprecated entries in skills-lock.json - Run cleanup script after `npx impeccable skills install` to remove leftover files from previous versions Co-Authored-By: Claude Opus 4.6 (1M context) --- .codex/skills/impeccable/SKILL.md | 2 +- bin/commands/skills.mjs | 27 +++++++++++++++++++++++ public/index.html | 29 +++++++++++++++++++------ public/js/generated/counts.js | 2 +- source/skills/arrange/SKILL.md | 8 ------- source/skills/extract/SKILL.md | 8 ------- source/skills/frontend-design/SKILL.md | 12 ---------- source/skills/normalize/SKILL.md | 8 ------- source/skills/onboard/SKILL.md | 8 ------- source/skills/teach-impeccable/SKILL.md | 11 ---------- 10 files changed, 51 insertions(+), 64 deletions(-) delete mode 100644 source/skills/arrange/SKILL.md delete mode 100644 source/skills/extract/SKILL.md delete mode 100644 source/skills/frontend-design/SKILL.md delete mode 100644 source/skills/normalize/SKILL.md delete mode 100644 source/skills/onboard/SKILL.md delete mode 100644 source/skills/teach-impeccable/SKILL.md diff --git a/.codex/skills/impeccable/SKILL.md b/.codex/skills/impeccable/SKILL.md index 29e31ef86..e5389af77 100644 --- a/.codex/skills/impeccable/SKILL.md +++ b/.codex/skills/impeccable/SKILL.md @@ -354,4 +354,4 @@ Confirm completion and summarize the key design principles that will now guide a ## Extract Mode -If this skill is invoked with the argument "extract" (e.g., `$impeccable extract [target]`), follow the [extract flow](reference$extract.md). Pass any additional arguments as the extraction target. \ No newline at end of file +If this skill is invoked with the argument "extract" (e.g., `$impeccable extract [target]`), follow the [extract flow](reference/extract.md). Pass any additional arguments as the extraction target. \ No newline at end of file diff --git a/bin/commands/skills.mjs b/bin/commands/skills.mjs index 5fd000f5e..b51c1e233 100644 --- a/bin/commands/skills.mjs +++ b/bin/commands/skills.mjs @@ -220,6 +220,18 @@ async function install(flags) { } } + // Clean up deprecated skills from previous versions + try { + const { cleanup } = await import('../../source/skills/impeccable/scripts/cleanup-deprecated.mjs'); + const result = cleanup(root); + const total = result.deletedPaths.length + result.removedLockEntries.length; + if (total > 0) { + console.log(`Cleaned up ${total} deprecated skill(s) from previous versions.`); + } + } catch { + // Cleanup script not available -- skip + } + console.log(`\nDone! Run /${prefix}impeccable teach in your AI harness to set up design context.\n`); } @@ -356,6 +368,21 @@ function downloadFile(url, dest) { async function update(flags = []) { const yes = flags.includes('-y') || flags.includes('--yes'); + + // Clean up deprecated skills before updating, so npx skills update + // does not fail on entries that no longer exist in the source repo. + try { + const { cleanup } = await import('../../source/skills/impeccable/scripts/cleanup-deprecated.mjs'); + const root = findProjectRoot(); + const result = cleanup(root); + const total = result.deletedPaths.length + result.removedLockEntries.length; + if (total > 0) { + console.log(`Cleaned up ${total} deprecated skill(s) from previous versions.\n`); + } + } catch { + // Cleanup script not available (e.g. running from npm package) -- skip + } + // Try npx skills update first console.log('Checking for skills manager...'); let noLockFile = true; diff --git a/public/index.html b/public/index.html index 89b888b21..e2dda6bab 100644 --- a/public/index.html +++ b/public/index.html @@ -452,7 +452,22 @@
-

Roughly monthly notes on new commands, anti-patterns, and the design thinking behind Impeccable.

+

Keep skills current and follow along with new commands, anti-patterns, and the design thinking behind Impeccable.

+ +
+
+ $ + npx skills update + +
+ Run periodically to pull the latest skill definitions. +
+
@@ -621,12 +636,12 @@
How do I update to the latest version?
-
    -
  • All tools: npx skills update (or npx skills check to see what's new first)
  • -
  • Claude Code plugin: Open /plugin, go to the Discover tab, and update from there
  • -
  • Manual ZIP: Download the latest ZIP from above and extract to your project root, overwriting existing files
  • -
-

Your .impeccable.md design context file (created by /impeccable teach) is never overwritten. Your project context is preserved across updates.

+

Run npx skills update from your project root. This pulls the latest skill definitions for all installed skills. Use npx skills check first to see what changed.

+

If the update fails (e.g. "Failed to update" errors for renamed skills), re-install instead:

+
npx skills add pbakaus/impeccable
+

Then run /impeccable once. It will automatically clean up leftover files from renamed or merged skills.

+

Other update methods: Claude Code plugin updates via /plugin in the Discover tab. Manual ZIP users can download the latest from above and extract to the project root.

+

Your .impeccable.md design context file is never overwritten. Your project context is preserved across updates.

diff --git a/public/js/generated/counts.js b/public/js/generated/counts.js index 420bdc2f0..397efb84c 100644 --- a/public/js/generated/counts.js +++ b/public/js/generated/counts.js @@ -1,3 +1,3 @@ // GENERATED by build.js — do not edit -export const COMMAND_COUNT = 21; +export const COMMAND_COUNT = 18; export const DETECTION_COUNT = 25; diff --git a/source/skills/arrange/SKILL.md b/source/skills/arrange/SKILL.md deleted file mode 100644 index 99ba335be..000000000 --- a/source/skills/arrange/SKILL.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: arrange -description: "DEPRECATED: This skill has been renamed to 'layout'. Run /layout instead." ---- - -This skill has been renamed to **layout**. Run `{{command_prefix}}layout` instead. - -If `{{command_prefix}}layout` is not available, tell the user to update their skills by running `npx impeccable skills update` in their terminal. diff --git a/source/skills/extract/SKILL.md b/source/skills/extract/SKILL.md deleted file mode 100644 index d887d1b6e..000000000 --- a/source/skills/extract/SKILL.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: extract -description: "DEPRECATED: This skill has been folded into 'impeccable extract'. Run /impeccable extract instead." ---- - -This skill has been folded into **impeccable extract**. Run `{{command_prefix}}impeccable extract` instead. - -If `{{command_prefix}}impeccable extract` is not available, tell the user to update their skills by running `npx impeccable skills update` in their terminal. diff --git a/source/skills/frontend-design/SKILL.md b/source/skills/frontend-design/SKILL.md deleted file mode 100644 index 642a7e466..000000000 --- a/source/skills/frontend-design/SKILL.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: frontend-design -description: "DEPRECATED: This skill has been renamed to 'impeccable'. Run /impeccable instead." ---- - -This skill has been renamed to **impeccable**. All design functionality now lives in the `{{command_prefix}}impeccable` skill. - -Check if the impeccable skill is available: -- If `{{command_prefix}}impeccable` exists, use it directly. You can safely inform the user that the `frontend-design` folder is a deprecated leftover and can be deleted. -- If `{{command_prefix}}impeccable` does NOT exist, tell the user to update their skills by running `npx impeccable skills update` in their terminal. - -Do NOT attempt any design work from this skill. Redirect to `{{command_prefix}}impeccable` instead. diff --git a/source/skills/normalize/SKILL.md b/source/skills/normalize/SKILL.md deleted file mode 100644 index 36146f287..000000000 --- a/source/skills/normalize/SKILL.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: normalize -description: "DEPRECATED: This skill has been merged into 'polish'. Run /polish instead." ---- - -This skill has been merged into **polish**. Run `{{command_prefix}}polish` instead. Polish now includes design system discovery and alignment as part of its workflow. - -If `{{command_prefix}}polish` is not available, tell the user to update their skills by running `npx impeccable skills update` in their terminal. diff --git a/source/skills/onboard/SKILL.md b/source/skills/onboard/SKILL.md deleted file mode 100644 index 9a2672fd9..000000000 --- a/source/skills/onboard/SKILL.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: onboard -description: "DEPRECATED: This skill has been merged into 'harden'. Run /harden instead." ---- - -This skill has been merged into **harden**. Run `{{command_prefix}}harden` instead. Harden now covers onboarding flows, empty states, and first-run experiences as part of production readiness. - -If `{{command_prefix}}harden` is not available, tell the user to update their skills by running `npx impeccable skills update` in their terminal. diff --git a/source/skills/teach-impeccable/SKILL.md b/source/skills/teach-impeccable/SKILL.md deleted file mode 100644 index 9e39a713e..000000000 --- a/source/skills/teach-impeccable/SKILL.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: teach-impeccable -description: "DEPRECATED: Use /impeccable teach instead. This command has been folded into the impeccable skill." -user-invocable: true ---- - -This command has been renamed. Run `{{command_prefix}}impeccable teach` instead. - -Do NOT proceed with any teach flow here. Simply inform the user: - -> The `{{command_prefix}}teach-impeccable` command has been renamed to `{{command_prefix}}impeccable teach`. Please use that instead.