2026-05-13-petrova-baseline-v1
title: PETROVA Baseline v1 — Data Hygiene + Governance Propagation date: 2026-05-13 status: ratified mr_compliance: [MR-1, MR-4, MR-7, MR-8, MR-12, MR-13]
Section titled “title: PETROVA Baseline v1 — Data Hygiene + Governance Propagation date: 2026-05-13 status: ratified mr_compliance: [MR-1, MR-4, MR-7, MR-8, MR-12, MR-13]”Context
Section titled “Context”Until 2026-05-13, the PETROVA control plane reported phase and acts state honestly for exactly one repo (skyflow-hq). The other 28 GitHub orgs the Petrova-act App is installed on rendered as silent dots or empty rows on /console/phases and /console/acts. Three distinct conditions were collapsed into the same blank cell: (a) the sweep had never run against the repo, (b) the sweep ran but the repo’s decision-doc filenames didn’t match ^(\d{4}-\d{2}-\d{2})-, and (c) the repo legitimately had no phase activity yet. The dashboard could not prove the fleet was in a known state, so “baseline” was unprovable.
This decision declares PETROVA Baseline v1: every org the Petrova-act GitHub App is installed on (29 total) is represented in registry.yaml, every active or dormant fleet repo has the canonical docs-invariants workflow installed, every dashboard cell distinguishes “onboarded” from “no phases yet” from “not onboarded”, and every sweep diagnostic surfaces the reason for an empty result instead of producing silent nulls. Scope was confirmed with the operator on 2026-05-13 as “data + governance propagation” — explicitly excluding a petrova-onboard verb, a declare-baseline verb, and an MR-14 audit check. Baseline declaration is this decision doc, not a verb-emitted artefact.
Decision
Section titled “Decision”Baseline v1 is declared as of 2026-05-13. The fleet inventory, evidence map, and follow-up registry below constitute the baseline contract. Re-declaration as Baseline v2 will happen via a successor decision doc (per MR-7 append-only history); intermediate corrections that don’t break the v1 contract land as routine PRs without a new ADR.
Fleet inventory (29 orgs)
Section titled “Fleet inventory (29 orgs)”Onboarded as governance repos (25):
petrova-codes (control plane, role:control-plane), kahn-hq, stratt-hq, choco-hq, devarno-cloud, traceo-mcp-server, grace-hq, rocky-hq, eva-hq, skyflow-hq, smo1-io, oompa-tools (active, role:production), chronicle-hq, aphelion-craft, casa-nuova, iris-hq, k41ex, nestr-tools, so1-io, sparki-tools, tektree-io, v01t-io, cookr-hq, reactr-dev, featr-io (13 dormant, role:scaffold).
Placeholders (4): asgard-codes, thrustr-io, downlink-hq, pwplz — App-installed, no repos accessible at discovery time. Registered with role: placeholder and no url:. The schema relaxation that allows this is part of the Baseline v1 contract.
fleets_allowed: [] for every new entry (consistent with control-plane policy — agent automation requires an explicit subsequent governance change).
Evidence map
Section titled “Evidence map”| Phase | Artefact | Reference |
|---|---|---|
| 0 | NNNN frontmatter precondition table | pre-baseline/2026-05-13/nnnn-precondition.md |
| 0 | Pre-baseline state snapshot (11 yamls + 3 jsonls) | pre-baseline/2026-05-13/state/ |
| 0 | Auto-discovery sanity check (29 = 29 vs gh.env) | conversation log; reproducible via host/src/github-auth.ts:discoverInstallations() |
| 1 | 18-org classification (1 active / 13 dormant / 4 placeholder) | pre-baseline/2026-05-13/phase1-org-classification.yaml |
| 2 | Control-plane changes (CLI multi-installation auth, sweep diagnostics, phases tri-state, registry expansion) | PR petrova-codes#67 (merged 2026-05-13) |
| 3 | NNNN→dated decision-doc migrations | 5 PRs across consumer orgs: kahn-hq #68, stratt-hq #62, devarno-cloud #38, rocky-hq #28, oompa-tools #2. 49 file renames, ~150 cross-references rewritten total. |
| 4 | docs-invariants workflow propagation | 21 PRs across consumer orgs (full list in conversation log of 2026-05-13). |
| 5 | This decision doc | docs/decisions/2026-05-13-petrova-baseline-v1.md |
Acceptance gate for “Baseline v1 declared”: all Phase 3 and Phase 4 PRs merged; a final petrova sweep-state --commit-state run produces zero (filename_convention_mismatch) hints across the active+dormant set. The operator may declare Baseline v1 before every PR is merged (this doc is the declaration), with a note in a follow-up sweep-state snapshot to confirm the post-merge state was clean.
Scope boundaries (deferred to future baselines)
Section titled “Scope boundaries (deferred to future baselines)”- No
petrova-onboardverb. Bootstrap remains prose-driven (00-bootstrap.md); the workflow propagated in Phase 4 is the enforcement gate going forward, not a verb. - No
declare-baselineverb. Baseline declaration is decision-doc-only. Future “Baseline v2” will be another decision doc, not an idempotent CLI call. - No MR-14 audit check for “is docs-invariants.yml installed”. The check exists implicitly via the dashboard tri-state (
not_onboardedrows are visually obvious) and the sweep diagnostics ((no_decisions_dir)hints). - No registry-level audit that walks each repo to confirm workflow SHA matches canonical. Drift detection here is a known follow-up; until it lands, conformance is enforced at PR time (by the workflow in each repo) and reviewed at the next baseline.
- No automatic acts backfill for repos whose past phase events were direct-commit. The acts surface remains
act = signed verb PRas recorded by the 2026-05-13 skyflow-hq decision (docs/decisions/2026-05-13-phase-events-via-petrova-cli.mdin skyflow-hq).
Known follow-up gaps (not blocking Baseline v1)
Section titled “Known follow-up gaps (not blocking Baseline v1)”These were real, identified, deferred at declaration time. Status updated 2026-05-13 once the operator authorised follow-up work.
- 🟡 Outstanding (operator-only) — CLI
petrova-actGitHub App lacksworkflows:writescope. Phase 4 had to use the operator’s PAT (gh auth token) to land workflow files. Until the App is granted the additional scope, agent-driven workflow updates aren’t possible. To resolve: edit the App athttps://github.com/settings/apps/petrova-act(or wherever the App is hosted) → Permissions → Repository permissions → set “Workflows” to “Read and write” → save. Each of the 29 installations will then receive a “permission change pending” notification that the org owner must accept. UI-only — cannot be scripted from this side. - ✅ Closed —
traceo-mcp-serverregistry URL corrected fromtraceo-ai/traceo-mcp-servertotraceo-cat/traceo-mcp-server(the actual canonical repo, confirmed viaapps.listReposAccessibleToInstallation). petrova-codes#69 merged 2026-05-13. Workflow installed on the corrected repo via traceo-cat/traceo-mcp-server#158. - ✅ Closed —
devarno-cloud/.githubsubmodule detached. devarno-cloud/devarno-cloud#39 replaced the submodule with a regular.github/directory and installed the workflow directly. Org-level community-file inheritance fromdevarno-cloud/.githubcontinues to work via GitHub’s built-in mechanism (it doesn’t rely on the parent having a submodule pointer). - ✅ Closed — rocky-hq ADR 0004 date. Body’s
**Date:** 2026-05-04was a single-character typo; corrected to2026-05-03to match the filename and git creation timestamp. rocky-hq#30 merged. - ✅ Closed — stratt-hq forward refs to 0014–0016 rewritten to descriptive slugs (
traceo-wire,crumb-wire,rocky-wire) plus<authoring-date>placeholders in AC entries. stratt-hq/stratt-run#64 merged. - ✅ Closed —
cli/tests/diagnose.test.tsslice-limit failure fixed by rewriting the test to callwalkDecisionsdirectly instead of going through the sliceddiagnoseoutput. petrova-codes#70 merged. 186/186 cli tests pass. - 🟢 Open (low-urgency) — Decision-doc CRUMB / EVA frontmatter conformance for the 18 new entries’
integrations_applicabilitydefaults. All newly-registered entries declarenot_applicablefor every integration; the long-term policy may vary per org (e.g.iris-hqSDK ecosystem might warranteva: optional). Per-entry refinement is a follow-up triggered when each dormant org adopts governance — no action required until then.
Post-Baseline-v1 governance-audit sweep (2026-05-13)
Section titled “Post-Baseline-v1 governance-audit sweep (2026-05-13)”After Baseline v1 declared, the live /console/governance page surfaced 4 fails + 32 warns across the fleet. Same-day resolution authorised by the operator. Final state after the sweep:
| Metric | Before | After |
|---|---|---|
| Fails | 4 | 0 |
| Warns | 32 | 12 |
| Reduction | — | 62% |
Issues addressed:
- MR-7 false-positive on petrova-codes (1 fail) — the audit’s regex matched
**Status:** supersededmid-line in a table row documenting the MR-7 rule itself. Anchored the regex to line-start (multiline flag). petrova-codes#72. - MR-8 false-positive on skyflow-hq (1 fail) — same regex-anchoring class of issue: the audit was counting inline citations like
(I-2)as declarations. Refined the regex to only count^- \*\*I-N.\*\*declaration form. petrova-codes#72. - MR-1 + MR-12 noise on dormant/scaffold repos (16 warns + 5 warns) — added role-aware skip: roles in
{scaffold, placeholder, archived, control-plane}returnskipinstead ofwarnwhen their gap is “no north-star yet” (legitimately absent for those roles). petrova-codes#72. - MR-4 fail on grace-hq (1 fail) — 5 findings docs were created with the decisions filename convention. Renamed to
YYYYMMDD-0000-form with 16-file cross-reference sweep. grace-hq/grace#25. - MR-4 fail on kahn-hq (1 fail) — 10 non-conforming findings filenames. Renamed dated forms to
YYYYMMDD-0000-and prefixed 4 long-lived registers (state.md,invariants.md,open_questions.md,airlock-schema-watch.md) with_so they’re treated like templates by the audit. kahn-hq/kahn#70. Follow-up kahn-hq/kahn#71 lowercased two remaining mixed-case slugs (PASS,postC3) that the regex rejected.
Remaining 12 warns are substantive operator content work, not Baseline-v1 scope:
- MR-1 (8 warns): active repos missing
outranks:frontmatter on recent decisions (choco-hq, devarno-cloud, grace-hq, kahn-hq, oompa-tools, skyflow-hq, smo1-io, stratt-hq). Each operator should addoutranks: [paths]to new decisions going forward; backfilling the listed entries is each repo’s call. - MR-1 (1 warn): rocky-hq missing
docs/north-star/. Substantive — rocky-hq isrole: experimentalso the audit correctly flags it. Bootstrap north-star when rocky-hq’s operator is ready. - MR-10 (1 warn): kahn-hq has phase-close events without obvious verification-round findings. Substantive backfill question.
- MR-12 (2 warns): rocky-hq (north-star gap, same root cause) + stratt-hq (CLAUDE.md doesn’t reference north-star/MILESTONES by name).
These don’t graduate to “blocking baseline” — they’re the kind of ongoing-governance work each *-hq operator addresses at their own cadence as they author new decisions.
Roster — included vs deferred
Section titled “Roster — included vs deferred”Included in Baseline v1 (25 onboarded + 4 placeholder = 29): every entry currently in registry.yaml.
Deferred from Baseline v1 (0): none. Every App-installed org is represented.
Within-baseline conditional milestones (all resolved 2026-05-13):
- ✅ Repos with workflow-install PR (Phase 4): all 21 merged.
- ✅ Repos with decision-doc migration PR (Phase 3): all 5 merged.
- ✅
devarno-cloudandtraceo-mcp-server: both fully baselined via follow-up items 2 and 3.
Single remaining open item: follow-up #1 (App workflows:write scope) — operator-only.
Versioning
Section titled “Versioning”- Baseline v1 declared: 2026-05-13.
- Baseline v2 will follow when sufficient new follow-up items accumulate to warrant fresh scope (rule of thumb: when this doc’s follow-up list crosses ~10 items, or when a load-bearing playbook change (new MR, new verb, new architectural invariant) ships). Re-declaration is by successor decision doc, never by silent edit of this one.
References
Section titled “References”- Plan:
/home/devarno/.claude/plans/glittery-popping-bear.md(operator-local; reproduces the 5-phase rollout). - Supersedes:
docs/decisions/2026-05-13-host-installation-auto-discovery.mdis not superseded — that ADR ships the auto-discovery machinery that Baseline v1 depends on. - Related:
pre-baseline/2026-05-13/— full pre-baseline snapshot, NNNN precondition table, and Phase 1 classification, committed alongside this ADR so the evidence is reproducible from any future reader.