Public: anyone can read this; nobody can change it.

[ROADMAP] First Client Deploy β†’ Governance β€” tracker #47

open waiting for someone opened this view on origin
opened this view on origin

πŸ“ Status 2026-07-06: roadmap executed and shipped (0.7.6 train on prod, nightly gate green, reseed automated). Still open: Enforce flips #42/#43 (+#41 cosign keys), HYB-2 #35 + GATE #46 acceptance, design PR #48 (#36) β€” all labeled operator-decision. Full state: see the 2026-07-06 comment below.

First Client Deploy β†’ Governance β€” the roadmap tracker. All items are goal issues under the Client Deploy β†’ Governance Roadmap milestone, carrying native blockedBy dependencies. Two horizons; waves are seam-serialized so parallel agents don't collide on bin/germinate/bin/lib.sh, mcp/src/server.ts (overlay renderer), or the gitops root kustomization.

Async substrate (start now, non-blocking)

  • #21 CI-1 β€” cold-start CI (Forgejo Actions + vcluster). Merges to main when robust; then everything validates through it.

Horizon 1 β€” Client-Deployable MVP (deploy tomorrow)

WaveIssues
M1#22 SPINE-2 Β· #24 DOM-1a
M2#23 SPINE-3
M3#25 HYB-1
M4#26 SEC-1
M5#27 SPINE-4 β†’ ship to client's VPS

Horizon 2 β€” Governance (overlaps H1 where seams allow)

WaveIssues
G1#28 RBAC-1 Β· #44 SEC-2
G2#34 DOM-1b Β· #38 POL-0 Β· #33 RBAC-7
G3#29 RBAC-2 Β· #39 POL-1
G4#30 RBAC-3 Β· #31 RBAC-4 Β· #40 POL-2 Β· #41 POL-3
G5#37 DOM-2 Β· #32 RBAC-5 Β· #42 POL-4 Β· #43 POL-5 Β· #45 SEC-3
G6#46 GATE β€” full multi-primitive acceptance on a VPS granddaughter

Backlog

  • #36 HYB-3 β€” OpenTofu multi-cloud substrate (design only)
  • BYO IdP (Entra/OIDC) β€” revisit when the client needs corporate SSO

Critical path (to GATE): DOM-1a β†’ DOM-1b β†’ RBAC-2 β†’ RBAC-4 β†’ DOM-2 β†’ POL-4/POL-5 β†’ GATE (RBAC-1 gates the RBAC chain). The MVP path (SPINE-2 β†’ SPINE-3 β†’ HYB-1 β†’ SEC-1, DOM-1a in parallel) ships far earlier.

Each goal issue is written for an autonomous agent that may recurse into its own subagent team. Seam rule: land on a shared seam by rebase; don't start a seam position until the prior one merges.

commented

Status reconciliation β€” 2026-07-01

Verified wave-by-wave against merged PRs on plat/{mitosis,gitops,agents,mcp,_app-template} and issue states, plus today's wb-gate E2E on a fresh plat.local daughter. Legend: DONE = merged + issue closed Β· LANDED/open = code merged, issue open (Audit-mode caveat or acceptance formality outstanding) Β· PARTIAL Β· IN-FLIGHT Β· NOT STARTED.

WaveItemStatusEvidence
M0#21 CI-1NOT STARTEDno Actions harness merged anywhere; still the biggest lever
M1#22 SPINE-2LANDED/open#19 closed, seed PR #20 merged (superseded by #56, #61); the formal 10-consecutive-cold-start acceptance was never recorded
M1#24 DOM-1aDONEplat/gitops#3 + #53 (per-daughter CF token reseal); production TLS proven on the real product-garden.com VPS
M2#23 SPINE-3DONEPR #18 (credential-boundary provisioning)
M3#25 HYB-1DONEPR #51 (bare-k3s two-step + tunnel cutover)
M4#26 SEC-1DONEPR #52 (age-key backup/rotation + runbook)
M5#27 SPINE-4OPENtoday's wb-gate daughter proved hardened-main E2E, but nothing long-lived is kept running as staging β€” the deliverable is unmet
G1#28 RBAC-1 Β· #44 SEC-2DONEplat/mcp#5 Β· plat/mcp#4 + plat/_app-template#2
G2#34 DOM-1b Β· #33 RBAC-7DONEplat/mcp#6 (v0.24.0) Β· PR #55 (design)
G2#38 POL-0LANDED/opendesign merged in PR #49; issue never closed
G3#29 RBAC-2DONEplat/mcp#7 (forwardAuth + middleware)
G3#39 POL-1LANDED/openplat/gitops#4 merged; proven live today β€” germinate deploys kyverno + kyverno-policies among 10/10 Kustomizations first-try
G4#30 RBAC-3 Β· #31 RBAC-4DONEplat/_app-template#3 Β· plat/agents#8 + plat/mcp#9
G4#40 POL-2 Β· #41 POL-3LANDED/openplat/gitops#6 + plat/mcp#8 (overlay trimmed) Β· plat/gitops#8 + plat/_app-template#4/#6 (conditional cosign, carried by the #61 seed)
G5#32 RBAC-5 Β· #45 SEC-3DONEplat/agents#9 + #58 (HMAC seal) Β· PR #54
G5#37 DOM-2PARTIAL (closed)plat/mcp#10 FQDN-egress renderer merged default-off; CNI swap NO-GO (evidence PR #59, closed unmerged) β†’ prerequisite tracked in #60; #13 stays open behind it
G5#42 POL-4 Β· #43 POL-5LANDED/openplat/gitops#7/#9 merged β€” all 12 ClusterPolicies live but 100% Audit + namespaceSelector plat.sh/app (intentional); the Enforce flip + acceptance is the remaining scope
G6#46 GATEPARTIALlocal-equivalent gate PASSED today on a fresh daughter (all 5 primitives, see the GATE-PASSED comment on #46); the unattended VPS depth-2/3 run remains β€” blocked on HYB-2 + CI-1
β€”#35 HYB-2UNBLOCKED, needs operator goDigitalOcean token + Cloudflare tunnel token now in hand; costs real money
β€”#36 HYB-3IN-FLIGHTdesign PR #48 open

Shipped today (wb-gate arc, PR #61 + seed): fresh daughter germination activates the WHOLE whiteboard first-try β€” 10/10 Flux Kustomizations incl. kyverno + kyverno-policies, 12 ClusterPolicies (Audit); full E2E on a fresh plat.local daughter: template β†’ agent build β†’ browser review β†’ auto-merge β†’ prod 200 (pulse).

Found today (issues + fixes in flight): #63 duplicate system webhook every dispatcher boot (fix: plat/agents#10) Β· #57 root-caused β€” reviewer probe used loopback from inside the pod, ~10-min spurious fallback (fix: plat/agents#11) Β· #64 port-80 serves Forgejo in cleartext (first fix failed validation; rework running on plat/gitops fix/web-entrypoint-https-redirect) Β· #62 depth-2 reseed, delivered as PR #65.

Next horizon (proposed order)

  1. agents 0.7.6 release train β€” #66. Merge plat/agents#10 + #11 β†’ tag v0.7.6 β†’ gitops pin bump β†’ genesis reseed (follow-up to PR #65). Cheap, mechanical, retires #63/#57.
  2. Land the #64 rework and fold it into the same pin/seed window β€” one reseed instead of two.
  3. GATE regression assertions β€” #67. Today's two failure modes both self-heal, so a naive E2E passes while degraded; add exactly-one-webhook-after-restart + no-fallback reviewer liveness to the #21/#46 assertion set.
  4. The fork in the road (operator decision): #35 HYB-2 vs #21 CI-1. HYB-2 is materially unblocked (DO + tunnel tokens in hand) and retires the real-infra unknown early, but spends money and needs the operator's go. CI-1 spends only time and is what makes GATE unattended-repeatable β€” #46 explicitly extends the CI-1 harness. They share no seams, so with budget they can run in parallel; if serialized, CI-1 first keeps the capstone honest, HYB-2 first buys the earliest client-shaped proof.
  5. Governance tail after the train: POL Enforce flip (#42/#43 remaining scope), #38/#39/#40/#41 issue closure on acceptance evidence, #60 Cilium prerequisite (then flip PLAT_FQDN_EGRESS=1 and #13 closes), then the full #46 VPS gate.

Additive reconciliation only β€” no issues were closed or edited; owners of the LANDED/open rows should close on their own acceptance evidence.

commented

Tracker refresh (release engineering lane): 0.7.6 train SHIPPED to prod (agents v0.7.6 = #57+#63+#11 fixes; gitops = #64 redirect + #60-prereq hostNetwork mirror; genesis seed = released train β€” depth-2+ carry everything). CI-1 (#21) DELIVERED + proven: repo-scoped vxrail runner + coldstart workflow + shared gate script; germinate-touching PRs now auto-validate on a fresh platform (first consumer: #70's PR #72, gate running as this is written). Closed this cycle: #11 #21 #57 #62 #63 #64 (+#2 #15 #38 from the hygiene sweep). Two release-blockers were found BY the RC validation process and fixed same-day (germinate pre-release regex; caddy file-caps EPERM) β€” the strongest evidence yet for gate-everything. Open decisions for the operator: close-proposals #39/#22/#3; HYB-2 (#35, spends money) vs governance tail (POL Enforce flips #42/#43); #67's reviewer-fallback assertion needs the nightly app-E2E gate variant (sealed credential).

commented

Board cleanup + full status β€” 2026-07-06

Shipped and live. Prod runs the 0.7.6 train (pod images verified today: agents 0.7.6, mcp 0.26.0). Genesis seed = r29, produced and merged by the automated reseed pipeline (#14). Fresh germinations activate the whole whiteboard (Kyverno + baselines, letsencrypt, cosign-signing, forwardAuth, webhook HMAC, credential boundary, fork genealogy).

Automation is green unattended. Nightly coldstart gate 4-for-4 since the train shipped (runs 33–36, 07-03β†’07-06, ~18 min each, incl. app-E2E). Reseed pipeline opened+merged r25/r29 with the no-op guard working (r27 correctly dropped). Nightly prod backups fresh through 2026-07-06 03:35.

Closed in this cleanup (all verified delivered): #3 self-serve domains (DOM-1b mcp v0.24.0 + DOM-1a, proven on product-garden.com) Β· #39 POL-1 Kyverno landed (gitops#4, 12 ClusterPolicies live) Β· #40 POL-2 generate-migration (gitops#6 + mcp#8, drift-heal proven, depth-2 evidence) Β· #69 canary epic (7/7 probes, superseded by the nightly E2E gate).

Remaining β€” operator decisions (label operator-decision):

  • #42 / #43 β€” flip Kyverno Auditβ†’Enforce: merge plat/gitops#14, run the ENFORCE.md checklist.
  • #41 β€” cosign key custody (generate+seal keypair; verifyImages is a placeholder until then).
  • #35 HYB-2 β€” real-VPS granddaughter run (spends money).
  • #46 GATE β€” accept the assembled depth-2/vxrail evidence, or run the literal unattended VPS capstone (pairs with #35).
  • #36 β€” review/merge design PR #48 (OpenTofu substrate contract).

Remaining β€” implementation work:

  • #6 Grafana: PR #8 is conflicted against the post-#61 trim_gitops_lean rewrite β€” needs re-threading, plus the unmerged gitops branch.
  • #7 agent-work: plat/agents#2 is stale against the 0.7.6 dispatcher β€” rebase or redo.
  • #17 live transcripts: heartbeat v1 shipped; full SSE/SPA version awaits owner decisions 1–3.
  • #60 β†’ #13 Cilium: run the CNI swap on a disposable germination, then flip PLAT_FQDN_EGRESS and tighten the 443/80 default.
  • #4 / #5: designs ride open PR #9.

Open PR queue: mitosis #8 (conflicted), #9 (design record β€” the Vault secrets doc is superseded by the shipped Forgejo-native approach), #10 (vision docs, clean merge), #48 (clean merge, closes #36) Β· plat/gitops#14 (Enforce flip) Β· plat/agents#2 (stale).

Standing security item: seal a fresh E2E_CLAUDE_TOKEN β€” the staged copy is still the 2026-07-01 compromised value.

Anomaly noted today: two forgejo-runner job pods in Error on k3d-staging (platform services all healthy) β€” worth a look.

Sign in to join this conversation.

↑↓ navigate ↡ open βŒ˜β†΅ its app esc close

Keyboard shortcuts

Docs