feat(control-room): add fail-closed release control plane #125

Merged
janpeter merged 75 commits from codex/ops-control-room-task5-completion into main 2026-08-01 15:15:53 +02:00
Owner

Summary

  • add the durable single-host Ops Control Room foundation, authoritative journal/evidence handling, resource leases and recovery semantics
  • add authenticated operator resolution, durable Postgres projection, reconnecting SSE and bounded evidence APIs
  • close replay, pagination, post-mutation and redaction failure modes found during independent review

Reviewed design and plan

Scrum4Me provenance

  • Sprint S-2026-07-29-1 (cms69x5dk004jx617fviyb3pa)
  • PBI PBI-13 (cms69xcmy004kx6172qwa9k70)
  • Story ST-026 (cms69xmve004mx6176hn4lgt6)
  • Task ST-026.8 (cms69yanq004ux617sh16afw2)

Task-8 implementation commits

  • Task 1: dfb4bd8, 22f88cf
  • Task 2: cd9a292, 85008f0, 28f7344
  • Task 3: f743c68, 44a108e
  • Task 4: fb05fe4, 8dfd7f4, 0bc3816
  • Task 5: 29d4070, 7a1965f
  • Task 6: d9c7fc2, 67711ac
  • Task 7 review fixes: 7915927, 8477949, 2c234f8, fbef368, 387108b, 44b8427, 32aa475

Every Critical/Important finding was handled through RED/GREEN and a fresh scoped rereview. The final broad review covered a6409e0..32aa475.

Validation

  • full test suite: 933 passed, 1 platform-specific skip
  • focused Task-8 matrix: 610 passed
  • npm run typecheck
  • npm --prefix ops-agent run check
  • Prisma validate and generate
  • git diff --check
  • clean worktree and conflict-free merge-tree against current origin/main

Safety

No deployment, product activation, public release, max2 mutation or ST-026.9 work has occurred. The max2 ops-agent remains authoritative; Postgres remains a non-secret repairable projection.

## Summary - add the durable single-host Ops Control Room foundation, authoritative journal/evidence handling, resource leases and recovery semantics - add authenticated operator resolution, durable Postgres projection, reconnecting SSE and bounded evidence APIs - close replay, pagination, post-mutation and redaction failure modes found during independent review ## Reviewed design and plan - [Task-8 resolution protocol design](https://git.jp-visser.nl/janpeter/Ops-dashboard/src/commit/32aa475369f83b534d87753814e58b40410e5b14/docs/superpowers/specs/2026-08-01-ops-control-room-task8-resolution-protocol-design.md) - [Active Task-8 implementation plan](https://git.jp-visser.nl/janpeter/Ops-dashboard/src/commit/32aa475369f83b534d87753814e58b40410e5b14/docs/superpowers/plans/2026-08-01-ops-control-room-task8-projection-resolution-implementation-plan.md) - [Parent initial-deploy plan](https://git.jp-visser.nl/janpeter/Ops-dashboard/src/commit/32aa475369f83b534d87753814e58b40410e5b14/docs/superpowers/plans/2026-07-29-ops-control-room-video-editor-initial-deploy-implementation-plan.md) - plan review reached GO after four rounds; final implementation review reached GO with 0 Critical / 0 Important / 0 Minor ## Scrum4Me provenance - Sprint `S-2026-07-29-1` (`cms69x5dk004jx617fviyb3pa`) - PBI `PBI-13` (`cms69xcmy004kx6172qwa9k70`) - Story `ST-026` (`cms69xmve004mx6176hn4lgt6`) - Task `ST-026.8` (`cms69yanq004ux617sh16afw2`) ## Task-8 implementation commits - Task 1: `dfb4bd8`, `22f88cf` - Task 2: `cd9a292`, `85008f0`, `28f7344` - Task 3: `f743c68`, `44a108e` - Task 4: `fb05fe4`, `8dfd7f4`, `0bc3816` - Task 5: `29d4070`, `7a1965f` - Task 6: `d9c7fc2`, `67711ac` - Task 7 review fixes: `7915927`, `8477949`, `2c234f8`, `fbef368`, `387108b`, `44b8427`, `32aa475` Every Critical/Important finding was handled through RED/GREEN and a fresh scoped rereview. The final broad review covered `a6409e0..32aa475`. ## Validation - full test suite: 933 passed, 1 platform-specific skip - focused Task-8 matrix: 610 passed - `npm run typecheck` - `npm --prefix ops-agent run check` - Prisma validate and generate - `git diff --check` - clean worktree and conflict-free merge-tree against current `origin/main` ## Safety No deployment, product activation, public release, max2 mutation or ST-026.9 work has occurred. The max2 ops-agent remains authoritative; Postgres remains a non-secret repairable projection.
fix(control-room): bind replay snapshots to definition
Some checks failed
CI / Root app checks (pull_request) Failing after 4m34s
CI / Ops-agent checks (pull_request) Successful in 36s
CI / Deploy artifact checks (pull_request) Successful in 13s
CI / Docker image build (pull_request) Successful in 1m18s
32aa475369
s4m-codex-reviewer left a comment

Verdict: COMMENT

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • warning — app/api/control-room/runs/route.ts:55 — De accept-route zet elke fout uit target resolution, agent I/O, release-candidate validatie en projectie om naar HTTP 403. Dat maskeert operationele onbeschikbaarheid of release-candidate drift als autorisatiefout, terwijl de Control Room-contracten juist stabiele fail-closed foutpartities gebruiken. Overweeg FRESH_REAUTH_REQUIRED/approval als 403/400 te houden, maar CONTROL_ROOM_UNAVAILABLE als 503 en candidate drift als 409 te retourneren.

Reviewlog

  • Productstandaarden getoetst tegen Ops Control Room docs: agent blijft autoriteit, Postgres is projectie, max2 target resolution is fail-closed, resolution actions vereisen fresh reauth en HMAC-bound server-side operator identity.
  • Geen inline-comments geplaatst.
# Verdict: COMMENT Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - warning — app/api/control-room/runs/route.ts:55 — De accept-route zet elke fout uit target resolution, agent I/O, release-candidate validatie en projectie om naar HTTP 403. Dat maskeert operationele onbeschikbaarheid of release-candidate drift als autorisatiefout, terwijl de Control Room-contracten juist stabiele fail-closed foutpartities gebruiken. Overweeg `FRESH_REAUTH_REQUIRED`/approval als 403/400 te houden, maar `CONTROL_ROOM_UNAVAILABLE` als 503 en candidate drift als 409 te retourneren. ## Reviewlog - Productstandaarden getoetst tegen Ops Control Room docs: agent blijft autoriteit, Postgres is projectie, max2 target resolution is fail-closed, resolution actions vereisen fresh reauth en HMAC-bound server-side operator identity. - Geen inline-comments geplaatst.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Ops-dashboard!125
No description provided.