MOTIR-3218 was filed at 2026-08-20T10:33:01Z against tests/design-assets-uploader.test.ts.
motir-core#2200 (MOTIR-3213) had been OPEN since 2026-08-20T09:45:45Z — 48 minutes earlier — touching that exact file, naming the same cause in its own body ("the default resolver runs REAL git in process.cwd()") and shipping the same remedy the new card would go on to prescribe (inject resolveBase into every main() call). It merged at 11:09:05Z.
So the card's entire deliverable had landed 36 minutes after it was written, and motir run MOTIR-3218 at 13:41 found nothing to build. The defect MOTIR-3218 described was real and reproduced byte-for-byte at its own base — the duplication is the defect here, not the diagnosis.
validate_work_item already computes this class. The subsumption advisory is what stopped the run at dispatch:
{ "kind": "subsumption", "severity": "likely-already-shipped",
"path": "tests/design-assets-uploader.test.ts",
"pullRequest": "moooon-B-V/motir-core#2200",
"mergedAt": "2026-08-20T11:09:05.000Z" }
It keys off mergedAt. At 10:33 that pull request had no mergedAt, so the advisory had nothing to return. The check existed, was correct, and was structurally blind for precisely the 84-minute window in which the duplicate was filed — and it only spoke up hours later, to the session that had already claimed the card.
The prose half is blind for a different reason: log-bug.md's pre-file step looks for an existing CARD. MOTIR-3213's card did exist, but nothing in the protocol maps the file my finding names → is anybody changing that file right now.
Per notes.html #219: when a shipped check already runs, the corpus's job is to make the runner READ it, never to restate it in prose. This check is one predicate away from covering the case. Widen it rather than writing a rule beside it.
A merged hit and an open hit take opposite dispositions, so they must be distinguishable rather than collapsed into one severity:
motir-core) The subsumption advisory's pull-request lookup returns OPEN pull requests touching the card's paths, in addition to the merged ones it returns today.motir-core) An open-PR entry is distinguishable from a merged one in the returned payload — a state field, with a null mergedAt for the open case — so one call separates the two dispositions above without a second API round-trip.motir-core) Vitest covers both arms at the service seam: a merged pull request touching the path (existing behaviour, asserted unchanged) and an open one (new), including that the two carry different state.motir-core) docs/mcp.md's validate_work_item advisory contract documents the widened subsumption family and both dispositions, so the tool description a caller reads matches what it returns.The filing-time call — having log-bug.md run validate_work_item (or a path lookup) before it writes a bug card — is the prose limb that consumes this one. It is deliberately left out: it is a motir-meta change and this card is pinned to motir-core (ONE SUBTASK = ONE REPO = ONE PR). Once criterion 1 lands there is something for the protocol to call; today there is not.
⚙️ AMENDED 2026-08-28 — that limb is now MOTIR-3718, and it took seven days and one duplicate to acquire a key.
The paragraph above is right in every part except the one that matters. It named the consuming half precisely, gave the correct reason (one subtask, one repo), and stated its own release condition — "once criterion 1 lands there is something for the protocol to call" — and it named no card, which
plan-rules/core.md's a deferral is a card forbids. Criterion 1 landed with this card. Nothing was ever filed, and nothing re-read the sentence: criterion 1 landing is an event on THIS card, and no mechanism walks back from that event to a paragraph in a body that was waiting on it.search_work_itemsforlog-bugreturned 36 items and none of them was this limb.What it cost, measured. MOTIR-3713 was filed
2026-08-27T15:35:23Zfor MOTIR-1135's re-consent regression onmain. MOTIR-3715 was filed17:16:29Z— 1 h 41 m later, by a second session, for the identical defect: same root cause, samesettleOnHometimeout, same two candidate remedies, no cross-reference either way. Not the hard case this card was about — an open pull request invisible for 84 minutes — but the easy one: an existing CARD, findable by a one-line text search, that nothing in the protocol asked for. Its twin had existed for 101 minutes and its title carried the same subject nearly word for word.MOTIR-3718 adds that read to
log-bug.md's pre-file step — project-wide, never scoped to the parent, because both sessions applied the parenting rule correctly and landed under different parents, which is precisely what puts a duplicate outside its twin's sibling set. It ships in motir-meta#331. Widening the advisory further, to a sibling atimplementedon an unpushed branch, remains this card's own un-reopened note.Recorded here rather than only on the new card, because the reader who meets this paragraph is the one who needs to know the limb exists — and a deferral that states its release condition and no key reads as scheduled, which is what let it survive.
Advisory disposition (2026-08-20, at filing).
validate_work_itemreturned oneshape/likely-ordering-violationentry on criterion 2, matching the phrase "onmain". It was a phrase-match false positive — the words sat inside a description of what a READER can tell, not in a criterion reading post-merge state — and criterion 2 has been reworded to drop the phrase rather than left for the next dispatch to re-adjudicate. Noreferenceadvisory was returned: this card consumes nothing from MOTIR-3218 (which isdoneand shipped no substrate), so the edge between them isrelates_toprovenance, notblocked_by.