Sub-project F closure — petrova contract bootstrap backfill
Sub-project F closure
Section titled “Sub-project F closure”What landed
Section titled “What landed”Six consumer PRs merged 2026-05-06, each introducing
.petrova/contract.yaml and a consumer-side decision doc:
| Slug | PR | Contract SHA | State file |
|---|---|---|---|
| kahn-hq | kahn-hq/kahn#65 | 25428e8836a7 | state/kahn-hq.yaml |
| stratt-hq | stratt-hq/stratt-run#32 | 85afd0cc267d | state/stratt-hq.yaml |
| choco-hq | choco-hq/choco-hq#124 | cc468f150e4d | state/choco-hq.yaml |
| devarno-cloud | devarno-cloud/devarno-cloud#33 | 2fab2dcfe1a5 | state/devarno-cloud.yaml |
| rocky-hq | rocky-hq/rocky#17 | 1a593bc99ac2 | state/rocky-hq.yaml |
| eva-hq | eva-hq/eva#4 | (recomputes after fix PR #5) | (deferred) |
Each contract validates against
contracts/contract.schema.json. petrova doctor --self-check is ok.
petrova doctor --commit-state ran successfully for 5 of 6 slugs.
Deferral
Section titled “Deferral”eva-hq’s eva.not_applicable_reason exceeded the 200-character
state.schema.json#probe_history.detail cap, causing
petrova doctor --commit-state to refuse writing
state/eva-hq.yaml. Trimmed in eva-hq fix PR #5; once that merges,
write state/eva-hq.yaml and add the corresponding contract_sha
to registry.yaml.
Findings closed
Section titled “Findings closed”- F-4 (blocker for Phase 1 close, originally in
20260506-1500-rocky-eva-realignment-verify-round.md): governed repos lacked.petrova/contract.yaml. Closed for 5 of 6 slugs; eva-hq deferred behind PR #5.
Findings opened
Section titled “Findings opened”- F-9 (advisory):
state.schema.json#probe_history.detailmaxLength=200 is propagated from contractnot_applicable_reasonfields. Long reason fields silently produce refuse-to-write errors. Disposition options: (a) raise the cap to 400 to match common decision-doc cite lengths, (b) truncate-and-warn instate.ts/writeState, (c) lint the cap at contract-load time so the error surfaces earlier and points at the consumer’s contract, not the spine. Option (c) is cheapest and most operator-friendly; recommend a small follow-up PR. - F-10 (advisory):
petrova doctor --commit-stateshould not silently skip a slug on validation failure — it should set a non-zero exit code aggregated across the loop. Currently a partial-failure run looks identical to a clean run if you only inspect the last line of stdout. Recommend wrapping the per-slug loop in a result aggregator.
Production-readiness — current state
Section titled “Production-readiness — current state”- Schemas accept new key set; legacy probe_history retained.
- CLI 158/158 tests, build clean, doctor self-check ok.
- All 8 governed repos have either a contract or a pending-fix-PR (eva-hq).
- State files committed for 5 of 6 newly-bootstrapped slugs.
- Registry contract_sha values populated for the same 5 slugs.
- eva-hq fix (PR #5) merge → state file + contract_sha entry.
- grace-hq Wave 1 flip (grace-hq/grace#23) merge → state refresh.
- traceo-mcp-server (slug exists in registry; the local clone is
traceo-cat/, owned externally — defer to maintainer).
Sub-project G context (next)
Section titled “Sub-project G context (next)”rocky-hq and eva-hq now have contracts but the upstream eva evidence
shape in contract.schema.json#integration_eva is provisional. Sub-project G
(rocky-hq + eva-hq surface ratification) is the design work to harden
those shapes. Out of scope here; lives in those repos.