The five type-* packs restated — and type-bars / type-code confirmed already at register, measured not assumed
All five type-* packs in one card, because they are the whole type axis and only two of them need real work. Measured with REGISTER.count.py at origin/main a9caaa1:
| pack | lines | cautionary | prescriptive | ratio |
|---|---|---|---|---|
type-test.md | 104 | 10 | 4 | 2.5x |
type-migration.md | 90 | 7 | 0 | ∞ |
type-design.md | 114 | 4 | 0 | ∞ |
type-bars.md | 68 | 0 | 0 | — |
type-code.md | 59 | 0 | 0 | — |
| total | 435 | 21 | 4 | 5.3x |
The story predicted type-bars and type-code were already close to the target shape. On the published method they are already THERE — zero cautionary markers each. So their disposition is confirmed at register, restated only where a sentence is not yet an instruction, and each gets a table row stating the measured zero. That is the cheapest confirmation available that the measure is tracking something real rather than counting warrant tags, which is exactly what the story asked these two packs for.
The three that carry work:
type-test.md— the scaffold-verification rule, the who names the test home limb, the split-guarantee sub-case, the assembled-surface rule, and the coverage-zero family with its two-classes sort, its read-the-verdict-off-the-producer rule, its dead-arm invariant and its name-an-arm-by-what-makes-it-fire limb.type-migration.md— the unit of a migration is the set of callers; the deliverable is the DELETION of the abandoned path; "unchanged" is not a neutral disposition; and the suppressor limb, whose ordering is the opposite of the other four.type-design.md— design to the linked subtasks, the allocation-table corollary with its two non-element takings and its tree-wide grep, the access-path scope rule, the compose-don't-redraw rule, and the link-the-defining-subtasks rule.
Two things stay whole in the imperative whatever the register says: the coverage-zero two-class sort in type-test.md (defensive arms versus reachable ones, and what each owes) and the suppressor limb in type-migration.md. Both are procedures with a stated remedy, and the suppressor limb in particular exists because every caller-outward sweep is structurally blind to it — a shortened version would restore the blind spot it was written to close.
Same disposition discipline as the proof pack: keep means the imperative with no incident narrative, no > **Warrant:** block and no fixture pointer; migrate means the body goes to the lesson store and the one-line directive stays; a limb whose lesson row is not yet written is marked pending with its text left in place.
Do not merge the five packs, and do not move a rule between them. The split is a routing decision — PACKS_BY_TYPE maps a card's type to the packs it loads — so a rule that moves file changes which cards ever see it.
Acceptance criteria
RESTATEMENT.mdgains one section per pack — five sections — each with a table row per unit or named limb carrying the disposition, the before/after line count, and for a migrate the destinationsourceRef.type-bars.mdandtype-code.mdeach have a row recording the measured 0 cautionary and stating what, if anything, changed.type-migration.mdandtype-design.mdeach end with a non-zero prescriptive count; the PR body quotes every pack's before and after figures.- The coverage-zero two-class sort and the suppressor limb survive as instructions, each still enumerating what it enumerated.
- Every migrated paragraph is verbatim under
#restatementinprompts/plan-rules/fixtures/<pack>.md. Fixtures exist ata9caaa1fortype-designandtype-migrationonly; create one for another pack only if that pack migrates something. python3 prompts/plan-rules/REGISTER.count.py type-bars type-code type-design type-migration type-testat this card's base and again on the result, with both sets of figures and the base ref in the PR body.- No rule moves between the five packs; where a rule looks mis-filed, record the observation in the table and leave it where it is.
COMPRESSION.conserve.pyis expected to FAIL on the packs this card re-words; quote it, cite MOTIR-3377, and change no rule text to chase it.- The change lands via a branch and a PR against
main; no direct commit.
Context refs
motir-metaprompts/plan-rules/type-bars.md·type-code.md·type-design.md·type-migration.md·type-test.md.motir-metaprompts/plan-rules/fixtures/type-design.md·fixtures/type-migration.md.motir-metaprompts/plan-rules/RESTATEMENT.md·REGISTER.count.py·MANIFEST.md— the routing table that decides which card loads which of these.motir-aisrc/llm/planningRulePacks.ts—PACKS_BY_TYPE, which has entries forcode,design,choreanddeployand none fortest; note it in thetype-testrow for the sibling card.- MOTIR-3308 — the worked example of the table and the restated voice.