Filed unassigned while implementing #9922 (published lock recipe → property
statements). Out of that card's scope: the card's file surface is exactly
skills/objectstack-pm-dispatch/SKILL.md, and this is a change to
scripts/pm/check-skill-line-ratchet.mjs.
Measured
scripts/pm/check-skill-line-ratchet.mjs's CEILINGS map, read on
origin/main at merge base 05864fb20, covers 16 entries: the six
.claude/skills/pm-dispatch/** files, the six references/lanes/*.md, the
four other .claude/skills/*/SKILL.md, .claude/agents/os-dev.md, and
AGENTS.md.
It covers zero files under the published skills/ root. Run on that same
tree:
node scripts/pm/check-skill-line-ratchet.mjs # exit 0
grep -c objectstack-pm-dispatch <that output> # 0
node scripts/pm/dispatch-gates.mjs on a diff touching only
skills/objectstack-pm-dispatch/SKILL.md confirms it from the other side: the
gate families it derives are check:pm-governed-merges,
check:skill-compatibility and check:skill-frame-sync — the ratchet family
is not among them.
Why it may matter
The ratchet's own header states the erosion mechanism it exists to stop, and
the mechanism is not specific to any one root: an instruction file grows one
well-meaning paragraph at a time until somebody pays for a compression pass.
#9473 acted on exactly that reasoning and extended coverage from the
pm-dispatch surface to the other four internal playbooks. The published
catalog was not part of that extension, and it is the larger surface —
skills/objectstack-pm-dispatch/SKILL.md alone is 1,050 lines on main,
larger than every ratcheted entry except AGENTS.md.
Two honest counter-arguments, which is why this is filed as an observation
rather than a defect:
- The ratchet's stated rationale is token cost on files read in full by
every seat session and Routine fire. The published catalog is read by
customer projects, not by this repo's seats, so the cost curve it was
built against is a different one. - The published catalog is a governed, human-merge-only surface already, so
growth there passes a human eye by construction — which is not true of the
files the ratchet was built for.
If the answer is "deliberately uncovered", the ratchet header is the place to
say so — it currently reads as though the ceiling covers the instruction
surface as a category, and a reader cannot see the published root is outside
it without diffing the map against the filesystem.
Related: #9473 (the previous coverage extension, closed), #9922.
Generated by Claude Code
Filed unassigned while implementing #9922 (published lock recipe → property
statements). Out of that card's scope: the card's file surface is exactly
skills/objectstack-pm-dispatch/SKILL.md, and this is a change toscripts/pm/check-skill-line-ratchet.mjs.Measured
scripts/pm/check-skill-line-ratchet.mjs'sCEILINGSmap, read onorigin/mainat merge base05864fb20, covers 16 entries: the six.claude/skills/pm-dispatch/**files, the sixreferences/lanes/*.md, thefour other
.claude/skills/*/SKILL.md,.claude/agents/os-dev.md, andAGENTS.md.It covers zero files under the published
skills/root. Run on that sametree:
node scripts/pm/dispatch-gates.mjson a diff touching onlyskills/objectstack-pm-dispatch/SKILL.mdconfirms it from the other side: thegate families it derives are
check:pm-governed-merges,check:skill-compatibilityandcheck:skill-frame-sync— the ratchet familyis not among them.
Why it may matter
The ratchet's own header states the erosion mechanism it exists to stop, and
the mechanism is not specific to any one root: an instruction file grows one
well-meaning paragraph at a time until somebody pays for a compression pass.
#9473 acted on exactly that reasoning and extended coverage from the
pm-dispatch surface to the other four internal playbooks. The published
catalog was not part of that extension, and it is the larger surface —
skills/objectstack-pm-dispatch/SKILL.mdalone is 1,050 lines onmain,larger than every ratcheted entry except
AGENTS.md.Two honest counter-arguments, which is why this is filed as an observation
rather than a defect:
every seat session and Routine fire. The published catalog is read by
customer projects, not by this repo's seats, so the cost curve it was
built against is a different one.
growth there passes a human eye by construction — which is not true of the
files the ratchet was built for.
If the answer is "deliberately uncovered", the ratchet header is the place to
say so — it currently reads as though the ceiling covers the instruction
surface as a category, and a reader cannot see the published root is outside
it without diffing the map against the filesystem.
Related: #9473 (the previous coverage extension, closed), #9922.
Generated by Claude Code