Skip to content

[finding] The PUBLISHED skills/ catalog carries no line-ratchet ceiling — every .claude/ instruction surface does #9923

Description

@os-warren

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:

  1. 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.
  2. 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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions