Planning bug: eleven cards were cut on a measurement the SAME pass created a card to replace — and one target survived only in a title
Filed by the motir run MOTIR-2797 that ran MOTIR-2817 and then re-planned its siblings. The correction is already applied — this card is telemetry, not scheduled work.
The defect
MOTIR-2797 was decomposed into eleven batch cards, each cut on a throwaway grep reporting 876 call sites — 577 in-scope, 157 out-of-scope, 142 needs-binding-first.
The same pass created MOTIR-2817, whose entire job is to BUILD the classifier that replaces that grep, and whose acceptance criteria said so explicitly: "If the real numbers differ, the CLASSIFIER wins and this card updates the story body." The plan knew the number was provisional and cut eleven cards on it anyway.
Measured: 458 in-scope, 227 not-gated + 17 pre-auth = 244 out-of-scope, 120 needs-binding-first, and 352 already-bound — a population the old table had no column for.
The gap is not carelessness. Almost all of it is one thing: the grep ran BEFORE MOTIR-2755 merged, and that story's own twenty fixture batches bound a large share of these very reads on the way past. They left the backlog by being fixed. The remainder is a grep counting LINES where an AST counts CALLS.
Three consequences, in rising order of cost
- Every batch card's count was wrong. Cosmetic; recoverable by editing titles.
- A SPLIT outlived its justification.
tests/integration/work-itemswas cut across two cards (A–L / M–W) purely because it measured 94 — the heaviest target in the suite. It measures 53. Two cards would have edited the same files and the same shared ratchet line for no review benefit. Unlike the number, a stale split is invisible: both cards named real directories, validated clean and readready. - A target survived only in a TITLE.
tests/integration/backlog— 24 sites, the third-largest target — was named by no card body. It appeared once, in the title of a card whose body listed other things. A reader opening every card and reading what each promised would have found nobody doing it.
Why the gates did not catch (3)
validate_work_item reads edges, not prose. The per-card gate checklist (plan-rules/core.md) reads each card's acceptance criteria — where the directory never appeared. A title is not a commitment: no gate reads it, and a runner works to the criteria. Same family as notes.html #219 — the failure is not a wrong statement, it is a statement in a place nothing reads.
The cheapest fix was available and free
The batch cards could have been authored as titles + edges only, with targets and counts filled in after MOTIR-2817 ran. The titles-first skeleton rule already prescribes titles before descriptions; this is the case where that gap is load-bearing rather than stylistic. It would have prevented all three consequences at zero cost.
Applied
- MOTIR-2818 … MOTIR-2828 archived, each with a comment naming its replacement and the reason.
- Ten replacements created — MOTIR-2834 … MOTIR-2843 — cut on the classifier's per-directory report, each pinned to
motir-core, each with both content axes. - MOTIR-2837 names
tests/integration/backlogin its BODY and its acceptance criteria, and its title says the directory was previously unowned. - MOTIR-2843 carries no fixed file list on purpose — its scope is "whatever the classifier still reports", which is the shape that cannot go stale.
- MOTIR-2829 rewired onto the ten, its numbers restated, and a new clause added:
UNTOUCHED_OUT_OF_SCOPE_FLOORmust SURVIVE at non-zero, which the pre-re-plan card would have silently dropped. - MOTIR-2797's title corrected from 577 → 458 — the op-replan rule's own tell: "a title carrying the dead mechanism is an unswept card."
notes.htmllesson logged as #282 (motir-meta PR #193, authored 2026-08-16 by themotir run MOTIR-1465sweep).#266— corrected 2026-08-16: this card originally cited #266, which is MOTIR-2848's prose-dependency entry, filed the same day. The lesson for THIS defect had never been written; it was located by CONTENT, not by the number.
The lesson
A count in a card body is a claim about a moving world, and the cards cut from it inherit its expiry date. This is the sweep-the-referrers corollary rotated onto a new axis: no mechanism changed and no card was falsified — a sibling story simply did some of the work, which is the most ordinary thing that can happen in a plan, and it invalidated a decomposition nobody had reason to re-read.