Filed unassigned, recording only. Surfaced while landing the platform-readings facts family (PR 11105, five graded cards into one file); the PR declares the same numbers in its own body rather than hiding them.
Measured
.claude/skills/pm-dispatch/references/platform-readings.md, one PR, five new fact entries plus in-place compression:
| reading | before | after |
|---|
| lines (what the gate counts) | 134 | 134 |
| bytes | 16,953 | 22,559 (+5,606, +33%) |
pnpm check:pm-skill-ratchet is green on both: platform-readings.md is 134 lines (ceiling 134; headroom 0). No ceiling was raised, no maintainer ruling was needed, and nothing in the gate saw the growth.
The mechanism
scripts/pm/check-skill-line-ratchet.mjs measures text.split(newline).length. The file's own wrapping convention is not uniform: older entries wrap near 100 bytes, entries added over the last week run 400 to 830 bytes on one line. So a line is not a unit of anything the reader pays for, and an author who writes in the recent dense style adds arbitrary content at zero measured cost while an author who wraps at 80 columns pays a line per 80 bytes. The incentive points at the less readable spelling.
That matters here specifically because the gate's own docblock states what it is defending, verbatim:
What the ratchet prices is a full-file token read paid PER SEAT SESSION and PER ROUTINE FIRE, which is what every covered file above costs.
Tokens are approximately proportional to bytes for this corpus; lines are not. So the gate's stated purpose and its actual measurement have drifted apart, silently, and the drift only shows up when someone reports it — the ratchet cannot.
Not claimed
- ⛔ Not surveyed. How much of the ~33% is this PR's five new facts versus reflow of existing entries is declared in the PR body from the author's side, but no measurement exists across the other seventeen ceilinged files. Whether they have been drifting the same way for weeks is unmeasured, and it is the first cheap reading whoever grades this should take (byte counts per landed edit, against the ceiling that stayed flat).
- ⛔ Not a claim that the additions were unjustified. Five measured platform facts landed; the point is that the control that was supposed to price them did not see them.
Possible directions (triage, not a recommendation)
- A token or byte ratchet alongside the line one. The repo already has the machinery for the published catalog:
scripts/check-skills-token-ratchet.mjs. Extending that shape to the .claude/ surface is the direction that measures what the header says it prices. - A max-line-length rule on the ceilinged files, which would make the line count mean something again without a second gate.
- Restate the header to say the ratchet prices line count as a proxy and accept the drift — the cheapest option, and the one that stops the gate from over-claiming.
The first two are real changes to a governed gate; the third is a docblock edit. Which of them is worth it is a maintainer call, not this seat's.
Generated by Claude Code
Filed unassigned, recording only. Surfaced while landing the platform-readings facts family (PR 11105, five graded cards into one file); the PR declares the same numbers in its own body rather than hiding them.
Measured
.claude/skills/pm-dispatch/references/platform-readings.md, one PR, five new fact entries plus in-place compression:pnpm check:pm-skill-ratchetis green on both:platform-readings.md is 134 lines (ceiling 134; headroom 0). No ceiling was raised, no maintainer ruling was needed, and nothing in the gate saw the growth.The mechanism
scripts/pm/check-skill-line-ratchet.mjsmeasurestext.split(newline).length. The file's own wrapping convention is not uniform: older entries wrap near 100 bytes, entries added over the last week run 400 to 830 bytes on one line. So a line is not a unit of anything the reader pays for, and an author who writes in the recent dense style adds arbitrary content at zero measured cost while an author who wraps at 80 columns pays a line per 80 bytes. The incentive points at the less readable spelling.That matters here specifically because the gate's own docblock states what it is defending, verbatim:
Tokens are approximately proportional to bytes for this corpus; lines are not. So the gate's stated purpose and its actual measurement have drifted apart, silently, and the drift only shows up when someone reports it — the ratchet cannot.
Not claimed
Possible directions (triage, not a recommendation)
scripts/check-skills-token-ratchet.mjs. Extending that shape to the.claude/surface is the direction that measures what the header says it prices.The first two are real changes to a governed gate; the third is a docblock edit. Which of them is worth it is a maintainer call, not this seat's.
Generated by Claude Code