Meta-rules (MR-1 ... MR-21)
Meta-rules
Section titled “Meta-rules”Cross-cutting invariants for the doc/agent system itself. These are meta — they govern the docs that govern the code. If one of these is violated, the system rots from underneath.
These rules apply across all phases, all subagents, all docs. They are the
glue. Numbered MR-N to distinguish from project invariants I-N.
Bare MR-N is reserved for this file. A repo that adopts its own
meta-rules prefixes them with a repo code (kahn’s precedent: KMR-N).
When a local rule is promoted to a fleet MR, the repo marks its local
number “promoted to MR-N” and does not reuse it (MR-8 applied to local
numbering).
MR-1— North-star outranks the backlogMR-2— Friction surfaced in phase N’s verification round becomes phase N+1’s inputMR-3— Sibling files stay siblingMR-4— Dates are absoluteMR-5— Direct push for small fixes; PR for checkpointsMR-6— Subagents read fromAGENTS.xml, not from inferred patternsMR-7— Decision docs are append-onlyMR-8— Invariants are numbered and stableMR-9— Don’t invent invariantsMR-10— The verification round is mandatory at phase closeMR-11— Anti-shapes are named, catalogued, and watchedMR-12— The CLAUDE.md is the projection, not the sourceMR-13— Intent and observation are separate state spacesMR-14— Probes never auto-promote, only auto-demoteMR-15— The schema is the source of bootstrap questionsMR-16— The catalogue is realisticMR-17— The playbook is physically presentMR-18— A gate’s evidence must be able to exist before its tickMR-19— Claims about a workflow cite an observed runMR-20— A negative assertion carries a positive preconditionMR-21— A claim that a guard bites cites the named assertion
How these rules get enforced
Section titled “How these rules get enforced”- At commit time: the
.github/workflows/docs-invariants.ymlCI job validates the rank-graph DAG, ISO date formats, theAGENTS.xmlschema, and milestone-ID cross-references. - By subagents: every subagent’s
<refusal_conditions>enumerates which MR it would violate by proceeding. - By the orchestrator: playbook prompts reference MRs by number.
When the agent fetches
petrova.prompts.get 02-phase-close, it loads MR-2 and MR-10. - By you, the human: when something feels off, scan this file. The rule that’s being broken is almost always one of these twenty-one.
Updating these rules
Section titled “Updating these rules”These rules are meta — changing one is a bigger deal than changing a project invariant. To change one:
- Open a decision doc (
docs/decisions/YYYY-MM-DD-meta-rule-change-<slug>.md). - State the rule being changed, the proposed new wording, the trigger (what surfaced this), and the implications for in-flight work.
- Get explicit human approval (no agent self-modification of meta-rules).
- Update this file. Update any referencing prompts. Update the CI job if the change is mechanically enforceable.
- Bump the meta-rules version in this file’s header.
Meta-rules version: 1.5.
Changelog
Section titled “Changelog”-
1.5 (2026-11-10) — Add MR-21 (a claim that a guard bites cites the named assertion), promoted from arno-host’s mutation-evidence convention. Assigns MR-21, which 1.4 left unassigned (it had been held conditionally for kahn’s KMR-5, which stayed local); no ratified ID is reused. Ratified by parent-repo decision doc
docs/decisions/2026-11-10-meta-rule-change-mutation-evidence-mr-21.md. -
1.4 (2026-10-02) — Add MR-18 (a gate’s evidence must be able to exist before its tick), MR-19 (claims about a workflow cite an observed run) and MR-20 (a negative assertion carries a positive precondition), promoted from kahn’s KMR-3, KMR-4 and KMR-6. kahn’s KMR-5 (measured FAILs reconcile against the named scope) stays repo-local; MR-21 is unassigned. Reserve bare
MR-Nfor this file; repo-local meta-rules take a repo prefix (KMR-Nprecedent). Ratified by parent-repo decision docdocs/decisions/2026-10-02-meta-rule-change-gate-evidence-rules.md. -
1.3 (2026-05-16) — Prompt cross-references resolve via the Fleet MCP (
petrova.prompts.get <slug>) instead of local file paths: MR-15 names the bootstrap prompt by its Fleet-MCP slug, the enforcement section describes the orchestrator fetching playbook prompts, and MR-17 records thatpetrova_install_playbookkeeps sibling-prompt cross-references as Fleet-MCP fetch directives rather than rewriting them to local paths. No MR added or repealed. Ratified by parent-repo decision docdocs/decisions/2026-05-16-mcp-prompt-resolution.md. -
1.2 (2026-05-13) — Add MR-16 (catalogue realism — codifies the existing
auditMr16check that has been live since Baseline v3) and MR-17 (playbook physically present — pairs with the newpetrova_install_playbookverb from petrova-codes#86). Ratified by parent-repo decision docdocs/decisions/2026-05-13-meta-rules-mr16-mr17.md. -
1.1 (2026-04-30) — Add MR-13 (intent vs. observation), MR-14 (probes auto-demote only), MR-15 (schema is the source of bootstrap questions). Ratified by parent-repo decision doc
docs/decisions/2026-04-30-integration-spine-meta-rules.md. -
1.0 — Initial set, MR-1 through MR-12.
Changing an MR
Section titled “Changing an MR”Meta-rule changes are the highest-stakes documentation event. Process: open a decision doc proposing the change, get explicit human approval, bump the meta-rules version line. Renumbering ripples — grep -r "MR-N" before changing IDs.