seeded: the copy deck, approved by Paul
All 116 rows approved unchanged in the copy review of 2026-10-08 (seeded Plan 1 Task 2's review step, done early).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 file changed,
+117
−117
docs/superpowers/plans/2026-10-08-seeded-instances-copy.md+117 −117
diff --git a/docs/superpowers/plans/2026-10-08-seeded-instances-copy.md b/docs/superpowers/plans/2026-10-08-seeded-instances-copy.md| index 733a2e4de..f35ac1522 100644 |
| --- a/docs/superpowers/plans/2026-10-08-seeded-instances-copy.md |
| +++ b/docs/superpowers/plans/2026-10-08-seeded-instances-copy.md |
| @@ -1,4 +1,4 @@ |
| -# Seeded instances: copy deck (pending Paul's review) |
| +# Seeded instances: copy deck (approved by Paul, 2026-10-08) |
| Every user-facing string the seeded-instances series introduces: CLI output |
| and flag help, console refusals, audit details, the reasons a box records on |
| @@ -27,144 +27,144 @@ Columns: id, file, text, status. |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N1 | internal/host/seedsfloor.go | seeds protocol floor: <version> is below <min_release> | pending | |
| -| SD-N2 | internal/console/seedfloor.go | <boxes> in <region> are below the seeds floor. Roll the platform there, then publish the seeds floor again. | pending | |
| -| SD-N3 | internal/console/seedfloor.go | This deployment has no seeds floor yet. An operator publishes it with carlos system seeds-floor publish. | pending | |
| -| SD-N4 | internal/console/seedfloor.go | could not read the seeds floor. Try again. | pending | |
| -| SD-N5 | internal/console/seedfloor.go | could not confirm every box in <region>. Try again in a minute. | pending | |
| -| SD-N6 | internal/console/seedfloor.go | <boxes> in <region> do not run instances nested yet. A seeded instance needs every box there nested. | pending | |
| -| SD-N7 | internal/console/seedfloor.go | <boxes> in <region> run with claim control on. Seeded instances are not supported there yet. | pending | |
| -| SD-N8 | internal/console/seedfloor.go | This console runs with claim control on. Seeded instances are not supported here yet. | pending | |
| -| SD-N9 | internal/console/seedfloor.go | min_release must be a release such as v0.27.0 | pending | |
| -| SD-N10 | internal/console/seedfloor.go | the seeds floor is already <release>. A floor only rises. | pending | |
| -| SD-N11 | system_seeds.go | published the seeds floor at <release>. Every box arms it within the hour. | pending | |
| -| SD-N12 | internal/console/seedfloor.go | published the seeds floor at <release> | pending | |
| -| SD-N13 | system_seeds.go | the first release whose boxes can place a seed, such as v0.27.0 | pending | |
| -| SD-N112 | internal/console/seedfloor.go | could not publish the seeds floor. Try again. | pending | |
| -| SD-N113 | internal/console/seedfloor.go | <region> has more than one box. An import needs a region with one box for now. | pending | |
| +| SD-N1 | internal/host/seedsfloor.go | seeds protocol floor: <version> is below <min_release> | approved | |
| +| SD-N2 | internal/console/seedfloor.go | <boxes> in <region> are below the seeds floor. Roll the platform there, then publish the seeds floor again. | approved | |
| +| SD-N3 | internal/console/seedfloor.go | This deployment has no seeds floor yet. An operator publishes it with carlos system seeds-floor publish. | approved | |
| +| SD-N4 | internal/console/seedfloor.go | could not read the seeds floor. Try again. | approved | |
| +| SD-N5 | internal/console/seedfloor.go | could not confirm every box in <region>. Try again in a minute. | approved | |
| +| SD-N6 | internal/console/seedfloor.go | <boxes> in <region> do not run instances nested yet. A seeded instance needs every box there nested. | approved | |
| +| SD-N7 | internal/console/seedfloor.go | <boxes> in <region> run with claim control on. Seeded instances are not supported there yet. | approved | |
| +| SD-N8 | internal/console/seedfloor.go | This console runs with claim control on. Seeded instances are not supported here yet. | approved | |
| +| SD-N9 | internal/console/seedfloor.go | min_release must be a release such as v0.27.0 | approved | |
| +| SD-N10 | internal/console/seedfloor.go | the seeds floor is already <release>. A floor only rises. | approved | |
| +| SD-N11 | system_seeds.go | published the seeds floor at <release>. Every box arms it within the hour. | approved | |
| +| SD-N12 | internal/console/seedfloor.go | published the seeds floor at <release> | approved | |
| +| SD-N13 | system_seeds.go | the first release whose boxes can place a seed, such as v0.27.0 | approved | |
| +| SD-N112 | internal/console/seedfloor.go | could not publish the seeds floor. Try again. | approved | |
| +| SD-N113 | internal/console/seedfloor.go | <region> has more than one box. An import needs a region with one box for now. | approved | |
| ## Plan 4: placing a seed on first wake |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N14 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot's length or sha256 does not match its record. | pending | |
| -| SD-N15 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot is not a database that passes an integrity check. | pending | |
| -| SD-N16 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot could not be read. The next wake tries again. | pending | |
| -| SD-N17 | internal/activator/seedplace.go | <host> could not start from its seed: this box does not run instances nested. | pending | |
| -| SD-N18 | internal/activator/seedplace.go | <host> could not start from its seed: claim control is on for this box. | pending | |
| -| SD-N19 | internal/activator/seedplace.go | <host> could not start from its seed: it could not be put in place. The next wake tries again. | pending | |
| +| SD-N14 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot's length or sha256 does not match its record. | approved | |
| +| SD-N15 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot is not a database that passes an integrity check. | approved | |
| +| SD-N16 | internal/activator/seedplace.go | <host> could not start from its seed: the snapshot could not be read. The next wake tries again. | approved | |
| +| SD-N17 | internal/activator/seedplace.go | <host> could not start from its seed: this box does not run instances nested. | approved | |
| +| SD-N18 | internal/activator/seedplace.go | <host> could not start from its seed: claim control is on for this box. | approved | |
| +| SD-N19 | internal/activator/seedplace.go | <host> could not start from its seed: it could not be put in place. The next wake tries again. | approved | |
| ## Plan 5: `--from` |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N20 | internal/console/apiinstanceseed.go | no instance <source> in <app>. A copy can only come from an instance of the same app in the same account. | pending | |
| -| SD-N21 | internal/console/apiinstanceseed.go | <source> runs in the pool <pool>, so the platform keeps no replica of it to copy. | pending | |
| -| SD-N22 | internal/console/apiinstanceseed.go | <source> runs on your fleet <fleet>, so the platform keeps no replica of it to copy. | pending | |
| -| SD-N23 | internal/console/apiinstanceseed.go | <source> is not an instance the platform keeps a replica of, so it cannot be copied. | pending | |
| -| SD-N24 | internal/console/apiinstanceseed.go | history before <txid> is no longer kept | pending | |
| -| SD-N25 | internal/console/apiinstanceseed.go | <source> has not replicated anything yet. Wake it once, then try again. | pending | |
| -| SD-N26 | internal/console/apiinstanceseed.go | a copy of <source> would be <size>, over the 4 GiB limit. | pending | |
| -| SD-N27 | internal/console/seedscratch.go | the console has no room for this right now. Try again later. | pending | |
| -| SD-N28 | internal/console/seedscratch.go | another copy or upload is running for <app>. Try again when it finishes. | pending | |
| -| SD-N29 | internal/console/seedscratch.go | the console is already running two copies or uploads. Try again in a few minutes. | pending | |
| -| SD-N30 | internal/console/apiinstanceseed.go | the copy of <source> failed its integrity check, so no instance was created. | pending | |
| -| SD-N31 | internal/console/apiinstanceseed.go | copying <source> took longer than 30 minutes, so no instance was created. | pending | |
| -| SD-N32 | internal/console/apiinstanceseed.go | the copy of <source> grew past its planned size, so it was stopped and no instance was created. | pending | |
| -| SD-N33 | internal/console/apiinstanceseed.go | a seeded instance gets its own environment and an empty store | pending | |
| -| SD-N34 | internal/console/apiinstanceseed.go | environment <env> already has a store (<bucket>). A seeded instance needs a new, empty one. | pending | |
| -| SD-N35 | internal/console/apiinstanceseed.go | a copy stays in its source's region. To run it elsewhere, create it here and then run carlos move. | pending | |
| -| SD-N36 | internal/console/apiinstanceseed.go | a seeded instance is an ordinary instance. Drop --kind, --addr and --role. | pending | |
| -| SD-N37 | internal/console/apiinstanceseed.go | <app> places its instances in a pool or on a fleet, so it cannot take a seeded instance. | pending | |
| -| SD-N38 | internal/console/apiinstanceseed.go | this console has no data bucket set up, so it cannot create a seeded instance. | pending | |
| -| SD-N39 | internal/console/apiinstanceseed.go | could not copy <source>. Nothing was created. Try again. | pending | |
| -| SD-N40 | instances_cli.go | at must be a transaction id, a whole number above 0 | pending | |
| -| SD-N41 | internal/console/apiinstanceseed.go | seeded <host> from <source> at txid <txid> | pending | |
| -| SD-N42 | instances_cli.go | copying <source> into <host>. A large database can take several minutes. | pending | |
| -| SD-N43 | instances_seed.go | seeded from <source> at txid <txid> | pending | |
| -| SD-N44 | instances_cli.go | copy this instance's database into the new one. The source must be an instance of the same app, in this console's region | pending | |
| -| SD-N45 | instances_cli.go | with --from, the transaction id to copy at (default: the latest) | pending | |
| -| SD-N46 | instances_seed.go | copying from <source> | pending | |
| -| SD-N114 | instances_cli.go | SEED | pending | |
| -| SD-N47 | docs/site/cli.md | To start a new instance from a copy of another instance's database, add --from. The copy comes from the source's replica, so the source keeps serving. Both instances belong to the same app and account, and the copy stays in the source's region; run carlos move afterwards to put it somewhere else. The new instance gets its own environment, never the source's, and an empty private store when the app uses one. Add --at with a transaction id to copy an earlier point in the source's history. | pending | |
| +| SD-N20 | internal/console/apiinstanceseed.go | no instance <source> in <app>. A copy can only come from an instance of the same app in the same account. | approved | |
| +| SD-N21 | internal/console/apiinstanceseed.go | <source> runs in the pool <pool>, so the platform keeps no replica of it to copy. | approved | |
| +| SD-N22 | internal/console/apiinstanceseed.go | <source> runs on your fleet <fleet>, so the platform keeps no replica of it to copy. | approved | |
| +| SD-N23 | internal/console/apiinstanceseed.go | <source> is not an instance the platform keeps a replica of, so it cannot be copied. | approved | |
| +| SD-N24 | internal/console/apiinstanceseed.go | history before <txid> is no longer kept | approved | |
| +| SD-N25 | internal/console/apiinstanceseed.go | <source> has not replicated anything yet. Wake it once, then try again. | approved | |
| +| SD-N26 | internal/console/apiinstanceseed.go | a copy of <source> would be <size>, over the 4 GiB limit. | approved | |
| +| SD-N27 | internal/console/seedscratch.go | the console has no room for this right now. Try again later. | approved | |
| +| SD-N28 | internal/console/seedscratch.go | another copy or upload is running for <app>. Try again when it finishes. | approved | |
| +| SD-N29 | internal/console/seedscratch.go | the console is already running two copies or uploads. Try again in a few minutes. | approved | |
| +| SD-N30 | internal/console/apiinstanceseed.go | the copy of <source> failed its integrity check, so no instance was created. | approved | |
| +| SD-N31 | internal/console/apiinstanceseed.go | copying <source> took longer than 30 minutes, so no instance was created. | approved | |
| +| SD-N32 | internal/console/apiinstanceseed.go | the copy of <source> grew past its planned size, so it was stopped and no instance was created. | approved | |
| +| SD-N33 | internal/console/apiinstanceseed.go | a seeded instance gets its own environment and an empty store | approved | |
| +| SD-N34 | internal/console/apiinstanceseed.go | environment <env> already has a store (<bucket>). A seeded instance needs a new, empty one. | approved | |
| +| SD-N35 | internal/console/apiinstanceseed.go | a copy stays in its source's region. To run it elsewhere, create it here and then run carlos move. | approved | |
| +| SD-N36 | internal/console/apiinstanceseed.go | a seeded instance is an ordinary instance. Drop --kind, --addr and --role. | approved | |
| +| SD-N37 | internal/console/apiinstanceseed.go | <app> places its instances in a pool or on a fleet, so it cannot take a seeded instance. | approved | |
| +| SD-N38 | internal/console/apiinstanceseed.go | this console has no data bucket set up, so it cannot create a seeded instance. | approved | |
| +| SD-N39 | internal/console/apiinstanceseed.go | could not copy <source>. Nothing was created. Try again. | approved | |
| +| SD-N40 | instances_cli.go | at must be a transaction id, a whole number above 0 | approved | |
| +| SD-N41 | internal/console/apiinstanceseed.go | seeded <host> from <source> at txid <txid> | approved | |
| +| SD-N42 | instances_cli.go | copying <source> into <host>. A large database can take several minutes. | approved | |
| +| SD-N43 | instances_seed.go | seeded from <source> at txid <txid> | approved | |
| +| SD-N44 | instances_cli.go | copy this instance's database into the new one. The source must be an instance of the same app, in this console's region | approved | |
| +| SD-N45 | instances_cli.go | with --from, the transaction id to copy at (default: the latest) | approved | |
| +| SD-N46 | instances_seed.go | copying from <source> | approved | |
| +| SD-N114 | instances_cli.go | SEED | approved | |
| +| SD-N47 | docs/site/cli.md | To start a new instance from a copy of another instance's database, add --from. The copy comes from the source's replica, so the source keeps serving. Both instances belong to the same app and account, and the copy stays in the source's region; run carlos move afterwards to put it somewhere else. The new instance gets its own environment, never the source's, and an empty private store when the app uses one. Add --at with a transaction id to copy an earlier point in the source's history. | approved | |
| ## Plan 6: the import door |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N48 | internal/console/apiinstanceimport.go | bytes must be more than 0 and at most 4 GiB | pending | |
| -| SD-N49 | internal/console/apiinstanceimport.go | sha256 must be 64 lowercase hex characters | pending | |
| -| SD-N50 | internal/console/apiinstanceimport.go | replaces must name the address the import takes over, as host:port | pending | |
| -| SD-N51 | internal/console/apiinstanceimport.go | the upload does not match the length and sha256 this import began with, so it was not kept. | pending | |
| -| SD-N52 | internal/console/apiinstanceimport.go | the upload is not a database that passes an integrity check, so it was not kept. | pending | |
| -| SD-N53 | internal/console/apiinstanceimport.go | <host> is <state>. It takes an upload only while it waits for one. | pending | |
| -| SD-N54 | internal/console/apiinstanceimport.go | <host> is <state>. Mark it stopped once, after its upload. | pending | |
| -| SD-N55 | internal/console/apiinstanceimport.go | nothing has been verified yet. Send a request with the verify token first, then commit. | pending | |
| -| SD-N56 | internal/console/apiinstanceimport.go | <host> is committed. Delete it with carlos instances delete instead. | pending | |
| -| SD-N57 | internal/console/apiinstanceimport.go | <host> is an import that is not committed. Abort the import instead. | pending | |
| -| SD-N58 | internal/console/apiinstanceimport.go | carlos run is busy on <host>. Wait for it to finish, then abort. | pending | |
| -| SD-N59 | internal/console/apiinstanceimport.go | <host> is not an import. | pending | |
| -| SD-N60 | internal/console/apiinstanceimport.go | <host> changed while this request was made. Read its state with carlos instances list and try again. | pending | |
| -| SD-N61 | internal/console/apiinstanceimport.go | checking the upload took longer than 30 minutes, so it was not kept. | pending | |
| -| SD-N62 | internal/console/apiinstanceimport.go | began an import of <host> over <addr> (<sha12>, <bytes> bytes) | pending | |
| -| SD-N63 | internal/console/apiinstanceimport.go | uploaded the snapshot for <host> | pending | |
| -| SD-N64 | internal/console/apiinstanceimport.go | marked the old process of <host> stopped | pending | |
| -| SD-N65 | internal/console/apiinstanceimport.go | committed the import of <host> | pending | |
| -| SD-N66 | internal/console/apiinstanceimport.go | aborted the import of <host> | pending | |
| -| SD-N67 | internal/console/apiinstanceimport.go | could not store the upload. Try again. | pending | |
| -| SD-N68 | instances_import.go | uploading <file> (<size>) | pending | |
| -| SD-N69 | instances_import.go | uploaded. The old process of <host> is marked stopped, and the box swaps it on its next pass. | pending | |
| -| SD-N70 | instances_import.go | waiting for the box to swap <host> | pending | |
| -| SD-N71 | instances_import.go | swapped. Until it is committed, <host> answers only requests that carry the verify token. | pending | |
| -| SD-N72 | instances_import.go | verify token: <token>. It is shown only this once. | pending | |
| -| SD-N73 | instances_import.go | commit with: carlos instances import commit --app <app> --host <host>. Abort with: carlos instances import abort --app <app> --host <host>. | pending | |
| -| SD-N74 | instances_import.go | verify passed (<status>). Committing. | pending | |
| -| SD-N75 | instances_import.go | committed. <host> is served by the platform now. | pending | |
| -| SD-N76 | instances_import.go | verify failed (<status>). Aborting the import. | pending | |
| -| SD-N77 | instances_import.go | aborted. The box puts the old route of <host> back on its next pass. | pending | |
| -| SD-N78 | instances_import.go | the box refused the import: <reason> | pending | |
| -| SD-N79 | instances_import.go | the box has not swapped <host> after <minutes> minutes. Check carlos instances list, then commit or abort. | pending | |
| -| SD-N80 | instances_import.go | the snapshot to import: a consistent SQLite file taken after the old process stopped | pending | |
| -| SD-N81 | instances_import.go | the address of the route this import takes over, as host:port | pending | |
| -| SD-N82 | instances_import.go | a path to request with the verify token once swapped. A 2xx commits the import, anything else aborts it | pending | |
| -| SD-N83 | instances_seed.go | imported <sha12> | pending | |
| -| SD-N84 | instances_seed.go | import awaiting upload | pending | |
| -| SD-N85 | instances_seed.go | awaiting stop | pending | |
| -| SD-N86 | instances_seed.go | swapped, awaiting verify | pending | |
| -| SD-N87 | instances_seed.go | refused: <reason> | pending | |
| -| SD-N88 | instances_seed.go | aborting | pending | |
| -| SD-N89 | docs/site/cli.md | carlos instances import moves an instance the platform never ran onto the platform. Stop the old process, take a consistent snapshot of its database (VACUUM INTO works), and run the import with the address of the route it replaces. The console checks the file, the box swaps the route on its next pass, and from then until you commit, the host answers only requests that carry the verify token. With --verify, the CLI requests that path with the token and commits on a 2xx or aborts otherwise. Without it, the CLI prints the token and the two commands to finish by hand. Aborting puts the old route back exactly as it was. | pending | |
| -| SD-N90 | instances_import.go | waiting for the box to finish placing the snapshot | pending | |
| -| SD-N115 | internal/console/apiinstanceimport.go | <host> is <state>, so there is nothing to commit. | pending | |
| +| SD-N48 | internal/console/apiinstanceimport.go | bytes must be more than 0 and at most 4 GiB | approved | |
| +| SD-N49 | internal/console/apiinstanceimport.go | sha256 must be 64 lowercase hex characters | approved | |
| +| SD-N50 | internal/console/apiinstanceimport.go | replaces must name the address the import takes over, as host:port | approved | |
| +| SD-N51 | internal/console/apiinstanceimport.go | the upload does not match the length and sha256 this import began with, so it was not kept. | approved | |
| +| SD-N52 | internal/console/apiinstanceimport.go | the upload is not a database that passes an integrity check, so it was not kept. | approved | |
| +| SD-N53 | internal/console/apiinstanceimport.go | <host> is <state>. It takes an upload only while it waits for one. | approved | |
| +| SD-N54 | internal/console/apiinstanceimport.go | <host> is <state>. Mark it stopped once, after its upload. | approved | |
| +| SD-N55 | internal/console/apiinstanceimport.go | nothing has been verified yet. Send a request with the verify token first, then commit. | approved | |
| +| SD-N56 | internal/console/apiinstanceimport.go | <host> is committed. Delete it with carlos instances delete instead. | approved | |
| +| SD-N57 | internal/console/apiinstanceimport.go | <host> is an import that is not committed. Abort the import instead. | approved | |
| +| SD-N58 | internal/console/apiinstanceimport.go | carlos run is busy on <host>. Wait for it to finish, then abort. | approved | |
| +| SD-N59 | internal/console/apiinstanceimport.go | <host> is not an import. | approved | |
| +| SD-N60 | internal/console/apiinstanceimport.go | <host> changed while this request was made. Read its state with carlos instances list and try again. | approved | |
| +| SD-N61 | internal/console/apiinstanceimport.go | checking the upload took longer than 30 minutes, so it was not kept. | approved | |
| +| SD-N62 | internal/console/apiinstanceimport.go | began an import of <host> over <addr> (<sha12>, <bytes> bytes) | approved | |
| +| SD-N63 | internal/console/apiinstanceimport.go | uploaded the snapshot for <host> | approved | |
| +| SD-N64 | internal/console/apiinstanceimport.go | marked the old process of <host> stopped | approved | |
| +| SD-N65 | internal/console/apiinstanceimport.go | committed the import of <host> | approved | |
| +| SD-N66 | internal/console/apiinstanceimport.go | aborted the import of <host> | approved | |
| +| SD-N67 | internal/console/apiinstanceimport.go | could not store the upload. Try again. | approved | |
| +| SD-N68 | instances_import.go | uploading <file> (<size>) | approved | |
| +| SD-N69 | instances_import.go | uploaded. The old process of <host> is marked stopped, and the box swaps it on its next pass. | approved | |
| +| SD-N70 | instances_import.go | waiting for the box to swap <host> | approved | |
| +| SD-N71 | instances_import.go | swapped. Until it is committed, <host> answers only requests that carry the verify token. | approved | |
| +| SD-N72 | instances_import.go | verify token: <token>. It is shown only this once. | approved | |
| +| SD-N73 | instances_import.go | commit with: carlos instances import commit --app <app> --host <host>. Abort with: carlos instances import abort --app <app> --host <host>. | approved | |
| +| SD-N74 | instances_import.go | verify passed (<status>). Committing. | approved | |
| +| SD-N75 | instances_import.go | committed. <host> is served by the platform now. | approved | |
| +| SD-N76 | instances_import.go | verify failed (<status>). Aborting the import. | approved | |
| +| SD-N77 | instances_import.go | aborted. The box puts the old route of <host> back on its next pass. | approved | |
| +| SD-N78 | instances_import.go | the box refused the import: <reason> | approved | |
| +| SD-N79 | instances_import.go | the box has not swapped <host> after <minutes> minutes. Check carlos instances list, then commit or abort. | approved | |
| +| SD-N80 | instances_import.go | the snapshot to import: a consistent SQLite file taken after the old process stopped | approved | |
| +| SD-N81 | instances_import.go | the address of the route this import takes over, as host:port | approved | |
| +| SD-N82 | instances_import.go | a path to request with the verify token once swapped. A 2xx commits the import, anything else aborts it | approved | |
| +| SD-N83 | instances_seed.go | imported <sha12> | approved | |
| +| SD-N84 | instances_seed.go | import awaiting upload | approved | |
| +| SD-N85 | instances_seed.go | awaiting stop | approved | |
| +| SD-N86 | instances_seed.go | swapped, awaiting verify | approved | |
| +| SD-N87 | instances_seed.go | refused: <reason> | approved | |
| +| SD-N88 | instances_seed.go | aborting | approved | |
| +| SD-N89 | docs/site/cli.md | carlos instances import moves an instance the platform never ran onto the platform. Stop the old process, take a consistent snapshot of its database (VACUUM INTO works), and run the import with the address of the route it replaces. The console checks the file, the box swaps the route on its next pass, and from then until you commit, the host answers only requests that carry the verify token. With --verify, the CLI requests that path with the token and commits on a 2xx or aborts otherwise. Without it, the CLI prints the token and the two commands to finish by hand. Aborting puts the old route back exactly as it was. | approved | |
| +| SD-N90 | instances_import.go | waiting for the box to finish placing the snapshot | approved | |
| +| SD-N115 | internal/console/apiinstanceimport.go | <host> is <state>, so there is nothing to commit. | approved | |
| ## Plan 7: the swap and the rollback on the box |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N91 | internal/provision/seedswap.go | there is no route at <host> to replace | pending | |
| -| SD-N92 | internal/provision/seedswap.go | the route's address is <addr>, not <replaces> | pending | |
| -| SD-N93 | internal/provision/seedswap.go | the route belongs to app <app> | pending | |
| -| SD-N94 | internal/provision/seedswap.go | the route is filed under the operator account, and no assignment maps <name> to this app | pending | |
| -| SD-N95 | internal/provision/seedswap.go | the route is filed under another account | pending | |
| -| SD-N96 | internal/provision/seedswap.go | the route is not an address route this import can take over (<what>) | pending | |
| -| SD-N97 | internal/provision/seedswap.go | this box does not run instances nested | pending | |
| -| SD-N98 | internal/provision/seedswap.go | claim control is on for this box | pending | |
| -| SD-N99 | internal/edge/importgate.go | this instance is being imported. Try again in a few seconds. | pending | |
| +| SD-N91 | internal/provision/seedswap.go | there is no route at <host> to replace | approved | |
| +| SD-N92 | internal/provision/seedswap.go | the route's address is <addr>, not <replaces> | approved | |
| +| SD-N93 | internal/provision/seedswap.go | the route belongs to app <app> | approved | |
| +| SD-N94 | internal/provision/seedswap.go | the route is filed under the operator account, and no assignment maps <name> to this app | approved | |
| +| SD-N95 | internal/provision/seedswap.go | the route is filed under another account | approved | |
| +| SD-N96 | internal/provision/seedswap.go | the route is not an address route this import can take over (<what>) | approved | |
| +| SD-N97 | internal/provision/seedswap.go | this box does not run instances nested | approved | |
| +| SD-N98 | internal/provision/seedswap.go | claim control is on for this box | approved | |
| +| SD-N99 | internal/edge/importgate.go | this instance is being imported. Try again in a few seconds. | approved | |
| ## Plan 8: finishing, sweeps, moves and assignments |
| | id | file | text | status | |
| |---|---|---|---| |
| -| SD-N100 | internal/provision/seed.go | wake the instance once before moving it | pending | |
| -| SD-N101 | internal/provision/seed.go | commit or abort the import first | pending | |
| -| SD-N102 | system_legacy_routes.go | assigned the legacy routes named <name> to <account>/<app> | pending | |
| -| SD-N103 | internal/console/apilegacyroutes.go | <name> has an import in flight under its current assignment. Commit or abort it first. | pending | |
| -| SD-N104 | internal/console/apilegacyroutes.go | name must be an app name | pending | |
| -| SD-N105 | internal/console/apilegacyroutes.go | to must be <account>/<app> | pending | |
| -| SD-N106 | internal/console/apilegacyroutes.go | assigned the legacy routes named <name> to <account>/<app> | pending | |
| -| SD-N107 | internal/console/apilegacyroutes.go | could not read the legacy route assignments. Try again. | pending | |
| -| SD-N108 | system_legacy_routes.go | the app name the legacy routes are filed under, in the operator account | pending | |
| -| SD-N109 | system_legacy_routes.go | the account and app they belong to, as <account>/<app> | pending | |
| -| SD-N110 | docs/site/cli.md | carlos system legacy-routes assign says which account and app the routes an operator filed by hand belong to. A route added with carlos add in direct mode is filed under the operator account, so its app name alone does not say whose it is. An import takes over such a route only when an assignment maps its name to the importing app. A name has one assignment, and it cannot change while an import under it is between its swap and its commit. | pending | |
| -| SD-N116 | internal/console/apilegacyroutes.go | could not save the legacy route assignment. Try again. | pending | |
| -| SD-N111 | docs/site/cli.md | carlos system seeds-floor publish sets the first release whose boxes can place a seed. Publish it once every box runs that release. Each box arms it within the hour, and from then on a box never recovers to an older build. Until every box in a region has armed it, carlos instances create --from and carlos instances import refuse there. | pending | |
| +| SD-N100 | internal/provision/seed.go | wake the instance once before moving it | approved | |
| +| SD-N101 | internal/provision/seed.go | commit or abort the import first | approved | |
| +| SD-N102 | system_legacy_routes.go | assigned the legacy routes named <name> to <account>/<app> | approved | |
| +| SD-N103 | internal/console/apilegacyroutes.go | <name> has an import in flight under its current assignment. Commit or abort it first. | approved | |
| +| SD-N104 | internal/console/apilegacyroutes.go | name must be an app name | approved | |
| +| SD-N105 | internal/console/apilegacyroutes.go | to must be <account>/<app> | approved | |
| +| SD-N106 | internal/console/apilegacyroutes.go | assigned the legacy routes named <name> to <account>/<app> | approved | |
| +| SD-N107 | internal/console/apilegacyroutes.go | could not read the legacy route assignments. Try again. | approved | |
| +| SD-N108 | system_legacy_routes.go | the app name the legacy routes are filed under, in the operator account | approved | |
| +| SD-N109 | system_legacy_routes.go | the account and app they belong to, as <account>/<app> | approved | |
| +| SD-N110 | docs/site/cli.md | carlos system legacy-routes assign says which account and app the routes an operator filed by hand belong to. A route added with carlos add in direct mode is filed under the operator account, so its app name alone does not say whose it is. An import takes over such a route only when an assignment maps its name to the importing app. A name has one assignment, and it cannot change while an import under it is between its swap and its commit. | approved | |
| +| SD-N116 | internal/console/apilegacyroutes.go | could not save the legacy route assignment. Try again. | approved | |
| +| SD-N111 | docs/site/cli.md | carlos system seeds-floor publish sets the first release whose boxes can place a seed. Publish it once every box runs that release. Each box arms it within the hour, and from then on a box never recovers to an older build. Until every box in a region has armed it, carlos instances create --from and carlos instances import refuse there. | approved | |