Skip to content

Meta-rules (MR-1 ... MR-21)

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 backlog
  • MR-2 — Friction surfaced in phase N’s verification round becomes phase N+1’s input
  • MR-3 — Sibling files stay sibling
  • MR-4 — Dates are absolute
  • MR-5 — Direct push for small fixes; PR for checkpoints
  • MR-6 — Subagents read from AGENTS.xml, not from inferred patterns
  • MR-7 — Decision docs are append-only
  • MR-8 — Invariants are numbered and stable
  • MR-9 — Don’t invent invariants
  • MR-10 — The verification round is mandatory at phase close
  • MR-11 — Anti-shapes are named, catalogued, and watched
  • MR-12 — The CLAUDE.md is the projection, not the source
  • MR-13 — Intent and observation are separate state spaces
  • MR-14 — Probes never auto-promote, only auto-demote
  • MR-15 — The schema is the source of bootstrap questions
  • MR-16 — The catalogue is realistic
  • MR-17 — The playbook is physically present
  • MR-18 — A gate’s evidence must be able to exist before its tick
  • MR-19 — Claims about a workflow cite an observed run
  • MR-20 — A negative assertion carries a positive precondition
  • MR-21 — A claim that a guard bites cites the named assertion
  • At commit time: the .github/workflows/docs-invariants.yml CI job validates the rank-graph DAG, ISO date formats, the AGENTS.xml schema, 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.

These rules are meta — changing one is a bigger deal than changing a project invariant. To change one:

  1. Open a decision doc (docs/decisions/YYYY-MM-DD-meta-rule-change-<slug>.md).
  2. State the rule being changed, the proposed new wording, the trigger (what surfaced this), and the implications for in-flight work.
  3. Get explicit human approval (no agent self-modification of meta-rules).
  4. Update this file. Update any referencing prompts. Update the CI job if the change is mechanically enforceable.
  5. Bump the meta-rules version in this file’s header.

Meta-rules version: 1.5.

  • 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-N for this file; repo-local meta-rules take a repo prefix (KMR-N precedent). Ratified by parent-repo decision doc docs/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 that petrova_install_playbook keeps 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 doc docs/decisions/2026-05-16-mcp-prompt-resolution.md.

  • 1.2 (2026-05-13) — Add MR-16 (catalogue realism — codifies the existing auditMr16 check that has been live since Baseline v3) and MR-17 (playbook physically present — pairs with the new petrova_install_playbook verb from petrova-codes#86). Ratified by parent-repo decision doc docs/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.

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.