Planning bug: an INTERIM card pair outlived the window it was written for — nothing walks back from the superseder's merge to the cards it makes pointless
Found by motir run MOTIR-4126, 2026-09-03, which halted at guard #4 with the card's premise falsified.
What happened
On 2026-09-01, two cards were authored under MOTIR-3875 whose ENTIRE scope was a temporary window:
- MOTIR-4123
19:40Z— the interim disposition for/p/*404ing whilemotir.co/explorelinked into the hole. - MOTIR-4126
20:09Z— the design prerequisite for that interim state,blocksMOTIR-4123.
Both named MOTIR-3877 — the durable public-project-page story — as the thing that supersedes them, and MOTIR-4123 wrote the guard explicitly: "an interim measure that has to be remembered and removed later is only acceptable if this card also names the card that removes it." It named it, via relates_to.
MOTIR-3877 landed and deployed 21 hours later (943dcaf 2026-09-02 10:19 −07:00, 136b023 2026-09-02 10:40 −07:00) and closed the window. Nothing retired the two interim cards. MOTIR-4126 stayed todo / ready: true with openBlockers: [] and validate_work_item valid: true; it was claimed 2 days later by a run that only discovered the window had closed by measuring the live hosts itself.
The defect
A relates_to edge to a superseding card carries no semantics anything reads. It renders as a chip and is invisible to readiness, to validate_work_item, and to every advisory family. There is no state in the plan that expresses "this card is alive only until that card lands" — so the interim card's release condition is prose, and the event that discharges it happens on a different card that never looks back.
Two properties make it expensive out of proportion to the edit, and both are why "be more careful" would not have caught it:
- The interim card is BETTER-written than average. MOTIR-4123 measured the live hosts, enumerated four dispositions, refused to pre-pick one, and named its own successor. That diligence is what made it read as scheduled rather than as debt, and nothing re-read it.
- The correct-at-the-time prior-art check passes. When MOTIR-4126 was authored, MOTIR-3877 genuinely "has not started" — MOTIR-4123 says so in its own body. The question that would have caught this is not "does a card already deliver this?" but "will the superseder land before this interim work is picked up?", and nobody asks a card about its own shelf life.
Building MOTIR-4126 as written would not merely have been wasted: its acceptance criterion 3 — "specifies no affordance leading to the unavailable /p/* destination" — instructs a designer to remove a working link.
Acceptance criteria
motir-meta/prompts/plan-rules/carries a rule for an INTERIM card: a card whose scope exists only until a named other card lands must carry a machine-readable release condition, not arelates_tochip — and the pass that authors it says which card, on approval of that card, retires it.- The rule states the RUN-side half too: before starting a card whose own body describes a temporary window, re-measure the window; a
relates_toto adonecard is the trigger to check, not evidence that the handover was made. - The rule is added, never re-worded into an existing one (
plan-rules/additions-not-rewordings). - The change lands as a branch + PR against
motir-metamain, never a direct commit.
Context refs
- MOTIR-4126 — the card this was found on; its comment carries the full live measurement.
- MOTIR-4123 — the interim card; its comment carries the disposition record.
- MOTIR-4125 — the EARLIER planning bug on the same pair ("an interim UI defect card was ready with four visible dispositions and no design prerequisite"). Its remedy CREATED MOTIR-4126, so this is the second planning defect on one pair, and a different one: that one was about a missing prerequisite, this one is about a missing expiry.
motir-meta/prompts/run.md— guard #4, the run-side half.