Planning bug: the FOURTH line-target miss, and the re-shape — `--check` compares against a hand-typed constant instead of deriving the floor from the corpus
Repo: motir-meta. One PR. Filed by MOTIR-2662's run, which spent § Decision 4's escape clause and amended the target on the record for the third time. This is the re-shape the repeat-defect trigger prescribes at three, not a fourth patch.
Finding — a "measurement" that was still an arithmetic
MOTIR-2706 corrected § Decision 4 the day before, replacing a projection (1 600) with a figure derived from measurements (1 950), and stated the perfect-cut floor as 1 867 — 603 − 196 + 2×25, the evidence tag charged at the two lines § Decision 1 prints and COMPRESSION.conserve.py enforces.
MOTIR-2662 ran the cut and landed at 1 975.
The yield forecast was exactly right, which localises the error to one place. The record predicted the three landed cards' mean realisation of 38%; the cut removed 74 gross warrant lines against a projected 196 — 38% to the percentage point.
The entire 25-line miss is that an evidence tag occupies THREE lines on disk, not two. A blockquote must be separated from the paragraph above it by a blank line or Markdown folds it into that paragraph, so a tag inserted between two paragraphs costs blank + **Warrant:** + → [fixtures/…].
| perfect cut of the six worst-cell packs | formula | cell |
|---|---|---|
1-line tag (measure.py's TAG_LINES) | 603 − 196 + 1×25 = 432 | 1 842 |
| 2-line tag (§ Decision 1's printed form) | 603 − 196 + 2×25 = 457 | 1 867 ← recorded |
| 3-line tag (what a file holds) | 603 − 196 + 3×25 = 482 | 1 892 |
1 950 sat 58 lines above a floor that was itself 25 lines too low.
Why this is a re-shape and not a fourth correction
Three re-sets of one number in two days, all sharing a root shape — a line figure set from a calculation never run against the artifact it describes:
| # | instance | the unmeasured step |
|---|---|---|
| MOTIR-2687 | AC set from a corpus-wide warrant share | the share was never measured on the region |
| MOTIR-2702 | TAG_LINES = 1 vs a two-line printed form | nobody multiplied |
| this one | floor from a two-line tag | the separator the format requires was never counted |
Per plan-rules/kind-bug.md's repeat-defect trigger, at three the card is not sealable on the three-independent-causes branch — they are one cause. So: the re-shape card.
notes.html #260 carries the lesson and its rule-tier move: a number about an artifact is checkable only against the artifact — not against its specification, not against the code that generates it, not against the paragraph defining its shape.
Acceptance criteria
COMPRESSION.measure.pyDERIVES the worst cell's perfect-cut floor from the corpus it already walks — per-pack sentence-grain warrant, warranted-rule count, and aTAG_LINESread from a REAL tag — and prints it beside the measured cell.--checkcompares the cell against a derived floor and a derived expected landing; no hand-typedWORST_TARGETsurvives as the sole authority.TAG_LINESis established EMPIRICALLY, not declared. The script counts the on-disk lines a real tag occupies in a compressed pack (> **Warrant:**+→ [fixtures/…]+ the mandatory blank separator) rather than carrying a literal. This subsumes MOTIR-2702's AC 1 — coordinate: if MOTIR-2702 lands first it setsTAG_LINES = 3, not 2, and this card replaces the constant with the count.- A MINIMUM-SPAN rule is recorded in
COMPRESSION.md§ Decision 1: a rule whose separable warrant is smaller than the tag that replaces it is left whole and named, because compressing it makes the pack longer. Fixture:op-replan.mdcame out +1 line / −494 chars at a 49.1% measured warrant share. - § Decision 4's amendment history is left as written — three strikethroughs and three dated blocks. This card changes how the number is COMPUTED, not what the record says happened.
plan-rules/rule TEXT is not edited — this is tooling and record only.
Context refs
prompts/plan-rules/COMPRESSION.md— § Decision 4's third amendment (MOTIR-2662) carries the arithmetic; § Consequences' "The projection SIZES a problem" carries the three prior defects.prompts/plan-rules/COMPRESSION.measure.py—TAG_LINES,CORE_CAP,WORST_TARGET, and the--checkblock.prompts/plan-rules/COMPRESSION.conserve.py— theTAG/PTRregexes; the authority on the tag's shape, and where a real tag can be counted.notes.html#260 — this occurrence; #257 / #258 / #259 — the prior three.- ⚠️ MOTIR-2711 is open and adjacent:
conserve.py's defaultmerge-basebaseline is post-compression onmain. Both cards are "the checker's default is wrong"; they are separable but should be read together.