From 1a7def1c4940125a62d0261e249f04a3418e973b Mon Sep 17 00:00:00 2001 From: Stephen Moffitt Date: Thu, 2 Jul 2026 07:56:33 -0500 Subject: [PATCH] fix: skill:check no longer fails on host-skipped skill templates The template-coverage loop flagged claude/SKILL.md as 'generated file missing' and exited 1 on a pristine checkout. hosts/claude.ts declares generation.skipSkills: ['claude'] (the /claude outside-voice wrapper is only generated for non-Claude hosts), so the missing output is intentional. Honor the skip list in skill-check and print an informational line instead of an error. Co-Authored-By: Claude Fable 5 --- scripts/skill-check.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/skill-check.ts b/scripts/skill-check.ts index 9182737ee..1960e9d3b 100644 --- a/scripts/skill-check.ts +++ b/scripts/skill-check.ts @@ -65,7 +65,17 @@ for (const file of SKILL_FILES) { console.log('\n Templates:'); const TEMPLATES = discoverTemplates(ROOT); +// Skills the claude host never generates (e.g. the /claude outside-voice +// wrapper, which only exists for non-Claude hosts) — a missing output for +// these is intentional, not staleness. +const CLAUDE_SKIP_SKILLS = new Set(getHostConfig('claude').generation.skipSkills ?? []); + for (const { tmpl, output } of TEMPLATES) { + const skillDir = tmpl.includes('/') ? tmpl.split('/')[0] : ''; + if (skillDir && CLAUDE_SKIP_SKILLS.has(skillDir)) { + console.log(` - ${output.padEnd(30)} — not generated for claude host (skipSkills)`); + continue; + } const tmplPath = path.join(ROOT, tmpl); const outPath = path.join(ROOT, output); if (!fs.existsSync(tmplPath)) { @@ -90,7 +100,7 @@ for (const file of SKILL_FILES) { // ─── External Host Skills (config-driven) ─────────────────── -import { getExternalHosts } from '../hosts/index'; +import { getExternalHosts, getHostConfig } from '../hosts/index'; for (const hostConfig of getExternalHosts()) { const hostDir = path.join(ROOT, hostConfig.hostSubdir, 'skills');