carlos / platform Public

Console release defences: D1 settle and rollback, D2 wrong-program refusal, D3 opt-in dev proofs (after the 2026-10-06 console outage)

Squashed from design-console-release-defences into main.
Co-Authored-By: Paul Campbell <paul@tito.io>
claude agent, operated by paul@keymail.dev 9e628024ee00acd9be606c90cf2b480f866238f7 parent 3de0b0f
69 files changed, +16350 −121
  • apimode.go +16 −10
  • apimode_test.go +67 −22
  • auth_e2e_test.go +1 −1
  • canary.go +2 −2
  • cli.go +61 −7
  • cli_test.go +92 −0
  • deploy.go +2 −2
  • docs/site/cli.md +39 −0
  • docs/superpowers/plans/2026-10-06-console-release-defences-plan-1-d1.md +1957 −0
  • docs/superpowers/plans/2026-10-06-console-release-defences-plan-2-d2.md +721 −0
  • docs/superpowers/plans/2026-10-06-console-release-defences-plan-3-d3.md +3599 −0
  • docs/superpowers/plans/2026-10-06-console-release-defences-plan-4-d4.md +437 −0
  • docs/superpowers/specs/2026-10-06-console-release-defences-design.md +653 −0
  • docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r2.md +21 −0
  • docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r3.md +14 −0
  • docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r4.md +13 −0
  • docs/superpowers/specs/CODEX-FINDINGS-console-release-defences.md +19 −0
  • docs/superpowers/specs/CODEX-REVIEW-BRIEF-console-release-defences.md +58 −0
  • internal/console/apicli.go +47 −3
  • internal/console/apicli_test.go +165 −0
  • internal/console/pendingflow_test.go +89 −0
  • internal/console/pendinghandlers.go +18 −3
  • internal/host/agent.go +251 −22
  • internal/host/agent_test.go +23 −18
  • internal/host/alertsink.go +90 −0
  • internal/host/converge_adopted_test.go +5 −5
  • internal/host/fileowner_other.go +4 −0
  • internal/host/fileowner_unix.go +10 −0
  • internal/host/metrics_loop.go +7 −0
  • internal/host/proofask.go +187 −0
  • internal/host/proofask_test.go +378 −0
  • internal/host/proofobserve.go +140 −0
  • internal/host/proofobserve_test.go +239 −0
  • internal/host/proofroot.go +294 −0
  • internal/host/proofroot_test.go +440 −0
  • internal/host/proofstatus.go +15 −0
  • internal/host/refusalwatch.go +59 −0
  • internal/host/refusalwatch_test.go +161 −0
  • internal/host/unitsettle.go +314 −0
  • internal/host/unitsettle_test.go +539 −0
  • internal/release/adopt.go +246 −5
  • internal/release/adopt_test.go +136 −0
  • internal/release/healthy.go +118 −0
  • internal/release/healthy_test.go +62 −0
  • internal/release/program.go +178 −0
  • internal/release/program_test.go +344 −0
  • internal/release/programhistory.go +60 −0
  • internal/release/programhistory_test.go +440 −0
  • internal/release/proof.go +255 −0
  • internal/release/proof_test.go +203 −0
  • internal/release/proofgate.go +356 −0
  • internal/release/proofgate_test.go +627 −0
  • internal/release/proofpolicy.go +165 −0
  • internal/release/proofpolicy_test.go +104 −0
  • internal/release/refusal.go +172 −0
  • internal/release/refusal_test.go +86 −0
  • internal/release/release.go +84 −5
  • internal/release/release_test.go +145 −0
  • internal/release/rollback.go +138 −0
  • internal/release/rollback_test.go +486 −0
  • internal/status/contract_test.go +31 −13
  • internal/status/dryrun.go +58 −0
  • internal/status/snapshot.go +47 −1
  • internal/status/status_test.go +95 −0
  • main.go +3 −0
  • mutation_message_test.go +2 −2
  • proof_cli.go +182 −0
  • proof_cli_test.go +149 −0
  • statuslive_test.go +131 −0

CI passed — run details

apimode.go

Loading diff…

apimode_test.go

Loading diff…

auth_e2e_test.go

Loading diff…

canary.go

Loading diff…

cli.go

Loading diff…

cli_test.go

Loading diff…

deploy.go

Loading diff…

docs/site/cli.md

Loading diff…

docs/superpowers/plans/2026-10-06-console-release-defences-plan-1-d1.md

Loading diff…

docs/superpowers/plans/2026-10-06-console-release-defences-plan-2-d2.md

Loading diff…

docs/superpowers/plans/2026-10-06-console-release-defences-plan-3-d3.md

Loading diff…

docs/superpowers/plans/2026-10-06-console-release-defences-plan-4-d4.md

Loading diff…

docs/superpowers/specs/2026-10-06-console-release-defences-design.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r2.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r3.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-console-release-defences-r4.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-console-release-defences.md

Loading diff…

docs/superpowers/specs/CODEX-REVIEW-BRIEF-console-release-defences.md

Loading diff…

internal/console/apicli.go

Loading diff…

internal/console/apicli_test.go

Loading diff…

internal/console/pendingflow_test.go

Loading diff…

internal/console/pendinghandlers.go

Loading diff…

internal/host/agent.go

Loading diff…

internal/host/agent_test.go

Loading diff…

internal/host/alertsink.go

Loading diff…

internal/host/converge_adopted_test.go

Loading diff…

internal/host/fileowner_other.go

Loading diff…

internal/host/fileowner_unix.go

Loading diff…

internal/host/metrics_loop.go

Loading diff…

internal/host/proofask.go

Loading diff…

internal/host/proofask_test.go

Loading diff…

internal/host/proofobserve.go

Loading diff…

internal/host/proofobserve_test.go

Loading diff…

internal/host/proofroot.go

Loading diff…

internal/host/proofroot_test.go

Loading diff…

internal/host/proofstatus.go

Loading diff…

internal/host/refusalwatch.go

Loading diff…

internal/host/refusalwatch_test.go

Loading diff…

internal/host/unitsettle.go

Loading diff…

internal/host/unitsettle_test.go

Loading diff…

internal/release/adopt.go

Loading diff…

internal/release/adopt_test.go

Loading diff…

internal/release/healthy.go

Loading diff…

internal/release/healthy_test.go

Loading diff…

internal/release/program.go

Loading diff…

internal/release/program_test.go

Loading diff…

internal/release/programhistory.go

Loading diff…

internal/release/programhistory_test.go

Loading diff…

internal/release/proof.go

Loading diff…

internal/release/proof_test.go

Loading diff…

internal/release/proofgate.go

Loading diff…

internal/release/proofgate_test.go

Loading diff…

internal/release/proofpolicy.go

Loading diff…

internal/release/proofpolicy_test.go

Loading diff…

internal/release/refusal.go

Loading diff…

internal/release/refusal_test.go

Loading diff…

internal/release/release.go

Loading diff…

internal/release/release_test.go

Loading diff…

internal/release/rollback.go

Loading diff…

internal/release/rollback_test.go

Loading diff…

internal/status/contract_test.go

Loading diff…

internal/status/dryrun.go

Loading diff…

internal/status/snapshot.go

Loading diff…

internal/status/status_test.go

Loading diff…

main.go

Loading diff…

mutation_message_test.go

Loading diff…

proof_cli.go

Loading diff…

proof_cli_test.go

Loading diff…

statuslive_test.go

Loading diff…