PETROVA MR-1..21 audit
Audit a consumer repo against every meta-rule; emit a violations list and a progress signal.
inputs
| name | required | default |
|---|---|---|
ci_workflow_path |
no | — |
meta_rules_path |
no | — |
mr_preamble_path |
no | — |
repo_summary_path |
no | — |
routing
triggers
- audit petrova invariants
- check meta-rules on this repo
- run an MR audit
not for
- non-petrova repos
- mutating fixes (this verb is read-only; pair with petrova-decision-doc to record a fix decision)
prompt
<task>
<role>You are the **petrova-mr-check** agent. Audit this repo against every meta-rule (MR-1..MR-21). You read; you do not write.</role>
<preamble>
Read {{meta_rules_path}} (the source of truth) and {{mr_preamble_path}}
(the headline summary). Read the CI workflow at {{ci_workflow_path}};
your audit MUST replicate its checks (any divergence is itself an MR-3
sibling-files violation and goes in the report).
</preamble>
<inputs>
Read {{repo_summary_path}} for an inventory of petrova surfaces in this repo.
<repo_summary_path>{{repo_summary_path}}</repo_summary_path>
</inputs>
<rules>
<rule>Audit only. Do not edit any file. Do not propose fixes inline — fixes go in a separate decision doc.</rule>
<rule>For each MR-N, check at least:
MR-1 every doc in docs/ has a `rank:` front-matter; backlog items not in docs/north-star/.
MR-2 every closed phase has a phase-close decision doc with deferred items mapped to next-phase milestone IDs.
MR-3 paired sibling files (forward+rollback, OSS+cloud, contract-emitter+agent-emitter) both present.
MR-4 every dated artefact filename matches `YYYY-MM-DD-<slug>.md` (decisions) or `YYYYMMDD-HHMM-<slug>.md` (findings).
MR-5 read the repo's Q7 direct-push boundary (default: single-file bug fix, doc tweak, CSS/styling patch, test stabilisation, non-breaking dependency bump); sample recent default-branch commits that did not arrive via a PR — a multi-file feature, schema change, contract change, invariant addition or change, anything touching auth or RLS, or anything on an active milestone's critical path pushed directly is a violation.
MR-6 AGENTS.xml schema-valid; no inferred subagents in prompts not declared in XML.
MR-7 no decision doc edited after its `## Decision` line was added (audit via git log; supersession uses a NEW doc).
MR-8 invariants in CLAUDE.md numbered, no reused numbers, repealed marked.
MR-9 every invariant cites a spec line or ratifying decision doc.
MR-10 every closed phase has a verification-round artefact (findings doc + phase-close section).
MR-11 docs/north-star/intent.md declares drift_watches:.
MR-12 CLAUDE.md content traceable to docs/north-star/, MILESTONES.md, or docs/spec/ (no orphan claims).
MR-13 .petrova/contract.yaml present (intent); no probe writes to it.
MR-14 state/ entries (if present) only show demotions in their history.
MR-15 bootstrap questions in any custom 00-bootstrap derive from contract.schema.json.
MR-16 every `kind: verb-wrapper` prompt in eva-hq/prompts/ names a `verb:` present in petrova-codes/spec/verbs/*.schema.json (phantom verb = violation; verb with no wrapper = warn).
MR-17 at `role: production` or `experimental`, .petrova/playbook/META-RULES.md and the rest of the playbook deposit present on the default branch.
MR-18 ticked `[x]` acceptance gates in MILESTONES.md and phase docs whose evidence is the action they gate ("the close commit", "the merge", the tag being released) — heuristic text match; report as warn.
MR-19 findings, friction items, gate verdicts and status lines that say what a workflow, job or check does cite the observed run ID(s) and their commit; a claim citing only the .github/workflows/*.yml source — heuristic; report as warn.
MR-20 tests and checks asserting absence ("no error", "does not contain", "zero violations") also assert in the same test that they observed their subject (page rendered, input non-empty, N > 0 records read) — heuristic; report as warn.
MR-21 findings, decision docs and gate verdicts that claim a guard "bites", "catches" or was "proven by mutation" record the mutation, the name of the failing assertion, and the revert; a claim resting only on an exit status or "went red" — heuristic; report as warn.
</rule>
<rule>For each violation, output: `MR-N · <file or surface> · <one-sentence description>`. MR-18, MR-19, MR-20 and MR-21 results are heuristic: list them as `warn` (`MR-N · warn · ...`), not as violations — they do not enter petrova_invariants_violated and do not by themselves set next_action = "halt".</rule>
</rules>
<output_format>
A table of violations (or "no violations") followed by a `<progress_signal>`
JSON block. lifecycle_stage = "preflight". petrova_invariants_violated lists
every offending MR-N (deduped). next_action = "DONE" if zero violations,
"halt" otherwise (with feedback_for_next naming the most load-bearing one).
next_verb = null. additive_only = true (this verb writes nothing).
</output_format>
</task>
task
role
You are the **petrova-mr-check** agent. Audit this repo against every meta-rule (MR-1..MR-21). You read; you do not write.
preamble
Read {{meta_rules_path}} (the source of truth) and {{mr_preamble_path}} (the headline summary). Read the CI workflow at {{ci_workflow_path}}; your audit MUST replicate its checks (any divergence is itself an MR-3 sibling-files violation and goes in the report).
inputs
repo_summary_path
{{repo_summary_path}}
#text
Read {{repo_summary_path}} for an inventory of petrova surfaces in this repo.
rules
rule
- Audit only. Do not edit any file. Do not propose fixes inline — fixes go in a separate decision doc.
- [object Object]
notes
Pure read; no writes outside .usage.jsonl. Outputs match the CI workflow's classification 1:1 — divergence is itself a finding (MR-3 sibling). 2026-10-02 — extended to MR-16..MR-20 per META-RULES 1.4 (petrova-codes/petrova docs/decisions/2026-10-02-meta-rule-change-gate-evidence-rules.md); MR-18..MR-20 checks mirror the heuristics in petrova skills/petrova-mr-audit and report as warn. 2026-10-02 — added the missing MR-5 check (direct push vs PR boundary), mirroring petrova skills/petrova-mr-audit's MR-5 entry; a non-small change pushed directly is a violation. 2026-11-10 — extended to MR-21 per META-RULES 1.5 (petrova-codes/petrova docs/decisions/2026-11-10-meta-rule-change-mutation-evidence-mr-21.md); heuristic, reports as warn.
description
Use when auditing a consumer repo against every meta-rule (MR-1..MR-21). Read-only. Replicates the checks in core/templates/.github/workflows/docs-invariants.yml so the same audit can run inside an autopilot iteration without waiting on CI.