docs: the migration is three commands, and the third is the console's
README's accounts section now shows carlos accounts migrate followed by console migrate-app, and says why there is a second half: console state is the console's authority, so the carlos binary never opens its database.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 file changed,
+12
−6
README.md+12 −6
diff --git a/README.md b/README.md| index f5477d69a..d31ca528a 100644 |
| --- a/README.md |
| +++ b/README.md |
| @@ -86,12 +86,18 @@ Moving an app is a verb: |
| carlos accounts migrate -app kass -to <sqid> -dry-run # prints the plan |
| carlos accounts migrate -app kass -to <sqid> |
| - |
| -It copies the objects and re-stamps the app's routes. **It never deletes a |
| -legacy object.** Deleting them — and removing the fallback code — is a |
| -separate operator step, gated on verification: every channel pointer must |
| -resolve from the qualified keys with the fallback disabled, and one adopt pass |
| -must be a no-op, first. |
| + console migrate-app -app kass -to <sqid> # on the console's box |
| + |
| +It copies the objects and re-stamps the app's routes. The console keeps its |
| +own app→account row — console state is the console's authority, and the |
| +carlos binary deliberately never opens its database — so `console |
| +migrate-app` completes the move; `carlos accounts migrate` prints that exact |
| +command when it finishes. Both halves are idempotent. |
| + |
| +**It never deletes a legacy object.** Deleting them — and removing the |
| +fallback code — is a separate operator step, gated on verification: every |
| +channel pointer must resolve from the qualified keys with the fallback |
| +disabled, and one adopt pass must be a no-op, first. |
| ## Domains |