Repo: motir-ai. One PR. The SHIPPED half of MOTIR-2083 — lift its two rules into the planner the product actually runs.
A standing planning RULE has two homes, and a card naming only one is under-scoped:
motir-meta/prompts/plan-rules.md — the MANUAL planner.SHARED_PLANNING_RULES in src/llm/treeGeneration.ts — the SHIPPED planner. Its own comment calls it "the encoding of plan-rules.md", and it is composed by both fresh tree generation and re-planning (src/jobs/handlers/replan.ts imports it). A rule missing there is missing from every plan the product generates.Landing MOTIR-2083 alone would teach the manual planner while the product keeps planning the old way — the opposite of dogfooding. Precedent: MOTIR-1773 → MOTIR-1774, the same split for the Story-level journey audit.
Lift the wording from MOTIR-2083 — it is written to be liftable without re-deriving intent. Condense for prompt budget, but do not drop either rule's operative TELL:
blocked_by-wired to the card it holds up, in that story's sprint — regardless of where the defect conceptually lives or which story owns the surface. If the fix needs a design first, that design card goes in the same story too. The trap: letting the design's location choose the bug's parent.SHARED_PLANNING_RULES carries both rules, in the constant's existing voice and numbering convention — not appended as a foreign block.replan.ts imports the same constant, and a rule that reaches only one path is half-landed.MOTIR-<id> (motir-ai is a code repo — the status-sync rule).treeGeneration.tsgrep silently finds nothing in this file — it has very long lines. Search with python or node instead, or you will conclude the constant does not exist. See [[motir-ai-grep-long-lines-gotcha]].
src/llm/treeGeneration.ts — SHARED_PLANNING_RULES, the constant edited.src/jobs/handlers/replan.ts — the second consumer; the reason the test must cover both paths.motir-meta/prompts/_shared.md — the plan-rules.md ⟷ SHARED_PLANNING_RULES pairing this card honours.