The correction is already applied — MOTIR-2659's AC 5 was amended on the card during its run, the compression shipped, and notes.html #258 carries the lesson. This card is the telemetry, filed at the planner-bug home; nothing is scheduled and nothing is blocked.
⚠️ This defect has a SIBLING filed the same day: MOTIR-2686 (
notes.html#257, from the MOTIR-2569 run). Both are an acceptance criterion stated as a number that was never checked, and the two halves are different: there the number was measured correctly and the card excluded by name the work that would move it; here the number was never measured on the thing it names. So the family is not "numbers are risky" — a threshold has TWO preconditions: it must be measured on the criterion's OWN scope, AND that scope must be work the card is allowed to do. MOTIR-2686 fails the second, this one the first, and a card can fail either while satisfying the other. Per gate 9 that is two; a third makes the re-shape mandatory — see AC 3.
AC 5 read: "python3 prompts/plan-rules/COMPRESSION.measure.py reports the checklist region below 200 lines, down from 307." — a 35% cut, demanded of one region, under a rule (COMPRESSION.md § Decision 1, compress the WARRANT, never the TRIGGER) that cannot deliver it.
COMPRESSION.md measures the corpus-wide warrant share at three grains and takes the SENTENCE grain as its working figure: 29.9%. AC 5 carried that proportion across to a region it had never been measured on. Running the record's own classifier scoped to core.md lines 31–337 — same code, same grain, one invocation — returns 103 lines of 307:
| grain | lines of the 307 | region after the cut |
|---|---|---|
| clause | 52 | 255 |
| sentence — the record's working grain | 103 | 204, before one tag line |
| block | 258 | 49 — cuts triggers with the evidence |
307 − 103 = 204. The criterion is unreachable before a single evidence tag is inserted, and § Decision 1 mandates one tag per compressed rule. The only grain that reaches under 200 is the BLOCK grain, which is a whole bullet at a time — precisely what § Decision 4 forbids: "the target gives way, not the rule."
And 103 over-counts what can MOVE: it marks any sentence carrying a citation, sweeping in pure triggers that happen to cite (gate 6's "The tell: a conjunction in the card's OWN summary…", gate 14's "Its tell is purely lexical too…", gate 8's "Before sizing it, grep every caller…"). The attributable warrant that moved is 4 258 characters — 29 lines, landing the region at 278.
COMPRESSION.md (MOTIR-2642) merged at 14:29; MOTIR-2659 was created 14:00, last edited 14:07. The card was authored against a record still in review, so the number came from the record's prose rather than from COMPRESSION.measure.py — which shipped in the same PR and was runnable the moment it landed. The run-time calendar check fired exactly as run.md describes it: the blocker merged after the card, so the record outranks the card, and the contradicted clause is an amendment to make on the record rather than a feature to build.
Per-card gate 2 already forbids asserting a code fact that was not grepped. A quantity is the same kind of fact and reads as far more checked, because a figure carried from a real measurement is arithmetically true of something — just not of the thing the criterion names. The general shape is a denominator swap: "29.9% of the corpus" and "35% of this region" look like one claim at two zoom levels and are two measurements, only one of them taken. Same non-entailment as notes.html #253's X ∈ main ⇏ X ∈ <tag>, on a ratio instead of a git ref.
notes.html #258 exists and states the lesson (a number in an acceptance criterion is a claim about a measurement, discharged by running that measurement scoped the way the criterion scopes it) and the prompt hint (run the tool while authoring the card; prefer a criterion naming the RULE over one naming an inferred number), and cross-links #257 as the sibling instance.prompts/plan-rules/COMPRESSION.md — § Decision 1 (the grains, the warrant rule), § Decision 4 (the target gives way, not the rule).prompts/plan-rules/COMPRESSION.measure.py — the classifier; scoping it to a line range is the check that was never run.prompts/plan-rules/core.md — the region, now 278 lines; gate 2's claim-vs-pointer limb is where AC 3's clause would land.notes.html #258 (this instance) and #257 (MOTIR-2686 / MOTIR-2569, the sibling).