Skip to content

The control-plane decision

On 2026-04-29, after a brainstorming round weighing how to address duplication, cross-repo visibility, and agent-fleet write capability, the operator opened a decision doc proposing PETROVA evolve into a control plane with a thin centre. Eight tasksets executed against that decision; the operator countersigned it later the same day.

This page is the readable companion. The formal record lives at /decisions/2026-04-29-petrova-control-plane/ — it has the alternatives table, the consequences breakdown, and the sign-off block.

Three pains had surfaced concurrently across the petrova line:

  1. Duplication. The same methodology files appearing in every consumer repo and drifting.
  2. No cross-repo visibility. No way to see fleet-wide status.
  3. No agent-fleet write path. KAHN-style fleets could diagnose but had no disciplined way to act.

The trigger for committing to a decision rather than evolving incrementally was that KAHN’s fleets were about to gain write capability. Without an agreed verb layer, they would either bypass MR-7 or stall.

OptionVerdictWhy
Status quo (template line only)RejectedDoesn’t solve duplication; no fleet write path.
Central database (Postgres source-of-truth)RejectedViolates MR-7 (decisions decouple from code) and MR-12 (CLAUDE.md projection breaks). See no central database.
Control plane with thin centreAcceptedCentralises methodology + verbs; leaves project truth in each repo.

PETROVA-HQ centralises:

  • Methodology (META-RULES, agent fleet shape, prompts).
  • Action verb specifications (the 9 verbs in spec/verbs/).
  • The registry of governed repos.
  • Read-only cross-repo aggregation.

Project truth (north-star intent, decisions, milestones) stays in each consumer repo. Every write is PR-emitting, never direct push. Every verb is dry-run by default. Auth is via fine-grained PAT or GitHub App.

Eight tasksets executed:

#Surface added
1Decision doc + registry skeleton
2shared/ namespace + CLAUDE.md.tmpl rewrite
39-verb spec + worked examples + PR-body template
4Read-only CLI
5Write verbs + PR emission + idempotency + auth
6petrova-act + petrova-status Claude Code skills
7KAHN fleet integration contract; kahn-hq registered
8Dashboard + onboarding prompt + operator runbook

The decision was countersigned and closed on 2026-04-29 after all eight tasksets shipped. See tasksets 1–8 for the commit-by-commit history.

The decision is load-bearing precedent. Any future evolution of the verb surface, the registry shape, or the methodology scope requires a new dated decision doc with explicit Supersedes: pointer back to this one.

That includes deferred work in the roadmap: the webhook receiver, the SQLite cache, the web UI dashboard. None of those have been opened yet — the criteria for opening each are listed in future tasksets.