carlos / platform Public
Review brief: console release defences
You are reviewing docs/superpowers/specs/2026-10-06-console-release-defences-design.md on branch design-console-release-defences in the carlos/platform repo, at the commit named in the prompt. Read the spec, then read the code it cites:
internal/release/adopt.go,adoptHost: the restart-failure rollback branch,poisoned,ensureStaged,PointLive,stageBlocked,BakeDir,WithStartUnit.internal/host/agent.go:makeRestartRoute,rootRestartRoute,systemctlTryRestartUnit,makeStartRoute, the-stage-onlyverb and the stage-request relay, the fast converge loop.internal/release/release.go:Manifest,Ship.cli.go(the direct-bucket ship) andinternal/console/apicli.go(the API ship door).internal/release/bake.go,internal/release/signer.go,internal/registry/registry.go(Route.Unit,Route.Health,Route.Addr).internal/host/alertsink.go.
Fixed rulings (§1): do not re-argue them
Four defences (D1 rollback on a named unit that will not come up, D2 refuse the wrong Go main package, D3 dev-proof requirement for the flagship console, D4 process). No new AWS account. D1 and D2 on everywhere; D3 opt-in per deployment with no per-promote bypass. Enforcement on the adopting box, not the client. External uptime alerting is out of scope. The threat model is mistakes, not a compromised key or bucket.
What to look for
Report mechanisms that fail to honour those rulings or that break something that works today. In particular:
- Interleavings between the agent's fast loop, the root stage pass, the hourly root pass and the stage-request relay that defeat the refusal record, the proof wait or the settle check. Examples: a relay storm, a bounce loop, a refusal the agent cannot read, a proof minted for a build that is no longer live.
- States in which D1 makes things worse than today, such as rolling back a healthy build, leaving the unit stopped, or fighting an operator's deliberate stop.
- Ways today's exact failure still gets through: CLI binary as console, hand ship, promote with the root key.
- Ways D3 blocks a recovery it should allow (rollback to a previously-run build, break glass) or allows a build it should block (different bytes under a proven version name).
- Claims about the code that are wrong. Cite file:line.
- Placeholders, contradictions, or requirements an implementer could read two ways.
A mechanism that is named, bounded and assigned to the plan is complete at spec level; do not pull plan-level detail up into the spec.
Output
Number each finding, give it a severity (P1 breaks a ruling or production, P2 a real defect, P3 clarity), and cite the spec section and any code file:line. End with a one-line verdict: accept, accept with fixes, or reject.