mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
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:
co-authored by
Claude Opus 4.6
parent
22b7adf56f
commit
f30475cdf4
@@ -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.
|
||||
@@ -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
@@ -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,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;
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user