Rename frontend-design to impeccable, fold teach-impeccable into teach mode

Major skill consolidation for v2.0:

- Rename source/skills/frontend-design/ to source/skills/impeccable/
  with user-invocable: true and argument-hint: "[teach]"
- Fold teach-impeccable body into impeccable as "Teach Mode" section,
  activated via /impeccable teach
- Create deprecation shims:
  - frontend-design: redirects to /impeccable
  - teach-impeccable: redirects to /impeccable teach
- Update all 16 skill cross-references from {{command_prefix}}frontend-design
  to {{command_prefix}}impeccable and {{command_prefix}}teach-impeccable to
  {{command_prefix}}impeccable teach
- Update CLI sentinel detection to use 'impeccable' (with teach-impeccable
  as legacy fallback)
- Update build system readPatterns() path and EXCLUDED_FROM_SUGGESTIONS
- Update all public files (data.js, cheatsheet, index, viz, demos)
- Update all documentation (README, NOTICE, AGENTS, plugin.json)
- Update all test expectations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Paul Bakaus
2026-03-30 14:04:54 -07:00
co-authored by Claude Opus 4.6
parent 209444a9d5
commit f683f413c8
314 changed files with 2987 additions and 2602 deletions
+6 -2
View File
@@ -219,7 +219,7 @@ export function writeFile(filePath, content) {
* Returns { patterns: [...], antipatterns: [...] }
*/
export function readPatterns(rootDir) {
const skillPath = path.join(rootDir, 'source/skills/frontend-design/SKILL.md');
const skillPath = path.join(rootDir, 'source/skills/impeccable/SKILL.md');
if (!fs.existsSync(skillPath)) {
return { patterns: [], antipatterns: [] };
@@ -387,7 +387,11 @@ function escapeRegex(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
const EXCLUDED_FROM_SUGGESTIONS = new Set(['teach-impeccable', 'i-teach-impeccable']);
const EXCLUDED_FROM_SUGGESTIONS = new Set([
'impeccable', 'i-impeccable', // foundational skill, not a steering command
'teach-impeccable', 'i-teach-impeccable', // deprecated shim
'frontend-design', 'i-frontend-design', // deprecated shim
]);
export function replacePlaceholders(content, provider, commandNames = [], allSkillNames = []) {
const placeholders = PROVIDER_PLACEHOLDERS[provider] || PROVIDER_PLACEHOLDERS['cursor'];