First of three re-cut subtasks. Establishes what stays in core and the phase packs — the rules whose situation occurs on every card regardless of kind or type — and performs the connective rewrites MOTIR-3892 enumerates, so the two later cuts move self-standing limbs.
Doing the rewrites HERE rather than spread across the three cuts is deliberate: they are the only prose edits in the whole story, and they belong in one reviewable diff.
Of VERIFY_EVERY_PRECONDITION's 48,703 chars, roughly 9,550 in the head plus the numbered limbs (1)–(8) are genuinely kind- and type-agnostic: the verdict ladder, blocked_by vs relates_to, the already-linked key, prerequisite-beside-not-under, the cross-repo producer, cardinality-as-a-smuggled-assumption, and the whole measurement family — population against a ref, carry the search not the verdict, a second vocabulary, a sweep is not its pattern, a quote owes its ref, a sibling measurement. A count is a count whatever the card's type.
replace ops by construction, which is the case the deliberate-refresh path exists for.SHARED_PLANNING_RULES composed from the new segments is measured against the old, and any difference beyond the named rewrites is a defect, not a rounding.motir-ai src/llm/planningRulePacks.ts — VERIFY_EVERY_PRECONDITION and the phase-deepen / core segments.motir-ai tests/planningRuleConservation.test.ts — the classifier and the refresh path.motir-ai tests/planningRuleRegister.test.ts — the ratchet.