MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-3187

Planning bug: the two-homes obligation is stated only in `CORPUS-MAINTENANCE.md`, which no planning pass loads — six occurrences, five sibling cards, no gate

Done
Description

Repo: motir-meta (stated here rather than pinned — the project's pin domain currently refuses every connected repo; see MOTIR-3078 / MOTIR-3086).

A standing planning RULE has two homes — prompts/plan-rules/ and SHARED_PLANNING_RULES in motir-ai — so a card whose deliverable is a rule change is TWO cards. This has now been missed six times, each caught at run time and closed by filing the sibling card afterwards: MOTIR-1773 → 1774, MOTIR-2083 → 2089, MOTIR-2504 → 2507, MOTIR-2509 → 2510, MOTIR-2432 → 2511, and now MOTIR-3076MOTIR-3186. Five sibling cards, and the shape of the card that produces them has not changed.

Why it keeps happening — measured, not inferred

The obligation is stated as a standing rule in exactly one file, and that file is loaded by nothing. plan-rules/CORPUS-MAINTENANCE.md carries it (§ THE TWO HOMES, split deliberately), and MANIFEST.md's own routing table says of that file: "never — no planning pass loads this file." _shared.md says the same. Everywhere in the LOADED packs the two-homes obligation survives only as a parenthetical inside a rule about something else — kind-leaf-deepen.md:355 ("a rule has two homes; this one alone fires too early to…") and kind-leaf.md:52 (gate 1's bare-symbol tell). Neither is a check an author runs.

And gate 1 is pointed the other way. It fires when a criterion NAMES a second repo's file or symbol — the STRADDLE — and splits the card. The omission names nothing at all, so there is no string to catch: a card citing only plan-rules/ and notes.html reads as cleanly single-repo, which is exactly what a correctly sealed one-repo card looks like. The loud case has a gate and the silent one does not.

The AC-shape tell already exists and is cheapany card whose criteria list a plan-rules/ pack and notes.html is one home short — it is simply not written anywhere a card author reads. It is also necessary and not sufficient: MOTIR-2432's criteria named plan-rules.md alone and still slipped, so the positional half is owed too (after editing a pack, ask of each hunk whether it sits in a region the mirror carries — read the constant, do not infer from the subsection's topic).

Acceptance criteria

  1. plan-rules/core.md's per-card gate checklist carries the two-homes gate: a card whose DELIVERABLE is a change to the planning corpus owes a card per home — the pack, and the shipped planner's constant — with the AC-shape tell stated as a check an author runs on the criteria they just wrote, and the positional half for a card that names only the pack.
  2. The gate names the discriminator that decides a NARROWING rather than an omission: mirror the clauses whose trigger the shipped planner can observe, and where a clause is excluded, say so ON THE CARD with the grep that excluded it — silence is not an exclusion.
  3. The gate cites its own recurrence count, and says the remedy is a SIBLING CARD AT AUTHORING TIME, not a sibling card filed by the run that discovers the gap.
  4. CORPUS-MAINTENANCE.md keeps the long form and gains a pointer to the gate, so the two do not drift into two rules; the gate is the check, that file is the record.
  5. The gate destination index at the end of core.md carries the new number (numbers are append-only).
  6. notes.html #338 is referenced, not restated.

Explicitly NOT in scope — and why it is not a two-homes miss

This rule owes no SHARED_PLANNING_RULES mirror, and that is a reading of the repo rather than a judgement: probes on motir-ai@origin/main (e06af92) return two homes 0 · second home 0 · both homes 0 · shipped planner 0. The mirror carries no concept of its own second home and should not — it plans a CUSTOMER's project, where "this corpus and the constant" names nothing. Same carve-out CORPUS-MAINTENANCE.md § THE THIRD TIER already makes for corpus maintenance; unlike MOTIR-2432, the carve-out is being applied to the paragraph it actually covers.

Context refs

  • motir-meta/prompts/plan-rules/CORPUS-MAINTENANCE.md § THE TWO HOMES, split deliberately — the long form, and the file nothing loads.
  • motir-meta/prompts/plan-rules/MANIFEST.md — the routing table that says so (CORPUS-MAINTENANCE.md · never).
  • motir-meta/prompts/plan-rules/core.md — the gate checklist, and gate 1's straddle tell.
  • motir-meta/notes.html #338 — the lesson; #196 / #216 / #242 / #243 / #246 / #256 — the prior recordings of the same omission.
  • MOTIR-3076 — the sixth occurrence, found while running it.