MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-3900

Re-cut 3 of 3 — the TYPE packs: what each of the 14 types receives, and what it must not

Implemented
Description

The cut that answers the question the story exists for: a translate card must not be told to run pg_policies.

The material to place

VERIFY_EVERY_PRECONDITION alone carries, by subject mention: HTTP seam 24, design asset 23, datastore 11, test lane 9. Those runs land on the types whose cards can fire them — the datastore discharges (pg_policies, pg_roles, information_schema, row_security_active(), uniqueness and tenancy constraints, policy-read-from-the-migration) on code / migration / chore / deploy; the seam runs (routes, DTOs, response-body-vs-storage, auth surface, callable-in-state, operation cardinality, method-is-not-a-path) on code and test; the allocation sweep on design; the lane and expected-results material on test.

The remaining types receive their own bar and the cross-cutting set, and nothing else. Where a type has no rule of its own that is an implementation gap rather than evidence it needs none, and the rule is AUTHORED here — the same call the per-type bars took, and the reason MOTIR-3866 authored nine of them.

Acceptance criteria

  • Every one of the 14 types resolves to at least one pack whose content its cards can act on, and the PR states per type where its rules came from: moved, authored, or already present.
  • A translate, copy, legal, research, review or content cell contains no datastore, HTTP-seam or design-asset discharge. Asserted by pattern over the composed cell — pg_policies, pg_roles, information_schema, row_security_active, AUTH surface, response body, ALLOCATION A DESIGN'S ALLOCATION TAKES AS WELL AS GIVES — not reviewed by eye.

⚠️ AMENDED 2026-08-29 (this card's own run) — the ALLOCATION pattern was too coarse, and following it literally would have moved a rule that belongs where it is. Measured after the cut: the bare word still reaches a quiet cell, and its source is the CROSS-CUTTING allocation-table rule — "AND AN ALLOCATION TABLE THAT NAMES AN ACTION OWES A LINE ABOUT THE SUBSTRATE THAT ACTION WRITES TO … an architecture decision record's ownership grid, a design note's panel list, a permissions matrix" — which a legal or content card can absolutely author, and which is precisely the kind of card that authors one. The criterion's INTENT is no DESIGN-ASSET discharge, and the pattern that expresses it is the design sweep's own wording (A DESIGN'S ALLOCATION TAKES AS WELL AS GIVES), which after the cut is in type-design and reaches the design cell only. pg_roles is ADDED to the list for the same reason in reverse — it is part of the same datastore run and the card's list happened to omit it. The criterion is asserted mechanically as amended, and it is GREEN.

  • A code cell keeps every discharge it has today; the routing baseline proves it lost nothing.
  • The composed size of each of the 14 type cells is stated before and after, with the largest reduction and any increase both named.
  • No pack is declared empty, and every type pack is reachable.
  • Authored rules are prescriptive: the register ratchet holds, and any rise is defended per marker in the PR.

Context refs

  • motir-ai src/llm/planningRulePacks.ts — the type-* packs and PACKS_BY_TYPE.
  • motir-ai tests/planningRuleRouting.test.ts — the superset proof per moved clause.
  • MOTIR-3898 — the cross-cutting set this is the complement of. MOTIR-3897 — the selector.
  • MOTIR-3866 / motir-ai#329 — the per-type bars already shipped, which these preconditions sit beside rather than restate.

⚠️ At the estimation gate at 8 points. It stays one card because the acceptance criterion that matters — a translate cell containing no datastore discharge — is only true once ALL the type-scoped material has been placed. Splitting it by type family would leave that criterion unassertable on every part.