Skip to content

Sub-project F — petrova contract bootstrap backfill

Date: 2026-05-06 Status: open Supersedes: none — net-new sub-project Superseded-by: none — current

The 2026-05-06 verification round of the rocky/eva realignment (docs/findings/20260506-1500-rocky-eva-realignment-verify-round.md, finding F-4) surfaced that six governed repos in registry.yaml have no .petrova/contract.yaml:

  • kahn-hq (added 2026-04-29, role=production)
  • stratt-hq (added 2026-04-29, role=production)
  • choco-hq (added 2026-04-29, role=experimental — has only a legacy registry-entry.yaml snapshot, no live contract)
  • devarno-cloud (added 2026-04-30, role=experimental)
  • rocky-hq (added 2026-05-06, role=experimental)
  • eva-hq (added 2026-05-06, role=scaffold)

traceo-mcp-server (registered 2026-04-30) likewise lacks a contract in its remote, but its local clone (workspace path traceo-cat/) is the only out-of-tree governed repo and is treated separately — sub-project F includes it but defers the actual PR to whoever maintains that working tree.

Without a contract, petrova doctor --repo <slug> fails with a schema-rejection error and the spine cannot reconcile state. The governance applicability matrix correctly says rocky: required (or optional) for these slugs, but the consumer side never made its self-declaration.

This is not a rocky/eva realignment problem; it is a pre-existing sub-project A onboarding gap. The realignment surfaced it.

Open sub-project F = “petrova contract bootstrap backfill”.

For each of the six in-workspace governed repos above, land one PR that introduces:

  1. .petrova/contract.yaml declaring all five integrations (ares, traceo, crumb, rocky, eva) using the upstream contracts/contract.schema.json shape, with statuses chosen by the rule below.
  2. A consumer-side decision doc (using each repo’s existing decision-doc style — numbered or dated) ratifying the bootstrap and citing this petrova-hq decision.

For each consumer repo:

Governance applicability (registry)Consumer initial statusNotes
requiredpendingDeclared but not yet wired. Each integration’s wire-up runbook (docs/runbooks/{ares,traceo,crumb,rocky-eva}-wire-rollout.md) drives the flip to wired.
optionalpendingSame — operator decides per repo when to flip or when to declare not_applicable.
not_applicablenot_applicable with reason + review_by (12 months hence) + decision_doc pointing at the consumer-side bootstrap decisionThe reason mirrors the registry’s notes column where one exists; otherwise a generic “no surface yet for this slug” rationale is used.

For rocky-hq and eva-hq, the integration that the repo IS declares not_applicable:

  • rocky-hq.contract.integrations.rocky = not_applicable (“rocky-hq IS rocky; does not consume itself”).
  • eva-hq.contract.integrations.eva = not_applicable (“eva-hq IS eva; does not consume itself”).

This mirrors the petrova-hq self-entry pattern.

  • Bootstrap one repo at a time across multiple sub-projects. Too slow; the gap is uniform across six repos and the work per repo is mechanical (a contract.yaml + a small decision doc). One sub-project closing six PRs in parallel is more honest about the shape of the work.
  • Defer until after rocky/eva wire-ups complete. Backwards: doctor cannot reconcile state for these slugs at all without a contract, so deferring blocks every spine operation against them.
  • Auto-generate contracts from petrova migrate-profile for repos with a legacy profile.yaml. Only grace-hq had one (already migrated). The other five never had a profile.yaml; there is nothing to migrate from.

For code: none in petrova-hq. Six new .petrova/contract.yaml files appear in consumer repos.

For docs: this decision doc opens sub-project F. Each consumer repo gets one new decision doc.

For in-flight phases: none directly. Once contracts land, the deferred Phase 2 of docs/runbooks/rocky-eva-wire-rollout.md becomes unblocked.

For invariants:

  • MR-7 upheld: new decision doc, no edits to prior decisions.
  • MR-3 upheld: each consumer’s bootstrap decision is a sibling to the governance entry already in registry.yaml, not a replacement.
  • MR-4 upheld: ISO date 2026-05-06.
  • MR-12 upheld: each contract.yaml is a self-declaration source, not a projection.
  • Six PRs (one per repo) merged: kahn-hq, stratt-hq, choco-hq, devarno-cloud, rocky-hq, eva-hq.
  • petrova doctor --self-check still ok after each merge.
  • petrova doctor --commit-state --repo <path> runs cleanly for each slug; state/<slug>.yaml written.
  • petrova-hq/docs/findings/ gains a closure entry citing finding F-4 as resolved.
  • Verify-round: docs/findings/20260506-1500-rocky-eva-realignment-verify-round.md (F-4).
  • Schema: contracts/contract.schema.json.
  • Bootstrap-questions reference: contracts/bootstrap-questions.yaml.
  • Existing canary contract: .petrova/contract.yaml (petrova-hq self-entry).
  • Wave 1 reference flip: grace-hq/grace#23.
  • Subagent: petrova-control-plane (2026-05-06)
  • Human: pending