carlos / platform Public

spec: scope the deploy-credential claim to adoption, not serving

Summary

States that "adopts in seconds" means staged and repointed. Unit-backed
routes (titogo) serve as soon as the unit restarts. Awake exec-backed
instances are not cycled at adoption today and wait for the activator
sweep; that fix and the immediate-handover spec belong to other work.
Agent notes
Fact relayed from the platform session (peer platform-f9) at Paul's
request. I confirmed the two cited symbols exist at main 8d8e4bae
(rootRestartRoute agent.go:3033, ConvergeGrace activator.go:532). The
110-200s measurement is theirs and I did not reproduce it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 34eb7009618797e3bfd7d421249e41811efda084 parent ffc2096
1 file changed, +24 −1
  • docs/superpowers/specs/2026-10-05-deploy-credential-design.md +24 −1

CI cancelled — superseded by a newer push — run details

diff --git a/docs/superpowers/specs/2026-10-05-deploy-credential-design.md b/docs/superpowers/specs/2026-10-05-deploy-credential-design.md
index ea6793f3a..8c872d0ca 100644
--- a/docs/superpowers/specs/2026-10-05-deploy-credential-design.md
+++ b/docs/superpowers/specs/2026-10-05-deploy-credential-design.md
@@ -56,8 +56,30 @@ holds bucket credentials, so the console is their only door.
4. A console rolled back to a build from before this change refuses the new
credential at every door.
+**What "adopts in seconds" means here.** This spec claims adoption: the box
+stages the new version and repoints to it within seconds of the promote. It
+does not claim the new build is serving within seconds.
+
+- For a unit-backed route, which is what titogo's fleet runs on, serving
+ follows adoption as soon as the unit restarts, so #229's goal stands.
+- For an awake exec-backed instance, adoption does not cycle the running
+ process today. On a real box the root adopt pass stages and repoints
+ through `rootRestartRoute` (`internal/host/agent.go:3033`), which cycles
+ no exec child, and the agent then sees the version already current and
+ never calls its own restart. The activator's sweep catches it later: a
+ 30-second tick plus `ConvergeGrace` of 90 seconds
+ (`internal/activator/activator.go:532`). The platform session measured
+ 110 to 200 seconds from ship to serving on the flagship over 3 to 5
+ October.
+
+That gap is being fixed on its own branch by another session, and the
+handover that makes a shipped release reach running instances immediately
+is a separate spec. Neither is part of this one.
+
**Non-goals**
+- Making an adopted release serve sooner on exec-backed instances (above).
+
- Scopes that name pipeline channels (ruling R2).
- Narrowing or changing existing `publish` credentials.
- Expiry on service credentials. Rotate and revoke stay as they are.
@@ -320,7 +342,8 @@ credentials already are, and the mint line records the rungs.
`CARLOS_DEPLOYMENT_BUCKET` (and its AWS role, if nothing else in the
workflow uses it); sets `CARLOS_SERVICE_TOKEN` and
`CARLOS_CONSOLE`. This is a titogo change, tracked on #229.
-5. Confirm on the box that an edge promote adopts within seconds, then
+5. Confirm on the box that an edge promote is adopted (staged and
+ repointed) within seconds, then
remove `carlos-adopt.timer.d/canary-cadence.conf`.
6. Remove the scoped release key and its grant from the runner's secrets.
The grant expires on its own within its 365-day life.