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) <noreply@anthropic.com>
This commit is contained in:
Paul Bakaus
2026-04-10 09:34:38 -07:00
co-authored by Claude Opus 4.6
parent 22b7adf56f
commit f30475cdf4
10 changed files with 51 additions and 64 deletions
+1 -1
View File
@@ -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.
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.
+27
View File
@@ -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;
+22 -7
View File
@@ -452,7 +452,22 @@
<svg class="install-step-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M9 6l6 6-6 6"/></svg>
</summary>
<div class="install-step-body">
<p class="install-path-desc">Roughly monthly notes on new commands, anti-patterns, and the design thinking behind Impeccable.</p>
<p class="install-path-desc">Keep skills current and follow along with new commands, anti-patterns, and the design thinking behind Impeccable.</p>
<div class="install-cmd-block">
<div class="install-cmd-line">
<span class="terminal-prompt">$</span>
<code>npx skills update</code>
<button class="copy-btn" aria-label="Copy command" data-copy="npx skills update">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
<path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path>
</svg>
</button>
</div>
<span class="install-cmd-note">Run periodically to pull the latest skill definitions.</span>
</div>
<div class="install-updated-subscribe">
<iframe class="install-updated-substack" src="https://impeccablestyle.substack.com/embed" width="100%" height="130" frameborder="0" scrolling="no"></iframe>
<a href="https://x.com/impeccable_ai" class="install-updated-x" target="_blank" rel="noopener">
@@ -621,12 +636,12 @@
<details class="faq-item">
<summary class="faq-question">How do I update to the latest version?</summary>
<div class="faq-answer">
<ul>
<li><strong>All tools:</strong> <code>npx skills update</code> (or <code>npx skills check</code> to see what's new first)</li>
<li><strong>Claude Code plugin:</strong> Open <code>/plugin</code>, go to the Discover tab, and update from there</li>
<li><strong>Manual ZIP:</strong> Download the latest ZIP from above and extract to your project root, overwriting existing files</li>
</ul>
<p>Your <code>.impeccable.md</code> design context file (created by <code>/impeccable teach</code>) is never overwritten. Your project context is preserved across updates.</p>
<p>Run <code>npx skills update</code> from your project root. This pulls the latest skill definitions for all installed skills. Use <code>npx skills check</code> first to see what changed.</p>
<p><strong>If the update fails</strong> (e.g. "Failed to update" errors for renamed skills), re-install instead:</p>
<div class="code-block-wrap"><pre class="code-block"><code>npx skills add pbakaus/impeccable</code></pre><button class="code-block-copy" type="button" data-copy="npx skills add pbakaus/impeccable" aria-label="Copy to clipboard"></button></div>
<p>Then run <code>/impeccable</code> once. It will automatically clean up leftover files from renamed or merged skills.</p>
<p>Other update methods: <strong>Claude Code plugin</strong> updates via <code>/plugin</code> in the Discover tab. <strong>Manual ZIP</strong> users can download the latest from above and extract to the project root.</p>
<p>Your <code>.impeccable.md</code> design context file is never overwritten. Your project context is preserved across updates.</p>
</div>
</details>
+1 -1
View File
@@ -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;
-8
View File
@@ -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.
-8
View File
@@ -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.
-12
View File
@@ -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.
-8
View File
@@ -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.
-8
View File
@@ -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.
-11
View File
@@ -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.