| index 5b7e3a1f2..d1485fa5b 100644 |
| --- a/docs/superpowers/specs/2026-10-21-self-serve-offline-moves-design.md |
| +++ b/docs/superpowers/specs/2026-10-21-self-serve-offline-moves-design.md |
| @@ -226,10 +226,12 @@ Tito books the time and calls prepare when it arrives (its sweep's `scheduled` s |
| |
| Platform: |
| 1. Build behind `CARLOS_SELF_SERVE_MOVES`, default off; copy rows pending until Paul's review; census overlay PROPOSED. |
| -2. Release and roll dev, then flagship, then Tito (roll order rule; boxes before consoles). |
| +2. Release and roll dev, then flagship, then Tito (roll order rule; boxes before consoles). Set `CARLOS_SELF_SERVE_MOVES=offline` on the source boxes as well as the console: a box publishes the per-host facts the request door, the estimate and the job's reports judge (the replica's size, the files) only with the switch on, or while it takes part in a queued or staging move. With the switch on the console alone, admission refuses every request as unmeasured. The operator's return reads the same facts from the instance's current box. |
| 3. Rehearse on dev with a Tito-shaped app (key file, store binding, config, custom domain) through Tito's own residency flow against the dev console: forward; cancel in ready; abort by a failed pre-check, by a stop deadline and by a landing failure; a forced post-open failure (the app refuses to start on the target) and its paging, then the operator's return with the runbook; the holding page on a third edge and on a custom domain; two moves on disjoint boxes at once; two queued on one box; the cleanup 24 hours on. |
| 4. Turn the switch on for Tito's console with Paul's go. |
| |
| +Recovery mode, with the switch on or off: a console that starts with any reservation in `control/offline-moves/active.json`, an ordinary operator move's included, or with any open self-serve row, pending release, owed effect or undelivered event in its journal, starts in recovery mode (it also starts there when it cannot read that evidence within 30 seconds). While recovery mode lasts, the three move mutation doors (request, cut, abort) are the self-serve doors, not the legacy doors: any caller but a move-capable instance token gets the move family's 404, a plain instance token included, and a move-capable token cannot prepare a new move while admission is off. The operator's offline doors stay the recovery route. Recovery mode ends at the first tick that reads none of that evidence, so plan an operator move on a console with the switch off knowing that the legacy move mutations answer 404 until the move is finished and its reservations released. |
| + |
| Tito's side (titogo; from titogo-f6's notes of 2026-10-21): |
| 1. An account owner mints a move-capable token; the router's console credential switches to it (one env var, env sync, a router restart). |
| 2. The residency tab shows the estimate from `?estimate=1®ion=` on the confirm page, refuses controld accounts before posting, sends `display_name` and `requested_by`, and reads `last.outcome` and `last.reason` when `state` returns to `none`. |