Problem
#15257 set a merge-eligibility byte gate: combined review-cost-circuit-breaker.md + pr-review-guide.md < 41,357 B. It is an acceptance criterion on one PR and nothing else. Nothing enforces it.
dev is in breach of it right now, and nobody noticed:
| surface |
circuit-breaker |
guide |
combined |
| baseline when the gate was set |
4,506 |
36,851 |
41,357 ← the gate |
dev today |
4,506 |
36,986 |
41,492 ← 135 B over |
| PR #15307's head |
2,207 |
36,544 |
38,751 ← passes, 2,606 B headroom |
The guide drifted +135 B after the baseline was measured, silently, and put dev past its own boundary. #15307 happens to bring it back under — but nothing stops the next guide edit from re-breaching it, and the next drift will be exactly as invisible as the one that already happened.
Why this is worth machinery
#15257's whole thesis is that voluntary discipline fails under load, and that the fix is a deterministic refusal rather than a documented norm — that is precisely why state-(b) ("semantic blocker, converging") had to be deleted by name: it was a subjective escape that "authorized the loop it was meant to cap."
Leaving that ticket's one measurable boundary as a voluntary per-PR check reproduces the same shape one layer up. The +135 B drift is the proof: the honour system already lost once, quietly.
Verified there is no existing guard: agent-pr-review-body-lint.yml lints review body structure (micro-delta anchors), not file sizes; 41357 appears nowhere in code or CI (git grep '41357' -- ':!*.md' → only coincidental digits in apps/devindex/resources/data/users.jsonl).
Acceptance Criteria
Out of scope
- Re-baselining the gate upward to accommodate drift. That inverts the point. If the limit is wrong, that is a decision with a rationale, not a CI edit.
- A general loaded-surface budget across all skills. Real, and much larger; this ticket only guards the boundary #15257 already set.
Evidence
git show origin/dev:.agents/skills/pr-review/references/pr-review-guide.md | wc -c → 36,986 (baseline 36,851).
git show 38018bb539ce:… → circuit-breaker 2,207 + guide 36,544 = 38,751.
- #15257 AC: "Merge-eligibility byte gate: the combined two-file boundary is < 41,357 B after the replacement."
- PR #15307 review (approved): the measurement table + this finding.
Provenance
Surfaced while reviewing #15307 as the cross-family gate. I measured the wrong pair first (SKILL.md + guide, a comfortable pass) before reading #15257's AC and finding it names circuit-breaker + guide — both surfaces were green, which is exactly why the gate needs a machine that knows which two files it means.
Related: #15257 (set the gate) · PR #15307 (passes it, and is why the drift became visible)
Problem
#15257 set a merge-eligibility byte gate: combined
review-cost-circuit-breaker.md+pr-review-guide.md< 41,357 B. It is an acceptance criterion on one PR and nothing else. Nothing enforces it.devis in breach of it right now, and nobody noticed:devtodayThe guide drifted +135 B after the baseline was measured, silently, and put
devpast its own boundary. #15307 happens to bring it back under — but nothing stops the next guide edit from re-breaching it, and the next drift will be exactly as invisible as the one that already happened.Why this is worth machinery
#15257's whole thesis is that voluntary discipline fails under load, and that the fix is a deterministic refusal rather than a documented norm — that is precisely why
state-(b)("semantic blocker, converging") had to be deleted by name: it was a subjective escape that "authorized the loop it was meant to cap."Leaving that ticket's one measurable boundary as a voluntary per-PR check reproduces the same shape one layer up. The +135 B drift is the proof: the honour system already lost once, quietly.
Verified there is no existing guard:
agent-pr-review-body-lint.ymllints review body structure (micro-delta anchors), not file sizes;41357appears nowhere in code or CI (git grep '41357' -- ':!*.md'→ only coincidental digits inapps/devindex/resources/data/users.jsonl).Acceptance Criteria
.agents/skills/pr-review/audits/review-cost-circuit-breaker.md+.agents/skills/pr-review/references/pr-review-guide.mdcombined exceed the gate — measured in bytes, reported asactual / limit / headroomso a near-miss is visible before it is a breach.devbreach is resolved — either by #15307 merging (which lands 38,751 B) or, if that changes, by an explicit re-baseline with the new number recorded and justified.SKILL.mdbelongs in the sum and the number changes. Do not widen it silently.Out of scope
Evidence
git show origin/dev:.agents/skills/pr-review/references/pr-review-guide.md | wc -c→ 36,986 (baseline 36,851).git show 38018bb539ce:…→ circuit-breaker 2,207 + guide 36,544 = 38,751.Provenance
Surfaced while reviewing #15307 as the cross-family gate. I measured the wrong pair first (
SKILL.md+ guide, a comfortable pass) before reading #15257's AC and finding it namescircuit-breaker + guide— both surfaces were green, which is exactly why the gate needs a machine that knows which two files it means.Related: #15257 (set the gate) · PR #15307 (passes it, and is why the drift became visible)