Planning bug: an advisory disposition that CLAIMS an edge is wired names a different card than the advisory does — MOTIR-4252 was held by 4238 while the advisory pointed at 4254's PR
Found by motir run MOTIR-4252 (2026-09-03), which halted at step 0a / guard #4 before any worktree existed. The correction is already applied to the tree — this card is the RECORD, and the rule change is what it asks for.
The defect
MOTIR-4252's ## Advisory dispositions section read:
subsumption·likely-in-flight— accepted, not dismissed. Wired as ablocked_byedge; see § Sequencing above.
validate_work_item on that card returns the advisory as:
{"kind":"subsumption","path":"design/shell/design-notes.md",
"pullRequest":"moooon-B-V/motir-core#2554",
"pullRequestTitle":"MOTIR-4254 · design(shell): the rail's bottom section loses Docs and Legal",
"severity":"likely-in-flight","state":"open"}
The advisory names PR #2554 — MOTIR-4254's. The edge that was wired went to MOTIR-4238. Nobody compared the two. The disposition was therefore satisfied by an edge to a card the advisory never mentioned, and the real blocker stayed unwired.
The mis-attribution propagated into the card's substantive text. Its § Sequencing asserted:
"4238 takes the
Legalrow OUT of the rail's bottom section: six rows become five, andgrep -c \">Legal<\" design/shell/rail-bottom-section.mock.htmlgoes 5 → 0."
Measured on origin at 2026-09-03:
| ref | rail-bottom-section.mock.html | >Legal< | >Docs< |
|---|---|---|---|
origin/main | — | 5 | 6 |
origin/design/MOTIR-4238-help-menu (PR #2551) | not touched | 5 | 6 |
origin/design/MOTIR-4254-rail-loses-two-rows (PR #2554) | −238 lines | 0 | 0 |
So MOTIR-4238's pull request does not contain the change its blocked consumer was waiting for, and MOTIR-4252's acceptance criterion 5 was wrong twice over: wrong card, and five rows where the answer is four — MOTIR-4254 removes Docs as well as Legal, and that branch's own panel label reads "Complete — 4 rows".
The card also cited PR #2540 as MOTIR-4238's, which is CLOSED unmerged and whose title named MOTIR-4248.
How it happened
MOTIR-4254 was carved out of MOTIR-4238 by a likely-over-gate-sizing advisory (4238 was 5 pts / 85 min against a 70-minute threshold), and created at 2026-09-03T03:14:42Z — twelve minutes after MOTIR-4252 was authored at 03:02:31Z. The split moved the deliverable to a new key. MOTIR-4252's edge and prose, written against pre-split 4238, were not swept.
Why the existing gates did not fire
- The sweep-the-referrers corollary (
plan-rules/type-design.md) is written for a DESIGN-ALLOCATION pass. This was an over-gate-sizing carve-out, a different operation, and the referrer was a root-level card in a different container — outside the split's subtree, which is where a split naturally looks. - The advisory tier fired correctly and was defeated by its own disposition. The
subsumptionentry named the right pull request the whole time. What absorbed it is that the card wrote a disposition claiming the edge existed — and an edge DID exist, to a plausible neighbouring card, which is what makes this worse than the shape already recorded. readinesswas not wrong either — MOTIR-4252 readready: falseon the 4238 edge, so it was correctly held out of the ready set. The card would have been unblocked by the WRONG merge: had #2551 merged first, the card would have gone claimable and drawn a six-row rail that #2554 was about to make four.
The rule change this asks for
A disposition that claims an advisory is already discharged by an EDGE must name the same work item the advisory names, and the check is mechanical. Two candidate homes:
- Authoring (
plan-rules/core.mdgate 21, the advisory-disposition gate). Add: where a disposition's remedy is "wired as ablocked_byedge", the key in that sentence must equal the key the advisory carries — for asubsumptionentry, the work item whose pull request the advisory names. A disposition citing a different key is not a disposition. - Dispatch (
run.mdguard #4, the read the card's own advisory dispositions block). That block currently teaches the runner to treat an acknowledged-and-deferred advisory as undischarged. Extend it: an advisory the card says it ACTED on is also undischarged until you verify the act — for an edge, that the edge points at the item the advisory names.
(2) is the one that would have caught this, since it is what did. (1) is where it stops being authored.
Related prior art — the third of a family
- MOTIR-3749 — a split left two SIBLINGS edge-free; the dependency was prose with no key, so the detector had nothing to key on.
- MOTIR-4091 — the edge EXISTED and ran BACKWARDS; the naming was in a scope-boundary section gate 4 does not read.
- This one — the edge exists, points the right direction, and names the wrong card, behind a written disposition asserting it was checked.
All three are the same family: a split or a re-scope leaves an edge that every mechanical tier reads as fine. The lesson An advisory a card ACKNOWLEDGES as real and declines to act on is not discharged was reinforce_lesson'd against this occurrence (global scope, recurrence 3).
What the run already fixed on MOTIR-4252
link_work_itemsblocked_byMOTIR-4254 — linkcmtlckx5d003hhwphupllpcim.link_work_itemsblocked_byMOTIR-4248 — linkcmtlcnp7s002shvn8oyt45d32; a third in-flight card that settles the top bar's avatar box at--height-controlsquare, 40px under3d-immersive, againsttop-bar.mock.html's stale fixed 36px. Flagged on the card as a judgement call.update_work_item— § Sequencing rewritten with the measurements above, criterion 5 corrected to four rows and to MOTIR-4254, thesubsumptiondisposition corrected, § Resolution stating the hold.transition_status→ Blocked.
Acceptance criteria
motir-metaprompts/run.mdguard #4's read the card's own advisory dispositions block states that a disposition claiming an advisory was ACTED on is undischarged until the act is verified, and that for ablocked_byremedy the verification is that the edge's target key equals the key the advisory carries.motir-metaprompts/plan-rules/core.mdgate 21 carries the authoring half: a disposition whose remedy is an edge names the advisory's own key, or it is not a disposition.- Both edits ADD rather than re-word (
plan-rules/core.md's additions-not-rewordings convention), and each cites MOTIR-4252 as its fixture with the#2554vs#2551measurement. - No change to
validate_work_item— the detector reported this correctly and needs nothing. This card is a corpus change only.
Context refs
- MOTIR-4252 — the card, its two run comments, and the amended § Sequencing / criterion 5.
- MOTIR-4238 (PR #2551) · MOTIR-4248 (PR #2544) · MOTIR-4254 (PR #2554) — the three in-flight design cards.
motir-meta/prompts/run.mdguard #4 ·motir-meta/prompts/plan-rules/core.mdgate 21 ·plan-rules/type-design.md's sweep-the-referrers corollary.
Resolution
Open.