This is step 5 of the REPLAN ACTION that motir run 3571 ran on MOTIR-3571. It records the defect and the one decision the replan did not settle.
Outcome of the replan: the corrected MOTIR-3571 was approved, built and shipped as motir-ai#309 — one global lesson row plus its generated data migration. So the takeaway this card is about is now IN the corpus, and what remains here is only the MOTIR-3570 gate pass below.
While running MOTIR-3463, two bugs were filed as asides in the flow of that run — MOTIR-3570 and MOTIR-3571. Neither invoked log-bug.md, and neither loaded the rule packs plan-rules/MANIFEST.md routes to a bug-filing pass. Both carried strong evidence and failed ordinary authoring gates.
MOTIR-3571's defects, as found when it was later picked up as a run target:
| gate | defect |
|---|---|
| core #1 — repo pinned | targetRepo: null, targetRepos: [], while its criteria named paths in TWO repositories |
| core #16 — both content axes | explanationMd: null |
phase-deepen gate 14 — ACTOR | a criterion asking that MOTIR-3463 carry a comment — another card's work |
phase-deepen — the asserted-ABSENCE limb | the remedy asserted a corpus gap that is not there |
MOTIR-3571's remedy was "add this rule to plan-rules.md and its mirror." Verified on origin/main of both homes AFTER the card was filed:
plan-rules/phase-deepen.md step 2 already carries it — "Readable in a running system ⇒ QUERY that system, and put the output on the card" / "Readable nowhere ⇒ the premise is a HYPOTHESIS (the UNVERIFIABLE verdict), and the card's grammar says so."plan-rules/phase-deepen.md gate 14 — "AUDIT EVERY WORLD-STATE CRITERION FOR A SECOND ACTOR."motir-ai/src/llm/planningRulePacks.ts:132 AC_SATISFIABLE_INSIDE_THE_BOUNDARY — the mirror, same text.And the pack carries the rule that forbids exactly this mistake:
⚠️ A card whose deliverable is an EDIT asserts the text is not there (the asserted-ABSENCE limb) — "GREP the target and QUOTE the result before asserting the gap … When the target is MIRRORED —
plan-rules/⟷SHARED_PLANNING_RULES— grep BOTH homes, and by a TEXT probe over the constant rather than a pack-name lookup."
There is no corpus gap and no routing gap. plan-rules/MANIFEST.md:42 routes motir log-bug to core.md + phase-deepen.md + kind-leaf.md + kind-leaf-deepen.md + kind-bug.md + …. The rule existed, was routed to precisely this act, and was not read — because filing was treated as a note rather than as authoring a card.
So the remedy here is NOT another rule. Adding a fourth restatement would give the corpus one more place to drift and would teach nobody; the corpus's own convention (_shared.md) is that one occurrence is a LESSON and only a recurrence earns a rule. The takeaway is recorded as tenant lesson cmta2kil70000i3sksmvw0lk3, "File a bug through the bug-filing protocol, even when the defect surfaced mid-conversation."
MOTIR-3570 was filed the same way and has not been run through the gates. Its EVIDENCE is sound — the failing step, the log excerpt and the machine-creation timestamps were all read at rung 2, and its stated fix was verified against .github/workflows/ci.yml — but nobody has checked its acceptance criteria for the ACTOR / SURFACE / ORDERING axes, nor confirmed its repo pin is right. Someone should give it one gate pass before it is claimed. Not done here, deliberately: a run corrects the card it is running, and re-scoping a second card on the way past is the scope creep this protocol exists to prevent.
plan-rules/core.md's per-card gate checklist run over it — gates 1, 14 and 16 at minimum — and either passes or is re-planned.motir-meta/prompts/log-bug.md — the protocol neither filing invokedmotir-meta/prompts/plan-rules/MANIFEST.md:42 — the routing that was already correctmotir-meta/prompts/plan-rules/phase-deepen.md — the asserted-ABSENCE limb and gate 14cmta2ixdy0026i3ph46lyyu04 — the re-plan of MOTIR-3571, approved and shipped as motir-ai#309