Skip to content

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)

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.

Open sub-project G = “rocky-hq + eva-hq surface ratification” with the following structure:

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_endpoint const "/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.md for the surface bits.

Owner: rocky-hq’s design track. petrova-hq accepts whatever rocky-hq ratifies.

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_endpoint is required and must be reachable by the probe. eva_service_id becomes 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_eva collapses to not_applicable-by-design and the schema removes the evidence shape entirely (just a status field). Every consumer’s eva: not_applicable becomes 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_id
    • eva_endpoint model 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.

Once G.1 and G.2 land their consumer-side decisions, this petrova-hq sub-project closes with:

  1. A consolidated decision doc here describing the ratified shapes.
  2. Schema edits to contracts/contract.schema.json#integration_rocky and #integration_eva reflecting the ratified shapes.
  3. Probe updates if endpoints moved (cli/src/probes/rocky.ts, cli/src/probes/eva.ts).
  4. Per-consumer contract refreshes: any repo currently declaring rocky: pending or eva: not_applicable may 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.
  5. Findings closure entry citing sub-project F’s deferred eva note.
  • 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.

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).

  • 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.
  • 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)
  • Subagent: petrova-control-plane (2026-05-06)
  • Human: pending