Sub-project F — petrova contract bootstrap backfill
Date: 2026-05-06 Status: open Supersedes: none — net-new sub-project Superseded-by: none — current
Context
Section titled “Context”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 legacyregistry-entry.yamlsnapshot, 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.
Decision
Section titled “Decision”Open sub-project F = “petrova contract bootstrap backfill”.
For each of the six in-workspace governed repos above, land one PR that introduces:
.petrova/contract.yamldeclaring all five integrations (ares,traceo,crumb,rocky,eva) using the upstreamcontracts/contract.schema.jsonshape, with statuses chosen by the rule below.- 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.
Per-integration default rules
Section titled “Per-integration default rules”For each consumer repo:
| Governance applicability (registry) | Consumer initial status | Notes |
|---|---|---|
required | pending | Declared 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. |
optional | pending | Same — operator decides per repo when to flip or when to declare not_applicable. |
not_applicable | not_applicable with reason + review_by (12 months hence) + decision_doc pointing at the consumer-side bootstrap decision | The reason mirrors the registry’s notes column where one exists; otherwise a generic “no surface yet for this slug” rationale is used. |
Self-applicability
Section titled “Self-applicability”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.
Alternatives considered
Section titled “Alternatives considered”- 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-profilefor repos with a legacyprofile.yaml. Onlygrace-hqhad one (already migrated). The other five never had a profile.yaml; there is nothing to migrate from.
Consequences
Section titled “Consequences”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.
Sub-project F closure criteria
Section titled “Sub-project F closure criteria”- Six PRs (one per repo) merged: kahn-hq, stratt-hq, choco-hq, devarno-cloud, rocky-hq, eva-hq.
-
petrova doctor --self-checkstill ok after each merge. -
petrova doctor --commit-state --repo <path>runs cleanly for each slug;state/<slug>.yamlwritten. -
petrova-hq/docs/findings/gains a closure entry citing finding F-4 as resolved.
References
Section titled “References”- 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.
Sign-off
Section titled “Sign-off”- Subagent: petrova-control-plane (2026-05-06)
- Human: pending