(motir-meta) W5 — the dedup limb: a taker inherits the loser's BLOCKERS, not only its scope (`op-replan.md`)
Repo: motir-meta. One PR. Type: content · Executor: coding_agent. Filed 2026-08-17 by the close-out of MOTIR-2897, whose stated deliverable was settling the promote question it left open. The mirror half is the motir-ai card that is blocked_by this one.
This is a WIDENING of an existing paragraph's trigger — no new gate is added.
The gap, stated as an arrow
plan-rules/op-replan.md's limb (2) SCOPE IS NOT STATIC carries the governing sentence "No two cards may own the same write — a second writer of the same field / endpoint / deliverable is a duplicate source of truth", and every remedy under it is about scope: "TRIM the earlier card's overlapping ACs", "re-scope the earlier card to drop the overlap and cite the new owner". Its one edge instruction concerns the relationship between the two writers ("relates_to for parallel disjoint writers; blocked_by only when one truly CONSUMES the other's output"), not the edges either of them already carried.
core.md gate 8 is edge-aware, in exactly two directions, and both point the same way:
| limb | the arrow it moves |
|---|---|
"when a feature MIGRATED to a new owner card, every covering test card's blocked_by re-pointed to that owner" | a referrer's edge → the taker |
"archive the superseded card and unlink every consumer's blocked_by edge pointing to it" | a consumer's edge → deleted |
Four possible arrows, three named, one missing: the donor's OWN blocked_by — its upstream prerequisites — moving onto the taker. And it is missing for a structural reason, not by oversight: gate 8 is "Referrers swept", and a card's own blockers are not referrers. No literal reading of a referrer sweep reaches them. plan-rules/ and the mirror both return 0 for every stem of the missing remedy (shared noun, proper noun, carry the edge, diff the two, upstream blocker, its own blocked_by, every blocked_by).
The widening (the text to land)
AND THE TAKER INHERITS THE DONOR'S BLOCKERS, NOT ONLY ITS SCOPE. Whenever ownership of one write MOVES between cards — a dedup that picks a survivor, an absorption, a carve-out into a new owner — the taker's
blocked_byset is the UNION of both cards' sets. Diff them before applying the choice. A blocker present on exactly one side is the interesting case, and it is interesting in BOTH directions: the loser's extra edge is usually a prerequisite the survivor was never told about; the survivor's extra edge is usually one the loser was missing. Neither card is authoritative alone — they were authored by different passes, and whatever gated the half being dropped was gating the WORK, which is not being dropped. The lexical tell: a card offering N dispositions for one write whose options differ only in WHICH card keeps the scope. Options symmetric in scope are almost always asymmetric in edges, and that asymmetry is precisely what the choice discards. This fires at BOTH moments — when the disposition card is AUTHORED, and again in the run that APPLIES it.
Warrant line, in COMPRESSION.md § Decision 1's printed two-line form:
Warrant: MOTIR-2582 · 2026-08-10 · a dedup card offered two owners for one write and neither option carried the ADR one of them was gated by · ×1 → [fixtures/op-replan.md#taker-inherits-the-donors-blockers]
Why ×1 is enough — the rule RAN, was NAMED, and stopped short
The standing discriminator (MOTIR-2280) refuses a widening when the governing clause covers the case and merely was not performed. The ORDER test alone would have refused this one: gate 8's absorbed-prerequisite clause landed 2a72b91 2026-07-26, the taker's-seat clause and op-replan limb (2) landed fcddcbd 2026-08-01, and MOTIR-2582 was authored 2026-08-10T11:22:49Z — 9 to 15 days later, same planner. That reads as diligence.
It is not, and the defective card says so in its own words. MOTIR-2582's description reads:
"Two cards own the same write, which is exactly what the sweep-the-referrers gate forbids"
It cited the gate by name, applied it correctly to DETECT the collision, discharged its scope half — and then wrote two dispositions, neither of which carried MOTIR-729, the keystone ADR that MOTIR-730 was blocked_by and MOTIR-1167 was not. A rule that was read, named, applied, and under-delivered is a TRIGGER gap, not a diligence miss — the same totality-vs-diligence discriminator MOTIR-2878's W3 turns on, one arrow over.
Deliberately NOT in this PR
core.mdgate 8's index line. A one-sub-bullet addendum inside gate 8's existing enumeration is the natural EXECUTABLE-INDEX entry (the MOTIR-1886 argument), and it is criterion 4 below, marked droppable, becausecore.mdis the file every pass loads and already has two live claimants — MOTIR-2692 (RUNG 1 + GATE 1) and MOTIR-2700 (repo cardinality at the container level). If the runner judges a fourthcore.mdPR the worse trade, drop criterion 4 and say so in the PR body; the limb still lands where the rule's remedy is stated at length.- The other half of
notes.html#284 — "a duplicate does not produce exactly one collision; sweep both bodies for every OTHER shared noun". Resolved LESSON, not promoted: gate 8's sweep-run-at-the-wrong-GRAIN limb already carries the governing sentence — "one file, one caller, one card — reads as complete", warrant MOTIR-2500 · ×7 — so the general clause covers it and only its path-shaped remedy falls short. That is MOTIR-2280's diligence case exactly. Do not fold it in. - Why this is a fresh card and not a fifth clause on MOTIR-2878. The fold rule exists to stop two cards editing one file.
op-replan.mdandfixtures/op-replan.mdare touched by none of W1–W4 (which land inrun.md,phase-skeleton.md, andkind-container.md/kind-story.md), so there is no collision to prevent. MOTIR-2878 is also already atestimateMinutes: 60— the estimation gate's agent-run ceiling, and motir-meta has no CI, so that 60 is all agent time. Appending scope to a sealed, sized card is the MOTIR-2147 shape a sibling record card was filed about.
Acceptance criteria
- BEFORE any other edit,
git show origin/main:prompts/plan-rules/op-replan.mdand confirm limb (2) still ends on therelates_to/blocked_bysentence quoted above; if it has already gained an edge-inheritance limb, the card closes as verified-no-change and says so. prompts/plan-rules/op-replan.mdlimb (2) carries the widening as an extension of that paragraph, not as a new numbered limb (3), with its lexical tell and its both-moments clause — landing AFTER criterion 1's read and BEFORE the fixture is written.prompts/plan-rules/fixtures/op-replan.mdgains a#taker-inherits-the-donors-blockerssection under a new##heading, in the file's existing numbered-fixture form, quoting MOTIR-2582's two dispositions and the MOTIR-730-yes / MOTIR-1167-no edge table — written AFTER the limb text, so the anchor it is referenced by already exists.- DROPPABLE.
prompts/plan-rules/core.mdgate 8 gains ONE sub-bullet naming the fourth arrow, cross-referring the limb rather than restating it. If dropped, the PR body names MOTIR-2692 and MOTIR-2700 as the reason and states that the index line is then owed by whichever of them lands last. python3 prompts/plan-rules/COMPRESSION.conserve.pyis run and its verdict quoted in the PR body. ⚠️ Expect[FAIL]onop-replan.md— MOTIR-2773, the checker has no verdict for added. Quote the INSERT list and say so; do not "fix" the checker here.- The PR body states the family count as ONE, quotes MOTIR-2582's "exactly what the sweep-the-referrers gate forbids" sentence as the promote ground, and states that the
notes.html#284 second half was resolved LESSON with MOTIR-2500's ×7 warrant as the reason — so no reader re-derives an inflated family. - The mirror card carries the same clause into
motir-ai; this PR merges FIRST and the PR body says so (the mirror isblocked_bythis card).
Context refs
prompts/plan-rules/op-replan.mdlimb (2) SCOPE IS NOT STATIC — the edit site.prompts/plan-rules/core.mdgate 8 Referrers swept — the two arrows that ARE named, and the wrong-GRAIN limb (warrant MOTIR-2500 ×7) that disposes of #284's second half. Read, not edited (see criterion 4).motir-ai/src/llm/planningRulePacks.ts— the mirror home. ⚠️SHARED_PLANNING_RULESmoved here fromtreeGeneration.ts;COMPRESSION.mdrecords the move with the old path struck through. A grep oftreeGeneration.tsreturns 0 for the whole sweep family and is a false negative.- MOTIR-2897 — the record card whose close-out settled this; MOTIR-2582 — the fixture;
notes.html#284 (motir-meta PR #198, merged 2026-08-17T12:07:33Z) — the lesson. - MOTIR-2878 / MOTIR-2879 — the sibling widenings pair; disjoint file sets, no merge order required between the two pairs.