Repo: motir-meta. ONE PR. The motir-ai mirror is its own card (blocked_by this one) — plan-rules/*.md ⟷ SHARED_PLANNING_RULES is a pinned mirror, so this is a boundary-contract pair, not a straddle.
W7 in the trigger-widening series (W1–W4b: MOTIR-2878 · W5: MOTIR-2913 · W6: MOTIR-2929). It is filed separately rather than folded into MOTIR-2878 for the two mechanical reasons the fold rule actually turns on: no file-set overlap — 2878's clauses land in run.md / phase-skeleton.md / kind-container.md and W6's in kind-leaf-deepen.md, while this one touches only phase-deepen.md, so folding prevents no collision — and 2878 already sits at estimateMinutes: 60, the estimation gate's agent-run ceiling.
plan-rules/phase-deepen.md step 1 ("Name them") enumerates SEVEN precondition kinds, and the seventh is already a behaviour, not a thing:
"and — for any card that DEPICTS or DRIVES a flow — the BEHAVIOUR / WORKFLOW it depends on (which subtask(s) SPECIFY the step set, sequence, optional-vs-mandatory split, the asks and who decides, blocking vs non-blocking, gating/skip rules)"
So the incident behind this card (notes.html #301, MOTIR-2944) is not a category nobody thought of. It is a discharge mismatch inside a limb that was loaded: the parenthetical defines the thing to go and find as a sibling CARD that specifies the flow — a plan artifact — so the discharge you perform is read the relates_to spec. There is no relates_to spec for a lifecycle the SHIPPED CODE owns, and step 2's "grep the code" reads as already-satisfied because step 1 has told you the artifact is a card.
MOTIR-2787 fell exactly in that hole. Every NOUN it named was checked and real (MAX_SCOPE_TARGETS, @@unique([projectId, scopeKey]), the dormant planning status, its transitions, with the git grep recorded). Two of its acceptance criteria were nonetheless about a system that does not exist — "release on close, submit, cancel, abandon, and job failure" names three operations the product does not ship and one (submit) whose release would have defeated the lock it was designing, and "the epic→story hand-off" has no single actor to perform it, because a session's identity IS its scope.
And the failure mode is the reason it needs its own clause rather than a broader reading of the existing one: a missing NOUN blocks you — you go looking for the route, it is not there, the guard fires. A missing VERB does not block anything. There is always some moment you can hang a release on, so the card ships, green, against tests written from its own words.
prompts/plan-rules/phase-deepen.mdWiden step 1's BEHAVIOUR / WORKFLOW item so it names both discharges and says which one applies when:
relates_to subtask that SPECIFIES it and ground the card in it.releaseForSession; cancel → declinePlan; abandon → the lease sweep" — so the next reader inherits the check instead of repeating it. A verb with no answer is a missing precondition wearing the clothes of a design decision.Keep it terse and in RULE register — situation → action. The incident belongs in notes.html, where it already is; this clause must read without it.
prompts/plan-rules/phase-deepen.md's step 1 BEHAVIOUR / WORKFLOW item carries the shipped-code limb: each lifecycle VERB is a precondition, discharged by naming the operation that performs it and the row it writes, with the mapping written onto the card.> **Warrant:** line in the file's own format naming MOTIR-2787 · 2026-08-12 · the fixture · ×1, plus its → [fixtures/phase-deepen.md#…] pointer, matching the surrounding entries exactly.core.md, kind-leaf-deepen.md, run.md, phase-skeleton.md, kind-container.md are untouched, so this PR cannot collide with MOTIR-2878, MOTIR-2913, MOTIR-2929, MOTIR-2692 or MOTIR-2700.prompts/ is pinned on a clean origin/main worktree before the edit and quoted on both sides in the PR body, so a derived cap cannot read a 1-line overage as a regression.prompts/plan-rules/phase-deepen.md — step 1's seven-item enumeration; the item to widen is the seventh. Landed 5613440, 2026-06-19.prompts/plan-rules/MANIFEST.md — phase-deepen.md's loaded when row; the widening must not change what routes the pack.notes.html #301 — the incident, and its 2026-08-17 correction block, which is where this card's ground is stated.MOTIR-2944 — the planning bug this discharges. MOTIR-2878 / MOTIR-2913 / MOTIR-2929 — the sibling widenings, for the file-set argument above.Folded 2026-08-19 from MOTIR-3071's close-out. Same file, same mirror pair, different region — so it lands here rather than as a twelfth W-card, per the fold rule's file-set test. Independently droppable: if you disagree, drop this section and ACs 8–11 and ship W7 alone; nothing in W7 depends on it.
phase-deepen.md's PROSPECTIVE limb enumerates the claims that are readable today and get written without being read: A COUNTED SET and A NAMED TEST HOME. A counted set's discharge is "re-run the enumerating search yourself and RECORD the search next to the number" — and its output is a number.
The enumeration stops there. A sentence that says what a population CONTAINS — "dominated by X", "mostly Y", "largely legacy call sites", "half the work is Z" — is a second, different measurement, and no limb names it.
The fixture is MOTIR-3014, and its shape is the reason this is a widening rather than a diligence lesson: the COUNT limb was loaded, performed, and correct. Its author measured the declined population ("277 findings across 51 files"), recorded the reproduction command on the card, and the numbers re-derive exactly today. In the same sentence it wrote "dominated by the board chrome a mock is PRESENTED on rather than the surface it specifies" — never measured. Classified by the class carrying the ink, the 277 are drill 29 · tbtn 28 · chev+lane-chevron 39 · mnum 14 · meta 9 · icon-btn 8 — the product surface — and the named "clearest fixture", .foldNote, is 5. The chrome classes total 17 (6.1%). The claim then propagated to MOTIR-3054's explanationMd as "half the work would be restyling annotations", one step further from the truth, and had that card been answered YES-EXEMPT on its own framing the exemption would have silenced the guard over the product surface it exists to protect.
This is a rule defeated by another rule's SUCCESS — the discharged count is exactly what lends the undischarged half its credibility, and nothing in the sentence marks the join. The falsifying data was already in hand: the scanner records file / line / element / surface / via per finding, so the histogram was two lines from the comment that made the claim.
A COUNTED SETdominated by · mostly · largely · chiefly · half of · these are all just sitting next to a number the tool produced.prompts/plan-rules/phase-deepen.md's PROSPECTIVE limb carries a third bullet, A CHARACTERISED SET, in the same shape as A COUNTED SET and A NAMED TEST HOME: trigger phrases, then a named discharge (group by the carrier, record the top rows, or write "not classified").dominated by / mostly / largely / half of adjacent to a measured number) and the exemption corollary (a marker is inherited, so an exemption granted on a mis-read composition fails silently).> **Warrant:** line in the file's own format naming MOTIR-3014 · 2026-08-19 · a declined boundary warranted by an unmeasured composition, whose named fixture was 5 of 277 · ×1, plus its → [fixtures/phase-deepen.md#…] pointer, matching the surrounding entries exactly. RULE register, verified by reading it cold — the bullet must not need the fixture to make sense.| clause | from | region of phase-deepen.md | ACs |
|---|---|---|---|
| W7 | MOTIR-2944 / notes.html #301 | step 1's seventh item (BEHAVIOUR / WORKFLOW) | 1–5 |
| W7b | MOTIR-3071 / notes.html #317 | the PROSPECTIVE limb's claim enumeration | 8–11 |
ACs 6 and 7 are shared and unchanged: no other pack is edited, and the corpus-size guard is pinned on both sides.