The second home of the rule MOTIR-3175 lands in motir-meta. A standing planning RULE has two homes — the manual planner's packs and SHARED_PLANNING_RULES, the constant the SHIPPED planner is always given — and a rule in one home teaches one planner. This work item carries the wording across. One repo, one PR.
motir-ai/src/llm/planningRulePacks.ts on origin/main @ 21ae185: 159 898 bytes, 523 lines, 33 rule constants. The deferral family is present and healthy — it lives inside DEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE, located by bisecting the deferral hits (offsets 22 856–27 267) against the `const NAME = `` declaration offsets, not by guessing from the family's name (the pointer in the corpus for the sweep family is wrong in exactly that way, and a wrong constant in the right file reads as a real absence).
Substring counts over the whole constant, so a zero stands against a populated baseline:
| probe | count |
|---|---|
deferral | 15 |
A DEFERRAL IS A CARD | 1 |
its own card | 5 |
stays for now | 1 |
whoever picks this up | 1 |
design asset | 8 |
code comment | 0 |
placeholder | 1 (and not in this family) |
And the surface list is quoted verbatim from the constant: "read them in a card body, in a decision document's section, and in any boundary / 'what this does NOT change' / 'out of scope' block" — a design asset is not among them, exactly as in core.md. The gap is the same gap in both homes.
design-notes.md, and a source comment shipped beside the placeholder it describes) into the existing trigger sentence inside DEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE — the constant already has the §-level "when the DEFERRING ARTIFACT IS A DOCUMENT" limb, and this is one clause on the same limb, not a new paragraph.RECONCILE_EXISTING_NOT_DONE_WORK / op-replan and VERIFY_EVERY_PRECONDITION / phase-deepen); bisect the hit's offset against the declaration list and put the clause in the constant that actually carries the neighbouring text.MOTIR- keys, no dates, no notes.html citations — and the guards enforce it. Repo-name genericity is tests/planningRulePacks.test.ts § GENERICITY, per pack; the source-citation ban is tests/treeGeneration.test.ts:615 (plus the per-rule case at :463, which also bans open-core and MOTIR-\d). They are different files — do not cite one for the other.DEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE, in the constant's own register (imperative, generic, no warrant).tests/planningRulePacks.test.ts and tests/treeGeneration.test.ts.SHARED_PLANNING_RULES, PLANNING_RULE_PACKS, resolvePlanningRulePacks and legalPlanningRuleCells all build, and the pack tags in CORPUS_ORDER are unchanged.21ae185) and the after, because the constant is injected into every plan the product generates and its growth is a cost.motir-ai.motir-ai/src/llm/planningRulePacks.ts — the mirror; DEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE is the deferral family's constant.motir-ai/src/llm/treeGeneration.ts — re-exports only; the definition moved. A citation of the old path still resolves, which is how a false absence gets manufactured.motir-ai/tests/planningRulePacks.test.ts · motir-ai/tests/treeGeneration.test.ts — the two guard suites, in that order for genericity and source-citations.blocked_by); write nothing here that re-derives its intent.grep finds nothing in treeGeneration.ts (very long lines) — search it with python/node.