Merge pull request #295 from carlosframework/console-as-an-app
The console is an app: carlos deploy -app console, and a rollback that leaves the box running. Ten TDD tasks, each reviewed and fixed, then a whole-branch review. Gate run locally against the merge result (there are no GitHub checks any more — .amadan/ci.d is the only CI): make test clean of anything this branch causes, all five cross-compiles green. The fix that matters most is not about the console. Every unit-backed route had this: a failed named-unit restart rolled the symlink back but never STARTED the unit, and try-restart is a no-op on a stopped unit — so the next pass exited 0 and stamped a version over a service that was down. An honest failure became the exact lying header the mechanism exists to prevent. Runbook R0 is done (both boxes surveyed, both stop conditions clear). R1-R8 are owed and start from a clean checkout at this merge commit.
30 files changed,
+6632
−159
apimode.go+42 −11apimode_test.go+11 −11apps.go+89 −11apps_test.go+52 −0cli.go+15 −11cmd/console/main.go+18 −2cmd/console/sdnotify.go+46 −0cmd/console/sdnotify_test.go+65 −0deploy.go+143 −7deploy_test.go+414 −2docs/site/cli.md+10 −0docs/superpowers/plans/2026-08-23-console-as-an-app.md+1992 −0docs/superpowers/specs/2026-08-23-console-as-an-app-design.md+563 −0internal/console/apicli.go+214 −11internal/console/apicli_test.go+105 −1internal/console/apiretention.go+16 −0internal/console/apps_claim_test.go+262 −0internal/console/appsettings.go+50 −0internal/console/controlplane.go+436 −0internal/console/controlplane_test.go+866 −0internal/console/migrate_test.go+73 −0internal/console/ownership.go+27 −0internal/console/server.go+108 −11internal/console/server_test.go+40 −5internal/console/store.go+68 −12internal/console/templates/app_settings.html+35 −1internal/host/agent.go+247 −51internal/host/agent_test.go+253 −2internal/release/adopt.go+136 −10internal/release/adopt_test.go+236 −0
apimode.goLoading diff…
apimode_test.goLoading diff…
apps.goLoading diff…
apps_test.goLoading diff…
cli.goLoading diff…
cmd/console/main.goLoading diff…
cmd/console/sdnotify.goLoading diff…
cmd/console/sdnotify_test.goLoading diff…
deploy.goLoading diff…
deploy_test.goLoading diff…
docs/site/cli.mdLoading diff…
docs/superpowers/plans/2026-08-23-console-as-an-app.mdLoading diff…
docs/superpowers/specs/2026-08-23-console-as-an-app-design.mdLoading diff…
internal/console/apicli.goLoading diff…
internal/console/apicli_test.goLoading diff…
internal/console/apiretention.goLoading diff…
internal/console/apps_claim_test.goLoading diff…
internal/console/appsettings.goLoading diff…
internal/console/controlplane.goLoading diff…
internal/console/controlplane_test.goLoading diff…
internal/console/migrate_test.goLoading diff…
internal/console/ownership.goLoading diff…
internal/console/server.goLoading diff…
internal/console/server_test.goLoading diff…
internal/console/store.goLoading diff…
internal/console/templates/app_settings.htmlLoading diff…
internal/host/agent.goLoading diff…
internal/host/agent_test.goLoading diff…
internal/release/adopt.goLoading diff…
internal/release/adopt_test.goLoading diff…