Sub-project G — rocky-hq + eva-hq surface ratification
Date: 2026-05-06 Status: open Supersedes: none — net-new sub-project Superseded-by: docs/decisions/2026-05-08-adopt-eva-consumption-v1.md (G.2 stance only — G.1 + G.3 unaffected)
Context
Section titled “Context”Sub-project F (closed 2026-05-06) bootstrapped consumer contracts for
the eight in-workspace governed repos plus traceo-mcp-server. Two of
those, rocky-hq and eva-hq, were added to the registry on
2026-05-06 as part of the rocky/eva realignment
(docs/decisions/2026-05-06-rocky-ownership-and-eva-introduction.md)
but their upstream surfaces — the contracts that downstream
consumers integrate against — remain provisional in
contracts/contract.schema.json:
"integration_rocky": { "evidence": { "required": ["lore_collection_slug", "cairnet_agent_id"], "properties": { "lore_collection_slug": "...", "cairnet_agent_id": "...", "cairnet_stones_endpoint": "/api/cairn/stones", "emission_rate_30d": "...", "emission_budget_30d": "...", "decay_policy": "..." } }}"integration_eva": { "evidence": { "description": "EVA evidence. Concrete contract surface is published by eva-hq; this shape is provisional and will tighten in a subsequent decision doc.", "required": ["eva_service_id"], "properties": { "eva_service_id": "...", "eva_endpoint": "...", "registered_at": "..." } }}The rocky shape inherits from the pre-rename lore_cairnet
shape — endpoints stay on Pebble per the realignment decision, and
the evidence fields directly model Pebble’s /api/knowledge/repos
and /api/cairn/stones responses. That’s load-bearing today and
correct.
The eva shape is a placeholder. It enumerates plausible fields
(eva_service_id, eva_endpoint, registered_at) but eva-hq has
not yet published what it actually exposes. Sub-project F’s
verify-round noted: “the provisional eva evidence shape … will
tighten in a subsequent decision doc” — that doc is sub-project G.
This sub-project closes the loop. It is design work, not mechanical: the people who own rocky-hq and eva-hq decide what surface they expose to downstream PETROVA consumers, and that decision then ratifies via schema edits here.
Decision
Section titled “Decision”Open sub-project G = “rocky-hq + eva-hq surface ratification” with the following structure:
G.1 — rocky-hq surface
Section titled “G.1 — rocky-hq surface”The current integration_rocky evidence shape models Pebble-fronted
LORE+CAIRNET endpoints. Rocky-hq is the new owner. Open question
for rocky-hq: does ROCKY continue to be Pebble-fronted indefinitely,
or does rocky-hq stand up its own service surface (e.g.
api.rocky.devarno.cloud or similar) that supersedes the Pebble
gateway?
- If yes (Pebble continues to front): no schema change needed. Sub-project G.1 closes with a confirmation decision in rocky-hq’s own decision log + a one-line note here.
- If no (rocky-hq exposes its own surface): schema changes
in
integration_rocky.evidence:- new field naming the rocky service (e.g.
rocky_service_url). - possibly deprecate
cairnet_stones_endpointconst "/api/cairn/stones"if rocky-hq routes elsewhere. - sub-project G.1 ratifies via a decision doc here that supersedes
2026-05-06-rocky-ownership-and-eva-introduction.mdfor the surface bits.
- new field naming the rocky service (e.g.
Owner: rocky-hq’s design track. petrova-hq accepts whatever rocky-hq ratifies.
G.2 — eva-hq surface
Section titled “G.2 — eva-hq surface”eva-hq’s product is a personal prompt library catalog
(per eva-hq/PRODUCT.md). For PETROVA integration purposes, the
question is: what does eva-hq expose that other governed repos
consume?
Plausible answers (pick one):
- Catalog endpoint — eva-hq exposes a stable URL where the
catalog index lives;
eva.evidence.eva_endpointis required and must be reachable by the probe.eva_service_idbecomes the per-consumer key into that catalog (e.g. a namespace). - No consumption surface — eva-hq is single-user, internal,
and no governed repo consumes it. In that case
integration_evacollapses tonot_applicable-by-design and the schema removes the evidence shape entirely (just a status field). Every consumer’seva: not_applicablebecomes the correct steady state, not a transient. - Slug-keyed mirror of rocky — eva-hq exposes prompts to other
repos via something like a Pebble-style call;
eva_service_ideva_endpointmodel that. This is the closest to the current provisional shape.
Owner: eva-hq’s design track. The product orientation
(PRODUCT.md describes a single-user catalog) currently points
at the second option (“no consumption surface”), in which case the
schema simplifies. eva-hq ratifies.
G.3 — schema follow-through
Section titled “G.3 — schema follow-through”Once G.1 and G.2 land their consumer-side decisions, this petrova-hq sub-project closes with:
- A consolidated decision doc here describing the ratified shapes.
- Schema edits to
contracts/contract.schema.json#integration_rockyand#integration_evareflecting the ratified shapes. - Probe updates if endpoints moved (
cli/src/probes/rocky.ts,cli/src/probes/eva.ts). - Per-consumer contract refreshes: any repo currently declaring
rocky: pendingoreva: not_applicablemay need to re-declare if the schema’s required-fields list changes. Likely a new sub-project H = “rocky/eva surface adoption” once the schema firms up; out of scope here. - Findings closure entry citing sub-project F’s deferred eva note.
Alternatives considered
Section titled “Alternatives considered”- Tighten the schema unilaterally now. Rejected: would commit petrova-hq to a surface shape rocky-hq and eva-hq haven’t agreed to. The whole point of a decision-doc lifecycle is that owners ratify their own surfaces.
- Defer indefinitely. Rejected: the provisional eva shape is documented as transient, and finding F-4’s closure flagged it. Leaving it provisional past the next sub-project boundary creates drift between the schema’s stated intent and reality.
Consequences
Section titled “Consequences”For code: none directly in this PR. Schema + probe edits land in G.3 once G.1 and G.2 ratify.
For docs: this decision opens G; G.1 and G.2 are ratified in rocky-hq and eva-hq’s own decision logs; G.3 closes here with the consolidated schema change.
For invariants: MR-7 upheld; ownership is push-down (MR-3 spirit: each repo ratifies its own surface).
Sub-project G closure criteria
Section titled “Sub-project G closure criteria”- G.1 — rocky-hq lands a decision doc choosing its surface stance (Pebble-continues OR own-surface). If own-surface, schema bits drafted.
- G.2 — eva-hq lands a decision doc choosing its surface stance (catalog-endpoint OR no-consumption-surface OR slug-keyed-mirror).
- G.3 — petrova-hq lands a consolidated decision + schema edits + probe updates. Tests still 158/158.
- Findings entry closing the eva-shape provisional note.
References
Section titled “References”- Upstream rocky/eva realignment:
docs/decisions/2026-05-06-rocky-ownership-and-eva-introduction.md - Sub-project F decision:
docs/decisions/2026-05-06-sub-project-f-contract-bootstrap.md - Sub-project F closure:
docs/findings/20260506-1700-sub-project-f-closure.md - Provisional schema shapes:
contracts/contract.schema.json#integration_rocky,#integration_eva - eva-hq product orientation:
eva-hq/PRODUCT.md(single-user catalog) - rocky-hq registry tracking:
rocky-hq/registry.yaml(workspaces table; separate from petrova’s registry)
Sign-off
Section titled “Sign-off”- Subagent: petrova-control-plane (2026-05-06)
- Human: pending