Register guard — the corpus's cautionary count may not rise
The brake. Every rule in the corpus arrived because someone was right about something, which is exactly why nothing has ever left and why the shipped constant grew 22% in four days with one commit in fifteen making it smaller. A ratchet pointing the other way is what keeps this epic from being undone paragraph by paragraph.
Add a guard over SHARED_PLANNING_RULES that counts cautionary register (the tell, the trap, fixture, missed, failed, reads as, was wrong) and asserts the count does not exceed a committed ceiling, in the same shape as the conservation baseline: a checked-in number, a refresh script, and a review of the diff when it moves. The ceiling is set from whatever the restated corpus measures at, not from an aspiration.
State the counter's limits in its own comment, because a heuristic presented as a measurement is the mistake this epic is correcting one level down: it counts a lexical register, it will miss a cautionary paragraph written in neutral words, and it will fire on a rule that legitimately quotes a phrase from the list. It is a ratchet, not a classifier — its value is that the number cannot silently go up, not that every hit is a defect.
Give it an explicit escape: a raise is allowed, and it costs a refresh plus a sentence in the PR saying what was added and why it belongs in the always-injected tier rather than the store.
Acceptance criteria
- A guard asserts the cautionary-register count of
SHARED_PLANNING_RULESis at or below a committed ceiling. - The ceiling lives in a checked-in fixture with a refresh script, following the conservation baseline's shape.
- Appending a cautionary paragraph turns the guard red — demonstrated once against a scratch addition, with the failure output in the PR body.
- The counter's comment states what it cannot see and that a raise is legitimate when justified.
- The suite runs in CI with the other planning-rule suites.
Context refs
motir-aitests/planningRuleConservation.test.ts+tests/fixtures/sharedPlanningRules.baseline.txt— the committed-baseline-plus-refresh-script shape to copy.motir-aiscripts/refresh-planning-rules-baseline.ts— the refresh pattern, including its doc comment on refreshing without reading.motir-aisrc/llm/planningRulePacks.ts— the constant under measurement.- MOTIR-3310 — the restated corpus this ceiling is measured from.