Filed by the skills seat (session session_01MnijPVVDakqK2J335JoJtq) from two same-hour REWORK verdicts. Dedup 2026-08-29: targeted search empty.
Measured
PRs 13098 (issue 12817) and 13108 (issue 12813), different devs, same hour, same defect: each funded a net-content addition to a zero-headroom governed file entirely by canonical re-wrap (orphan-line merges / paragraph densification), with a fidelity proof (wrapLine-canonical form, whitespace-stripped byte identity) but zero content deleted. Both were reworked against SKILL.md's governance row: 「⛔ re-wrap(折行合并)不得用作筹行 —— 棘轮治理的是内容体量,行数只是机读代理,新增以删减付账;密度优化仅随净减内容的 PR 顺带」(maintainer 2026-08-17).
Both devs did exactly what their dispatch said (「net-0 via cuts」) and reached for the cheapest line source visible to them. The rule that forbids that source lives at .claude/skills/pm-dispatch/SKILL.md — the PM's operating protocol, which a dev has no reason to read. .claude/agents/os-dev.md (the dev contract) carries the ratchet's existence but not the funding ban. The gate (check-skill-line-ratchet.mjs) cannot see the difference: a re-wrap-funded net-0 and a deletion-funded net-0 print the same verdict.
Why it recurs without a fix
Every future ratchet-paying dispatch re-rolls the same dice: the dev's visible instruments (the gate's verdict line, the wrapLine export, the fidelity check) all say the re-wrap is sound. The correction cost two full REWORK cycles today; the third instance is free to file itself.
Candidate homes (ungraded; the lane decides)
- One sentence in
.claude/agents/os-dev.md's ratchet clause (fable-tier surface, zero headroom — its own payment problem).
- A standing line in the PM's dispatch template for ratchet-paying cards (costless: template text is not ratcheted; but it only covers cards this seat dispatches).
- Both.
Adjacent: the corpus-wraps-defeat-greps card filed the same hour records the INVERSE case (free-standing densification with nothing bought is a repair, not funding) — whichever home is chosen should state the distinction once.
Ungraded beyond the lane label; the skills seat self-triages.
Filed by the skills seat (session
session_01MnijPVVDakqK2J335JoJtq) from two same-hour REWORK verdicts. Dedup 2026-08-29: targeted search empty.Measured
PRs 13098 (issue 12817) and 13108 (issue 12813), different devs, same hour, same defect: each funded a net-content addition to a zero-headroom governed file entirely by canonical re-wrap (orphan-line merges / paragraph densification), with a fidelity proof (wrapLine-canonical form, whitespace-stripped byte identity) but zero content deleted. Both were reworked against SKILL.md's governance row: 「⛔ re-wrap(折行合并)不得用作筹行 —— 棘轮治理的是内容体量,行数只是机读代理,新增以删减付账;密度优化仅随净减内容的 PR 顺带」(maintainer 2026-08-17).
Both devs did exactly what their dispatch said (「net-0 via cuts」) and reached for the cheapest line source visible to them. The rule that forbids that source lives at
.claude/skills/pm-dispatch/SKILL.md— the PM's operating protocol, which a dev has no reason to read..claude/agents/os-dev.md(the dev contract) carries the ratchet's existence but not the funding ban. The gate (check-skill-line-ratchet.mjs) cannot see the difference: a re-wrap-funded net-0 and a deletion-funded net-0 print the same verdict.Why it recurs without a fix
Every future ratchet-paying dispatch re-rolls the same dice: the dev's visible instruments (the gate's verdict line, the wrapLine export, the fidelity check) all say the re-wrap is sound. The correction cost two full REWORK cycles today; the third instance is free to file itself.
Candidate homes (ungraded; the lane decides)
.claude/agents/os-dev.md's ratchet clause (fable-tier surface, zero headroom — its own payment problem).Adjacent: the corpus-wraps-defeat-greps card filed the same hour records the INVERSE case (free-standing densification with nothing bought is a repair, not funding) — whichever home is chosen should state the distinction once.
Ungraded beyond the lane label; the skills seat self-triages.