Skip to content

Decision: ratify MR-16 and add MR-17 to META-RULES.md


date: 2026-05-13 status: accepted title: Ratify MR-16 (catalogue realism) and add MR-17 (playbook physically present) supersedes: [] outranks:

  • docs/north-star/intent.md

Decision: ratify MR-16 and add MR-17 to META-RULES.md

Section titled “Decision: ratify MR-16 and add MR-17 to META-RULES.md”

Two gaps surfaced between code state and meta-rules prose:

  1. MR-16 has been live in code since Baseline v3 (host/src/sources/audit.ts:auditMr16) but was never written into core/templates/META-RULES.md. The audit fetches the eva-hq prompt catalogue at run-time and verifies every kind: verb-wrapper prompt names a verb that exists in petrova-codes/spec/verbs/. The prose entry needs to catch up with the implementation.

  2. MR-17 is new. On 2026-05-13 an operator ran petrova-bootstrap against asgard-codes (a registered but bare-bones consumer). The EVA harness served the prompt with its {{meta_rules_path}} / {{mr_preamble_path}} / {{progress_signal_path}} / {{petrova_body_path}} references unresolved, because those files don’t exist in a fresh consumer repo. This surfaced a missing Step 0 in the bare-bones-to-baselined journey: the playbook must be physically deposited in the consumer before any bootstrap prompt can resolve its references.

The petrova_install_playbook verb (petrova-codes#86, merged 2026-05-13) closes the mechanical gap. MR-17 codifies the audit signal that goes with it: if a consumer at role: production or experimental lacks .petrova/playbook/META-RULES.md, the install verb hasn’t run and Step 0 of the journey is incomplete.

Add two meta-rules to core/templates/META-RULES.md, bumping version 1.1 → 1.2:

  • MR-16The catalogue is realistic. Every prompt in eva-hq/prompts/ marked kind: verb-wrapper must name a verb: that exists in petrova-codes/spec/verbs/*.schema.json. Verbs without a wrapper prompt are softer drift (warn). Wrappers pointing at phantom verbs are fail. (Codifies live behaviour, no new code.)
  • MR-17The playbook is physically present. A consumer repo at role: production or experimental must carry .petrova/playbook/META-RULES.md (and the rest of the playbook deposit) under its default branch. Enforced by auditMr17 in host/src/sources/audit.ts. Skip for non-product roles.
  • META-RULES.md version bumps 1.1 → 1.2 with changelog entry.
  • auditMr17 lands in petrova-codes (paired PR).
  • The /console/governance grid gains two new columns. MR-16 already has data (it’s been computing in the background); MR-17 will populate on the next sweep after deploy.
  • Baseline v4 declaration requires MR-1 … MR-17 all pass/skip (no fails). The 3 currently-product-role repos (petrova-codes, eva-hq, traceo-mcp-server) will fail MR-17 on first audit until the install verb runs against each.
  • The handbook at ~/Documents/base-vault/handbooks/eva-petrova-handbook.md already lists MR-17 — this ADR is what makes it real in the canonical playbook.
  • Inline MR-16 as MR-1 sub-clause (rejected: catalogue-realism is a distinct concern from the rank-graph DAG; cross-references would be lossy).
  • Treat install-playbook as MR-14’s concern (rejected: MR-14 is “onboarding-complete” — .petrova/contract.yaml exists. The playbook is a strictly earlier signal; collapsing them hides the Step 0 vs. Step 4 distinction the journey makes load-bearing).
  • Defer MR-17 to a later baseline (rejected: the install-playbook verb shipped today and MR-17 is its audit counterpart; shipping the verb without the rule means the audit is silent on the very gap that motivated the verb).
  • Verb implementation: cli/src/verbs/petrova_install_playbook.ts (petrova-codes#86)
  • Audit implementation: host/src/sources/audit.ts:auditMr17 (paired PR)
  • Baseline v3 ADR: docs/decisions/2026-05-13-petrova-baseline-v3.md
  • Handbook: ~/Documents/base-vault/handbooks/eva-petrova-handbook.md (sections 1, 3, 5)
  • Original incident: operator ran petrova-bootstrap against asgard-codes, harness served raw {{...}} placeholders (2026-05-13 session log)