deploy-credential: a rung-scoped deploy credential so CI promotes through the console (#229)
A `deploy` service role with a rung scope (canary, edge, beta; never stable). CI ships, promotes and rolls back through the console with no more authority than a scoped release key, and can run `carlos deploy` (R6). Each deploy promote is signed by a request-local scoped grant, so boxes still verify the rung limit. The scope check runs in the handlers and, authoritatively, inside the release primitives between the pointer read and the conditional write (G1/G2; the in-flight gap accepted, R5). The CLI reads CARLOS_SERVICE_TOKEN with CARLOS_CONSOLE. README and CLI docs point CI at the console; direct-bucket mode is the operator's path. Spec docs/superpowers/specs/2026-10-05-deploy-credential-design.md (rev 5.2, five Astra rounds); plan docs/superpowers/plans/ 2026-10-05-deploy-credential.md. Every task reviewed; Astra whole-branch review fixed and re-reviewed; full gate and CI green on 91026571. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Squashed from design-deploy-credential into main.
38 files changed,
+5630
−77
README.md+22 −6apimode.go+46 −9apimode_test.go+194 −0docs/site/cli.md+8 −2docs/superpowers/plans/2026-10-05-deploy-credential.md+2247 −0docs/superpowers/specs/2026-10-05-deploy-credential-design.md+719 −0docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R1.md+43 −0docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R2.md+34 −0docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R3.md+50 −0docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R4.md+40 −0docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R5.md+10 −0docs/superpowers/specs/CODEX-REVIEW-BRIEF-DEPLOY-CREDENTIAL.md+157 −0e2e_test.go+11 −1internal/console/apicli.go+61 −3internal/console/apiservices.go+42 −3internal/console/authcli.go+13 −13internal/console/authstore.go+10 −3internal/console/deploycred_test.go+154 −0internal/console/deploydoors_test.go+80 −0internal/console/deploymint_test.go+138 −0internal/console/deploymixed_test.go+95 −0internal/console/deployscope.go+170 −0internal/console/deployscope_test.go+181 −0internal/console/deploysign_test.go+251 −0internal/console/server.go+1 −0internal/console/svcpage.go+53 −3internal/console/svcprincipal.go+62 −13internal/console/templates/account_settings.html+5 −2internal/release/authorize.go+14 −0internal/release/authorize_sim_test.go+189 −0internal/release/authorize_test.go+329 −0internal/release/release.go+56 −1internal/svcrole/svcrole.go+8 −2internal/svcrole/svcrole_test.go+20 −0main_test.go+16 −0scopedkeys_e2e_test.go+11 −1services.go+28 −10services_cli_test.go+62 −5
CI passed — run details
README.mdLoading diff…
apimode.goLoading diff…
apimode_test.goLoading diff…
docs/site/cli.mdLoading diff…
docs/superpowers/plans/2026-10-05-deploy-credential.mdLoading diff…
docs/superpowers/specs/2026-10-05-deploy-credential-design.mdLoading diff…
docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R1.mdLoading diff…
docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R2.mdLoading diff…
docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R3.mdLoading diff…
docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R4.mdLoading diff…
docs/superpowers/specs/CODEX-FINDINGS-DEPLOY-CREDENTIAL-R5.mdLoading diff…
docs/superpowers/specs/CODEX-REVIEW-BRIEF-DEPLOY-CREDENTIAL.mdLoading diff…
e2e_test.goLoading diff…
internal/console/apicli.goLoading diff…
internal/console/apiservices.goLoading diff…
internal/console/authcli.goLoading diff…
internal/console/authstore.goLoading diff…
internal/console/deploycred_test.goLoading diff…
internal/console/deploydoors_test.goLoading diff…
internal/console/deploymint_test.goLoading diff…
internal/console/deploymixed_test.goLoading diff…
internal/console/deployscope.goLoading diff…
internal/console/deployscope_test.goLoading diff…
internal/console/deploysign_test.goLoading diff…
internal/console/server.goLoading diff…
internal/console/svcpage.goLoading diff…
internal/console/svcprincipal.goLoading diff…
internal/console/templates/account_settings.htmlLoading diff…
internal/release/authorize.goLoading diff…
internal/release/authorize_sim_test.goLoading diff…
internal/release/authorize_test.goLoading diff…
internal/release/release.goLoading diff…
internal/svcrole/svcrole.goLoading diff…
internal/svcrole/svcrole_test.goLoading diff…
main_test.goLoading diff…
scopedkeys_e2e_test.goLoading diff…
services.goLoading diff…
services_cli_test.goLoading diff…