Planning bug: `COMPRESSION.conserve.py` cannot express "a gate gained a sub-bullet" — the enumeration's COUNT NUMERAL is surviving text, so every future limb re-words it
Repo: motir-meta. One PR. Surfaced 2026-08-17 by the motir run MOTIR-2913 execution, under notes.html #27 (an out-of-scope defect found mid-subtask is logged, never absorbed). MOTIR-2773's sibling, one arrow over: that card gave the checker a verdict for added; this is the shape an addition takes that the added verdict still cannot reach.
The defect
core.md gate 8 introduces its sub-bullets with a counted lead-in — "Six more triggers, each of which reads as not a re-plan…". The count is ordinary pack prose, so it sits inside the region COMPRESSION.conserve.py holds word-for-word against the pre-compression baseline.
Adding a sub-bullet therefore requires re-wording surviving text, and invariant C is stated so that any replace is fatal:
exit 1 a span was lost, or baseline text was re-worded, or a fragment was inserted
The sub-bullet itself classifies cleanly as + ADDED (MOTIR-2773's exemption works exactly as designed). It is the numeral that trips, and there is no way to add a limb to a counted enumeration without touching it.
The evidence — the FAIL on core.md is entirely this, and has been for two cards
Measured on origin/main at 77747a7, before MOTIR-2913 made any edit:
[FAIL] core.md baseline 60877c → 54893c (…, 5 sentence(s) ADDED)
REPLACE — expected 'F' got 'S'
REPLACE — expected 've' got 'x'
Five → Six. That is the whole violation: a previous card added a sub-bullet and bumped the numeral. No warrant was lost, no rule re-worded, no fragment inserted. core.md has been red since, for a numeral.
After MOTIR-2913's own sub-bullet (Five → Seven):
[FAIL] core.md baseline 60877c → 55760c (…, 6 sentence(s) ADDED)
REPLACE — expected 'Fi' got 'Se'
INSERT — expected '' got 'n'
The violation COUNT is unchanged — the same single reword region, re-expressed. Two cards have now paid the same red, and every future gate-8 limb will re-pay it.
Why it matters (the docstring says so itself)
conserve.py's own rationale for MOTIR-2773 is that a permanently-red check gets ignored:
A check that is red for a benign reason on three packs and counting is a check nobody reads, which is how a real re-wording gets through.
That is now true of core.md for the same reason the docstring names, via a shape the fix did not cover. core.md is the pack every pass loads, so it is the worst one to have parked at red.
Deliberately NOT decided here — the fix is a real choice
- Drop the numeral from the pack — "More triggers, each of which…". One
replacenow, none ever again. Cheapest, and the count carries no rule content. But it is itself a reword, so it must land as its own recorded exception. - Teach
is_additionan ENUMERATION-COUNT verdict — areplacewhose both sides are number-words/digits, adjacent to a list whose length changed by the delta. Precise, and strictly more machinery to trust. - Re-baseline
core.md— declines to answer, and loses every conservation claim since the first compression.
Recommend (1), with the finding written into COMPRESSION.md § Decision 1 so a reader knows why the numeral went. Do not pick it here without reading CORPUS-MAINTENANCE.md.
Related, NOT folded in
core.md's gate INDEX (line ~677) says "Limbs 8a–8e" while gate 8 has held six sub-bullets and now holds seven. Same root cause (an enumeration label that is surviving text), already stale before this run, and fixing it is a secondreplace— so it belongs to whichever disposition above lands, not to a separate card.
Acceptance criteria
python3 prompts/plan-rules/COMPRESSION.conserve.py coreis run and quoted BEFORE any edit, so the chosen fix is measured against the red recorded above and not against a re-derived one.- One of the three dispositions is chosen, applied, and its reasoning recorded in
COMPRESSION.md§ Decision 1 — including why the other two were refused. core.md's gate-8 sub-bullet count and its gate-index limb range (8a–8e) agree with the sub-bullets actually present, whatever form the disposition leaves them in.python3 prompts/plan-rules/COMPRESSION.conserve.pyis re-run over EVERY pack and its verdict quoted.core.mdreaches[PASS], or the PR body names the remaining violation and why it is not this card's.- The PR body states that the pre-existing red was
Five → Sixfrom an earlier card and NOT introduced by MOTIR-2913 — whose edit re-expressed the same single region — so no reader attributes it to the wrong PR.
Context refs
prompts/plan-rules/COMPRESSION.conserve.py—is_addition()/classify(), and the docstring's WHICH OPERATIONS IT IS STATED OVER section.prompts/plan-rules/core.mdgate 8 — the counted lead-in (line ~147) and the gate index (line ~677).- MOTIR-2773 — the added verdict this sits one arrow past; MOTIR-2913 — the run that surfaced it.