From 79b0f2a9acb637e4ab20974015e09b877c390075 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Aug 2026 08:14:11 +0000 Subject: [PATCH] fix(pm): add per-file ceilings for the four uncovered skills (#9473) The skill line ratchet's header claims "the ceiling now covers the whole surface, per file" but the CEILINGS map only held the pm-dispatch surface. Add entries for checklist-test, checklist-author, dogfood-verification, and spec-property-retirement at their current line counts on origin/main (headroom 0, same convention as the existing entries). Extend the script's own self-test to assert the four are covered. Fixes #9473 --- scripts/pm/check-skill-line-ratchet.mjs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index d77cd3752d..b81051af4b 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -57,6 +57,14 @@ export const CEILINGS = new Map([ ['.claude/skills/pm-dispatch/references/landing-operations.md', 82], ['.claude/skills/pm-dispatch/references/seat-post-protocol.md', 101], ['.claude/agents/os-dev.md', 399], + // #9473: the other four `.claude/skills/` are read in full by the sessions + // that use them too — the erosion mechanism the ratchet exists to stop + // isn't specific to the pm-dispatch surface. Set at current counts on + // `origin/main` (headroom 0, same convention as the entries above). + ['.claude/skills/checklist-test/SKILL.md', 232], + ['.claude/skills/checklist-author/SKILL.md', 61], + ['.claude/skills/dogfood-verification/SKILL.md', 155], + ['.claude/skills/spec-property-retirement/SKILL.md', 328], ]); export function verdict(rel, lineCount, maxLines) { @@ -117,6 +125,7 @@ function selfTest() { ['SKILL.md is covered', CEILINGS.has('.claude/skills/pm-dispatch/SKILL.md'), true], ['the dev-agent definition is covered', CEILINGS.has('.claude/agents/os-dev.md'), true], ['all five compressed references are covered', ['dispatch-runbook', 'platform-readings', 'review-checklist', 'landing-operations', 'seat-post-protocol'].every((n) => CEILINGS.has(`.claude/skills/pm-dispatch/references/${n}.md`)), true], + ['the other four skills are covered (#9473)', ['checklist-test', 'checklist-author', 'dogfood-verification', 'spec-property-retirement'].every((n) => CEILINGS.has(`.claude/skills/${n}/SKILL.md`)), true], ]; let failed = 0; for (const [name, actual, expected] of cases) {