| index 75f1ada2f..b56d80ec7 100644 |
| --- a/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md |
| +++ b/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md |
| @@ -26,187 +26,187 @@ Columns: id, file, text, status. |
| | M-C11 | move.go | <host> could not start in <to> or in <from>. It is offline. Run carlos move resolve --host <host> --retry once the cause is fixed. | pending | |
| | M-C12 | move.go | Ready to cut. Run carlos move cut --host <host> when you are ready. | pending | |
| | M-C13 | internal/console/apiinstancemove.go | This move has started its cut. It will finish or move back on its own. | pending | |
| -| M-C14 | internal/host/movespass.go | <host> keeps a file this move cannot copy: <path>. Only regular files and folders move. | pending | |
| -| M-C15 | internal/host/movespass.go | <host> keeps more than 256 MiB of files beside its database. Keep large files in object storage. | pending | |
| -| M-C16 | internal/host/movesreport.go | <host> does not answer its readiness path. Declare moves.ready_path for this app. | pending | |
| -| M-C17 | internal/console/apiinstancemove.go | <host> uses private storage. Instances with private storage cannot move yet. | pending | |
| +| M-C14 | internal/host/movesphase1.go | <host> keeps a file this move cannot copy: <path>. Only regular files and folders move. | approved | |
| +| M-C15 | internal/host/movesphase1.go | <host> keeps more than 256 MiB of files beside its database. Keep large files in object storage. | approved | |
| +| M-C16 | internal/host/movesphase1.go | <host> does not answer its readiness path. Declare moves.ready_path for this app. | approved | |
| +| M-C17 | internal/console/apiinstancemove.go | <host> uses private storage. Instances with private storage cannot move yet. | approved | |
| | M-C18 | move.go | This declares <box> lost. Anything <host> wrote on <box> after <time> is lost. Type the host name to confirm. | pending | |
| | M-C19 | internal/console/apiinstances.go | <host> is being moved. Delete it after the move finishes, or abort the move first. | pending | |
| | M-C20 | internal/host/movespaging.go | <box> is running a process for <host> that this move cannot account for. An operator has been paged. | pending | |
| -| M-C21 | internal/console/apiinstancemove.go | <region> has more than one box. Moves between regions with several boxes are not supported yet. | pending | |
| +| M-C21 | internal/console/apiinstancemove.go | <region> has more than one box. Moves between regions with several boxes are not supported yet. | approved | |
| | M-C22 | move.go | <host> is waiting for a box in <region>. Its last box was terminated before the move finished. Its data up to the last completed upload is kept in <region>. It will start when a box joins the region, and any writes after that upload will be reported then. | pending | |
| |
| ## Plan 1 |
| |
| | id | file | text | status | |
| |---|---|---|---| |
| -| MV-N1 | internal/console/apiinstancemove.go | a home with replicas does not move. remove its replicas first | pending | |
| -| MV-N2 | internal/console/apiinstancemove.go | region <to> is not one of this app's regions: <list> | pending | |
| -| MV-N3 | internal/console/apiinstancemove.go | the instance has no host claim yet. it is adopted on its next reconcile pass | pending | |
| -| MV-N4 | internal/console/apiinstancemove.go | the instance is under a <kind> operation. wait for it to finish | pending | |
| -| MV-N5 | internal/console/apiinstancemove.go | a box in <from> or <to> is below the moves protocol floor. roll the platform first | pending | |
| -| MV-N6 | internal/console/apiinstancemove.go | cut must be "auto" or "manual" | pending | |
| -| MV-N7 | internal/console/apiinstancemove.go | this move was started by an older console and has no id. abort it and request it again | pending | |
| -| MV-N8 | internal/console/apiinstancemove.go | the fleet's edges files could not all be read. try again | pending | |
| -| MV-N9 | internal/host/movesreport.go | the staging lane holds another move's move.json | pending | |
| -| MV-N10 | internal/host/systemapply.go | moves protocol floor: <version> is below <min_release> | pending | |
| +| MV-N1 | internal/console/apiinstancemove.go | a home with replicas does not move. remove its replicas first | approved | |
| +| MV-N2 | internal/console/apiinstancemove.go | region <to> is not one of this app's regions: <list> | approved | |
| +| MV-N3 | internal/console/apiinstancemove.go | the instance has no host claim yet. it is adopted on its next reconcile pass | approved | |
| +| MV-N4 | internal/console/apiinstancemove.go | the instance is under a <kind> operation. wait for it to finish | approved | |
| +| MV-N5 | internal/console/apiinstancemove.go | a box in <from> or <to> is below the moves protocol floor. roll the platform first | approved | |
| +| MV-N6 | internal/console/apiinstancemove.go | cut must be "auto" or "manual" | approved | |
| +| MV-N7 | internal/console/apiinstancemove.go | this move was started by an older console and has no id. abort it and request it again | approved | |
| +| MV-N8 | internal/console/apiinstancemove.go | the fleet's edges files could not all be read. try again | approved | |
| +| MV-N9 | internal/host/movesreport.go | the staging lane holds another move's move.json | approved | |
| +| MV-N10 | internal/host/systemapply.go | moves protocol floor: <version> is below <min_release> | approved | |
| | MV-N11 | internal/console/apiinstancemove.go | declare-lost is not enabled in this deployment yet | pending | |
| -| MV-N12 | internal/provision/provision.go | no journaled move in flight | pending | |
| -| MV-N13 | internal/provision/provision.go | the record's move is <id> for incarnation <incarnation> | pending | |
| -| MV-N14 | internal/provision/provision.go | malformed move start | pending | |
| -| MV-N15 | internal/provision/provision.go | past the point of no return. the cut completes forward or moves back on its own | pending | |
| -| MV-N16 | internal/console/apiinstancemove.go | the instance is already in <region> | pending | |
| -| MV-N17 | internal/console/apiinstancemove.go | could not read the app's instances manifest. try again | pending | |
| -| MV-N18 | internal/console/apiinstancemove.go | could not read this instance's storage binding. try again | pending | |
| -| MV-N19 | internal/console/apiinstancemove.go | this deployment publishes no armed regions. nothing to move to | pending | |
| -| MV-N20 | internal/console/apiinstancemove.go | region <to> cannot take a move in this deployment. it publishes no staging bucket. Regions that can: <list> | pending | |
| -| MV-N21 | internal/console/apiinstancemove.go | moves to the home region are not supported yet. the home publishes no staging lane | pending | |
| -| MV-N22 | internal/console/apiinstancemove.go | could not read the moves protocol floor. try again | pending | |
| -| MV-N23 | internal/console/apiinstancemove.go | no box in <to> publishes an edges file yet | pending | |
| -| MV-N24 | internal/console/apiinstancemove.go | no eligible box in <from> publishes an edges file | pending | |
| -| MV-N25 | internal/console/apiinstancemove.go | the record's identity is malformed | pending | |
| -| MV-N26 | internal/console/apiinstancemove.go | could not read the host claim | pending | |
| -| MV-N27 | internal/console/apiinstancemove.go | the host claim names another incarnation of this instance | pending | |
| -| MV-N28 | internal/console/apiinstancemove.go | the source box <box> is not the eligible box of <from> | pending | |
| -| MV-N29 | internal/console/apiinstancemove.go | could not mint a move id | pending | |
| -| MV-N30 | internal/console/apiinstancemove.go | the instance has unfinished cleanup in <to>. wait for it to finish | pending | |
| -| MV-N31 | internal/console/apiinstancemove.go | the host claim changed under this request. try again | pending | |
| -| MV-N32 | internal/console/apiinstancemove.go | could not write the host claim | pending | |
| -| MV-N33 | internal/console/apiinstancemove.go | could not record the move. try again | pending | |
| -| MV-N34 | internal/console/apiinstancemove.go | could not write the move. try again | pending | |
| -| MV-N35 | internal/console/apiinstancemove.go | nothing to resolve yet | pending | |
| -| MV-N36 | internal/console/apiinstancemove.go | could not confirm whether the move was recorded. read its state before trying again | pending | |
| -| MV-N37 | internal/console/apiinstancemove.go | this console is below the moves protocol floor. roll the console first | pending | |
| -| MV-N38 | internal/console/apiinstancemove.go | the move changed since this request read it. read its state and try again | pending | |
| -| MV-N39 | internal/console/apiinstancemove.go | past the point of no return. the cut completes forward | pending | |
| -| MV-N40 | internal/provision/provision.go | cut is only legal from ready | pending | |
| -| MV-N41 | internal/provision/provision.go | already aborting | pending | |
| -| MV-N42 | internal/provision/provision.go | a move in state "<state>" cannot be aborted | pending | |
| -| MV-N43 | internal/provision/provision.go | a move to <to> is already <state> | pending | |
| -| MV-N44 | internal/provision/provision.go | a <role> does not move. delete it and create one in the new region | pending | |
| -| MV-N45 | internal/provision/provision.go | no move in flight | pending | |
| -| MV-N46 | internal/console/apiinstancemove.go | this move's state does not allow that. read its state and try again | pending | |
| -| MV-N47 | internal/console/apiinstancemove.go | only exec-backed instances move. this route is kind <kind> | pending | |
| -| MV-N48 | internal/console/apiinstancemove.go | an addr-backed route's process is not platform-managed. there is nothing to move | pending | |
| -| MV-N49 | internal/console/apiinstancemove.go | fleet-placed instances keep state-does-not-follow semantics. moves are for platform regions | pending | |
| -| MV-N50 | internal/console/apiinstancemove.go | pooled instances do not move yet. their data lives on the pool's own box | pending | |
| -| MV-N51 | internal/console/apiinstancemove.go | a non-hibernating instance runs outside the activator. nothing manages its data, so nothing can move it | pending | |
| -| MV-N52 | internal/console/apiinstancemove.go | too many instance requests. wait a minute and try again | pending | |
| -| MV-N53 | internal/console/apiinstancemove.go | this console has no deployment bucket, so it cannot answer this | pending | |
| +| MV-N12 | internal/provision/provision.go | no journaled move in flight | approved | |
| +| MV-N13 | internal/provision/provision.go | the record's move is <id> for incarnation <incarnation> | approved | |
| +| MV-N14 | internal/provision/provision.go | malformed move start | approved | |
| +| MV-N15 | internal/provision/provision.go | past the point of no return. the cut completes forward or moves back on its own | approved | |
| +| MV-N16 | internal/console/apiinstancemove.go | the instance is already in <region> | approved | |
| +| MV-N17 | internal/console/apiinstancemove.go | could not read the app's instances manifest. try again | approved | |
| +| MV-N18 | internal/console/apiinstancemove.go | could not read this instance's storage binding. try again | approved | |
| +| MV-N19 | internal/console/apiinstancemove.go | this deployment publishes no armed regions. nothing to move to | approved | |
| +| MV-N20 | internal/console/apiinstancemove.go | region <to> cannot take a move in this deployment. it publishes no staging bucket. Regions that can: <list> | approved | |
| +| MV-N21 | internal/console/apiinstancemove.go | moves to the home region are not supported yet. the home publishes no staging lane | approved | |
| +| MV-N22 | internal/console/apiinstancemove.go | could not read the moves protocol floor. try again | approved | |
| +| MV-N23 | internal/console/apiinstancemove.go | no box in <to> publishes an edges file yet | approved | |
| +| MV-N24 | internal/console/apiinstancemove.go | no eligible box in <from> publishes an edges file | approved | |
| +| MV-N25 | internal/console/apiinstancemove.go | the record's identity is malformed | approved | |
| +| MV-N26 | internal/console/apiinstancemove.go | could not read the host claim | approved | |
| +| MV-N27 | internal/console/apiinstancemove.go | the host claim names another incarnation of this instance | approved | |
| +| MV-N28 | internal/console/apiinstancemove.go | the source box <box> is not the eligible box of <from> | approved | |
| +| MV-N29 | internal/console/apiinstancemove.go | could not mint a move id | approved | |
| +| MV-N30 | internal/console/apiinstancemove.go | the instance has unfinished cleanup in <to>. wait for it to finish | approved | |
| +| MV-N31 | internal/console/apiinstancemove.go | the host claim changed under this request. try again | approved | |
| +| MV-N32 | internal/console/apiinstancemove.go | could not write the host claim | approved | |
| +| MV-N33 | internal/console/apiinstancemove.go | could not record the move. try again | approved | |
| +| MV-N34 | internal/console/apiinstancemove.go | could not write the move. try again | approved | |
| +| MV-N35 | internal/console/apiinstancemove.go | nothing to resolve yet | approved | |
| +| MV-N36 | internal/console/apiinstancemove.go | could not confirm whether the move was recorded. read its state before trying again | approved | |
| +| MV-N37 | internal/console/apiinstancemove.go | this console is below the moves protocol floor. roll the console first | approved | |
| +| MV-N38 | internal/console/apiinstancemove.go | the move changed since this request read it. read its state and try again | approved | |
| +| MV-N39 | internal/console/apiinstancemove.go | past the point of no return. the cut completes forward | approved | |
| +| MV-N40 | internal/provision/provision.go | cut is only legal from ready | approved | |
| +| MV-N41 | internal/provision/provision.go | already aborting | approved | |
| +| MV-N42 | internal/provision/provision.go | a move in state "<state>" cannot be aborted | approved | |
| +| MV-N43 | internal/provision/provision.go | a move to <to> is already <state> | approved | |
| +| MV-N44 | internal/provision/provision.go | a <role> does not move. delete it and create one in the new region | approved | |
| +| MV-N45 | internal/provision/provision.go | no move in flight | approved | |
| +| MV-N46 | internal/console/apiinstancemove.go | this move's state does not allow that. read its state and try again | approved | |
| +| MV-N47 | internal/console/apiinstancemove.go | only exec-backed instances move. this route is kind <kind> | approved | |
| +| MV-N48 | internal/console/apiinstancemove.go | an addr-backed route's process is not platform-managed. there is nothing to move | approved | |
| +| MV-N49 | internal/console/apiinstancemove.go | fleet-placed instances keep state-does-not-follow semantics. moves are for platform regions | approved | |
| +| MV-N50 | internal/console/apiinstancemove.go | pooled instances do not move yet. their data lives on the pool's own box | approved | |
| +| MV-N51 | internal/console/apiinstancemove.go | a non-hibernating instance runs outside the activator. nothing manages its data, so nothing can move it | approved | |
| +| MV-N52 | internal/console/apiinstancemove.go | too many instance requests. wait a minute and try again | approved | |
| +| MV-N53 | internal/console/apiinstancemove.go | this console has no deployment bucket, so it cannot answer this | approved | |
| | MV-N54 | internal/console/apiinstancemove.go | account "<segment>" is ambiguous. pass --account-id with one of: <sqid> ("<name>"), ... | pending | |
| -| MV-N55 | internal/moves/readiness.go | the last round moved <bytes> bytes and the bar is <bytes> | pending | |
| -| MV-N56 | internal/moves/readiness.go | the target has not published a readiness report yet | pending | |
| -| MV-N57 | internal/moves/readiness.go | the target's readiness report is stale | pending | |
| -| MV-N58 | internal/moves/readiness.go | <check> was not reported | pending | |
| -| MV-N59 | internal/moves/readiness.go | <check>: did not pass | pending | |
| -| MV-N60 | internal/moves/readiness.go | T11: the cut budget admits no probe attempt | pending | |
| -| MV-N61 | internal/moves/readiness.go | T11: the cut budget was priced for a final round of <MiB> MiB and the bar is <MiB> MiB | pending | |
| -| MV-N62 | internal/moves/readiness.go | the source has not published a readiness report yet | pending | |
| -| MV-N63 | internal/moves/readiness.go | the source's readiness report is stale | pending | |
| -| MV-N64 | internal/moves/readiness.go | S1: the source did not answer | pending | |
| -| MV-N65 | internal/moves/readiness.go | S2: the source could not confirm its spawn state | pending | |
| -| MV-N66 | internal/moves/readiness.go | the target checked files <digest> and the source now publishes <digest> | pending | |
| -| MV-N67 | internal/moves/readiness.go | the target checked launch environment <digest> and the source now reports <digest> | pending | |
| -| MV-N68 | internal/moves/readiness.go | no fresh rate measurement for <which> | pending | |
| -| MV-N69 | internal/moves/readiness.go | the database size could not be measured | pending | |
| -| MV-N70 | internal/moves/readiness.go | the cut window is not a usable number of seconds | pending | |
| -| MV-N71 | internal/moves/readiness.go | the cut needs about <seconds> seconds with one probe attempt and the window is <seconds> seconds | pending | |
| -| MV-N72 | internal/host/movesreport.go | nested instances cannot move yet | pending | |
| -| MV-N73 | internal/host/movesreport.go | the source has published no archive yet | pending | |
| -| MV-N74 | internal/host/movesreport.go | the host claim has not touched <region> yet | pending | |
| -| MV-N75 | internal/host/movesreport.go | waiting for the root stage pass | pending | |
| -| MV-N76 | internal/host/movesreport.go | the source has not reported its release yet | pending | |
| -| MV-N77 | internal/moves/archive/archive.go | archive: only regular files and directories move: <path> | pending | |
| -| MV-N78 | internal/moves/archive/archive.go | archive: the files directory is over 256 MiB | pending | |
| -| MV-N79 | internal/moves/archive/archive.go | archive: the files directory holds more than 131072 entries | pending | |
| -| MV-N80 | internal/moves/archive/archive.go | archive: a file changed while it was being archived: <path> | pending | |
| -| MV-N81 | internal/moves/archive/archive.go | archive: refused path: <path> is longer than 4096 bytes | pending | |
| -| MV-N82 | internal/moves/readiness.go | T11: the target's report carries a rate that is not a usable number | pending | |
| -| MV-N83 | internal/moves/readiness.go | T11: the target's report claims <n> probe attempts and its measurements admit <n> | pending | |
| -| MV-N84 | internal/moves/readiness.go | the target's readiness report is dated ahead of this clock | pending | |
| -| MV-N85 | internal/moves/readiness.go | the source's readiness report is dated ahead of this clock | pending | |
| -| MV-N86 | internal/moves/archive/archive.go | archive: only regular files and directories move: <path> is a hard link | pending | |
| -| MV-N87 | internal/host/systemapply.go | moves protocol floor: carlos.prev records no version, so it is below <min_release> | pending | |
| -| MV-N88 | internal/host/systemapply.go | moves protocol floor: the floor on this box cannot be read: <error> | pending | |
| -| MV-N89 | internal/host/systemapply.go | a participant in a held operation does not downgrade: <version> is below the running <release> | pending | |
| -| MV-N90 | internal/host/systemapply.go | a participant in a held operation does not downgrade, and the registry cannot say whether this box is one: <error> | pending | |
| -| MV-N91 | internal/host/systemapply.go | a participant in a held operation does not downgrade, and the running release is unknown | pending | |
| -| MV-N92 | internal/host/systemapply.go | moves protocol floor: could not write it on this box: <error> | pending | |
| -| MV-N93 | internal/host/systemapply.go | <refusal>; the root passes paused for the install could not be started again: <error>. the next apply or recovery starts them | pending | |
| -| MV-N94 | internal/host/systemapply.go | <refusal>; the root passes paused for the install could not be started again: <error>, and the retry could not be recorded: <error>. the journal stays for the next recovery | pending | |
| -| MV-N95 | internal/host/systemapply.go | <refusal>; the root passes paused for the restore could not be started again: <error> | pending | |
| -| MV-N96 | internal/activator/backend_exec.go | activator: a host in a move spawns only under strict containment | pending | |
| -| MV-N97 | internal/activator/backend_exec.go | S2: the next spawn of this host is not strict | pending | |
| -| MV-N98 | internal/activator/backend_exec.go | S2: this box has no delegated cgroup subtree, so it cannot spawn strictly | pending | |
| -| MV-N99 | internal/activator/backend_exec.go | S2: this box cannot spawn strictly | pending | |
| -| MV-N100 | internal/release/materializeheld.go | release: this process cannot write the version store, so the root stage pass stages this release | pending | |
| -| MV-N101 | internal/release/materializeheld.go | release: held stage request no longer matches its move | pending | |
| -| MV-N102 | internal/release/materializeheld.go | release: held rows are not staged while CARLOS_HOST_CLAIM is on | pending | |
| -| MV-N103 | internal/appconfig/renderheld.go | config: not a held row of this move | pending | |
| -| MV-N104 | internal/appconfig/renderheld.go | config: held rows are not rendered while CARLOS_HOST_CLAIM is on | pending | |
| -| MV-N105 | internal/host/systemapply.go | moves protocol floor: another writer holds the floor lock on this box; this waits for the next run | pending | |
| -| MV-N106 | internal/host/systemapply.go | <error>; the root passes paused for the restore could not be started again: <error>, and the retry could not be recorded: <error> | pending | |
| -| MV-N107 | internal/host/systemapply.go | <error>; the journal stays: <error> | pending | |
| -| MV-N108 | internal/activator/backend_exec.go | S2: the agent is not placed in its delegated cgroup subtree, so it cannot spawn strictly | pending | |
| -| MV-N109 | internal/activator/backend_exec.go | S2: this host's last strict group has not been cleaned up yet | pending | |
| -| MV-N110 | internal/release/materializeheld.go | release: a held publication needs its authority | pending | |
| -| MV-N111 | internal/activator/backend_exec.go | activator: a strict child of this host is still running in its group | pending | |
| -| MV-N112 | internal/activator/backend_exec.go | activator: this host's last strict group is still being cleaned up | pending | |
| -| MV-N113 | internal/moves/readiness.go | the archive's file count could not be measured | pending | |
| -| MV-N114 | internal/host/movesphase1.go | this deployment has no deployment bucket for the staging lease | pending | |
| -| MV-N115 | internal/host/movesphase1.go | this box has no secrets key, so it cannot report the launch environment or seal the archive | pending | |
| -| MV-N116 | internal/host/movesphase1.go | this box cannot probe the instance yet | pending | |
| -| MV-N117 | internal/host/movesphase1.go | <host> is not an exec-backed instance, so it cannot move | pending | |
| -| MV-N118 | internal/host/movesphase1.go | <host> does not hibernate, so it cannot move | pending | |
| -| MV-N119 | internal/host/movesphase1.go | <host> has a sidecar environment file, so it cannot move | pending | |
| -| MV-N120 | internal/host/movesphase1.go | <host> has <column> set in the registry, so it cannot move | pending | |
| -| MV-N121 | internal/host/movesreport.go | the moves protocol floor could not be read | pending | |
| -| MV-N122 | internal/host/movesreport.go | this box cannot read its own copy of the moves protocol floor | pending | |
| -| MV-N123 | internal/host/movesreport.go | this box has not armed the moves protocol floor yet | pending | |
| -| MV-N124 | internal/host/movesreport.go | this box speaks moves protocol <n>, below the floor's <n> | pending | |
| -| MV-N125 | internal/host/movesreport.go | the console has not published its secrets key fingerprint yet | pending | |
| -| MV-N126 | internal/host/movesreport.go | this box has no secrets key | pending | |
| -| MV-N127 | internal/host/movesreport.go | this box's secrets key is not the console's | pending | |
| -| MV-N128 | internal/host/movesreport.go | this box could not compose the launch environment of the held row | pending | |
| +| MV-N55 | internal/moves/readiness.go | the last round moved <bytes> bytes and the bar is <bytes> | approved | |
| +| MV-N56 | internal/moves/readiness.go | the target has not published a readiness report yet | approved | |
| +| MV-N57 | internal/moves/readiness.go | the target's readiness report is stale | approved | |
| +| MV-N58 | internal/moves/readiness.go | <check> was not reported | approved | |
| +| MV-N59 | internal/moves/readiness.go | <check>: did not pass | approved | |
| +| MV-N60 | internal/moves/readiness.go | T11: the cut budget admits no probe attempt | approved | |
| +| MV-N61 | internal/moves/readiness.go | T11: the cut budget was priced for a final round of <MiB> MiB and the bar is <MiB> MiB | approved | |
| +| MV-N62 | internal/moves/readiness.go | the source has not published a readiness report yet | approved | |
| +| MV-N63 | internal/moves/readiness.go | the source's readiness report is stale | approved | |
| +| MV-N64 | internal/moves/readiness.go | S1: the source did not answer | approved | |
| +| MV-N65 | internal/moves/readiness.go | S2: the source could not confirm its spawn state | approved | |
| +| MV-N66 | internal/moves/readiness.go | the target checked files <digest> and the source now publishes <digest> | approved | |
| +| MV-N67 | internal/moves/readiness.go | the target checked launch environment <digest> and the source now reports <digest> | approved | |
| +| MV-N68 | internal/moves/readiness.go | no fresh rate measurement for <which> | approved | |
| +| MV-N69 | internal/moves/readiness.go | the database size could not be measured | approved | |
| +| MV-N70 | internal/moves/readiness.go | the cut window is not a usable number of seconds | approved | |
| +| MV-N71 | internal/moves/readiness.go | the cut needs about <seconds> seconds with one probe attempt and the window is <seconds> seconds | approved | |
| +| MV-N72 | internal/host/movesphase1.go | nested instances cannot move yet | approved | |
| +| MV-N73 | internal/host/movesreport.go | the source has published no archive yet | approved | |
| +| MV-N74 | internal/host/movesreport.go | the host claim has not touched <region> yet | approved | |
| +| MV-N75 | internal/host/movesreport.go | waiting for the root stage pass | approved | |
| +| MV-N76 | internal/host/movesreport.go | the source has not reported its release yet | approved | |
| +| MV-N77 | internal/moves/archive/archive.go | archive: only regular files and directories move: <path> | approved | |
| +| MV-N78 | internal/moves/archive/archive.go | archive: the files directory is over 256 MiB | approved | |
| +| MV-N79 | internal/host/movesphase1.go | archive: the files directory holds more than 131072 entries | approved | |
| +| MV-N80 | internal/moves/archive/archive.go | archive: a file changed while it was being archived: <path> | approved | |
| +| MV-N81 | internal/host/movesphase1.go | archive: refused path: <path> is longer than 4096 bytes | approved | |
| +| MV-N82 | internal/moves/readiness.go | T11: the target's report carries a rate that is not a usable number | approved | |
| +| MV-N83 | internal/moves/readiness.go | T11: the target's report claims <n> probe attempts and its measurements admit <n> | approved | |
| +| MV-N84 | internal/moves/readiness.go | the target's readiness report is dated ahead of this clock | approved | |
| +| MV-N85 | internal/moves/readiness.go | the source's readiness report is dated ahead of this clock | approved | |
| +| MV-N86 | internal/moves/archive/archive.go | archive: only regular files and directories move: <path> is a hard link | approved | |
| +| MV-N87 | internal/host/systemapply.go | moves protocol floor: carlos.prev records no version, so it is below <min_release> | approved | |
| +| MV-N88 | internal/host/systemapply.go | moves protocol floor: the floor on this box cannot be read: <error> | approved | |
| +| MV-N89 | internal/host/systemapply.go | a participant in a held operation does not downgrade: <version> is below the running <release> | approved | |
| +| MV-N90 | internal/host/systemapply.go | a participant in a held operation does not downgrade, and the registry cannot say whether this box is one: <error> | approved | |
| +| MV-N91 | internal/host/systemapply.go | a participant in a held operation does not downgrade, and the running release is unknown | approved | |
| +| MV-N92 | internal/host/systemapply.go | moves protocol floor: could not write it on this box: <error> | approved | |
| +| MV-N93 | internal/host/systemapply.go | <refusal>; the root passes paused for the install could not be started again: <error>. the next apply or recovery starts them | approved | |
| +| MV-N94 | internal/host/systemapply.go | <refusal>; the root passes paused for the install could not be started again: <error>, and the retry could not be recorded: <error>. the journal stays for the next recovery | approved | |
| +| MV-N95 | internal/host/systemapply.go | <refusal>; the root passes paused for the restore could not be started again: <error> | approved | |
| +| MV-N96 | internal/activator/backend_exec.go | activator: a host in a move spawns only under strict containment | approved | |
| +| MV-N97 | internal/activator/backend_exec.go | S2: the next spawn of this host is not strict | approved | |
| +| MV-N98 | internal/activator/backend_exec.go | S2: this box has no delegated cgroup subtree, so it cannot spawn strictly | approved | |
| +| MV-N99 | internal/activator/backend_exec.go | S2: this box cannot spawn strictly | approved | |
| +| MV-N100 | internal/release/materializeheld.go | release: this process cannot write the version store, so the root stage pass stages this release | approved | |
| +| MV-N101 | internal/release/materializeheld.go | release: held stage request no longer matches its move | approved | |
| +| MV-N102 | internal/release/materializeheld.go | release: held rows are not staged while CARLOS_HOST_CLAIM is on | approved | |
| +| MV-N103 | internal/appconfig/renderheld.go | config: not a held row of this move | approved | |
| +| MV-N104 | internal/appconfig/renderheld.go | config: held rows are not rendered while CARLOS_HOST_CLAIM is on | approved | |
| +| MV-N105 | internal/host/systemapply.go | moves protocol floor: another writer holds the floor lock on this box; this waits for the next run | approved | |
| +| MV-N106 | internal/host/systemapply.go | <error>; the root passes paused for the restore could not be started again: <error>, and the retry could not be recorded: <error> | approved | |
| +| MV-N107 | internal/host/systemapply.go | <error>; the journal stays: <error> | approved | |
| +| MV-N108 | internal/activator/backend_exec.go | S2: the agent is not placed in its delegated cgroup subtree, so it cannot spawn strictly | approved | |
| +| MV-N109 | internal/activator/backend_exec.go | S2: this host's last strict group has not been cleaned up yet | approved | |
| +| MV-N110 | internal/release/materializeheld.go | release: a held publication needs its authority | approved | |
| +| MV-N111 | internal/activator/backend_exec.go | activator: a strict child of this host is still running in its group | approved | |
| +| MV-N112 | internal/activator/backend_exec.go | activator: this host's last strict group is still being cleaned up | approved | |
| +| MV-N113 | internal/moves/readiness.go | the archive's file count could not be measured | approved | |
| +| MV-N114 | internal/host/movesphase1.go | this deployment has no deployment bucket for the staging lease | approved | |
| +| MV-N115 | internal/host/movesphase1.go | this box has no secrets key, so it cannot report the launch environment or seal the archive | approved | |
| +| MV-N116 | internal/host/movesphase1.go | this box cannot probe the instance yet | approved | |
| +| MV-N117 | internal/host/movesphase1.go | <host> is not an exec-backed instance, so it cannot move | approved | |
| +| MV-N118 | internal/host/movesphase1.go | <host> does not hibernate, so it cannot move | approved | |
| +| MV-N119 | internal/host/movesphase1.go | <host> has a sidecar environment file, so it cannot move | approved | |
| +| MV-N120 | internal/host/movesphase1.go | <host> has <column> set in the registry, so it cannot move | approved | |
| +| MV-N121 | internal/host/movesreport.go | the moves protocol floor could not be read | approved | |
| +| MV-N122 | internal/host/movesreport.go | this box cannot read its own copy of the moves protocol floor | approved | |
| +| MV-N123 | internal/host/movesreport.go | this box has not armed the moves protocol floor yet | approved | |
| +| MV-N124 | internal/host/movesreport.go | this box speaks moves protocol <n>, below the floor's <n> | approved | |
| +| MV-N125 | internal/host/movesreport.go | the console has not published its secrets key fingerprint yet | approved | |
| +| MV-N126 | internal/host/movesreport.go | this box has no secrets key | approved | |
| +| MV-N127 | internal/host/movesreport.go | this box's secrets key is not the console's | approved | |
| +| MV-N128 | internal/host/movesreport.go | this box could not compose the launch environment of the held row | approved | |
| | MV-N129 | internal/host/movesreport.go | the launch environment differs from the source's: <NAME (kind)>, ... | pending | |
| -| MV-N130 | internal/host/movesreport.go (a T3 note, not a failure) | <NAME> in the carried .env overrides the rendered configuration | pending | |
| -| MV-N131 | internal/host/movesreport.go (a T3 note for an advisory variable) | <NAME> (<kind>) | pending | |
| -| MV-N132 | internal/host/movesreport.go | the store bound as <PREFIX> did not answer the probe from this box | pending | |
| -| MV-N133 | internal/host/movesreport.go | this box could not read the archive the source published | pending | |
| -| MV-N134 | internal/host/movesreport.go | the archive does not open with this box's key or does not match its manifest | pending | |
| -| MV-N135 | internal/host/movesreport.go | this box could not measure its free disk space | pending | |
| -| MV-N136 | internal/host/movesreport.go | this box needs <GiB> GiB free for the move without filling its disk past 85% | pending | |
| -| MV-N137 | internal/host/movesreport.go | this box could not stage the source's release | pending | |
| -| MV-N138 | internal/host/movesreport.go | no box publishes <region> | pending | |
| -| MV-N139 | internal/host/movesreport.go | <n> boxes publish <region>, and a move needs exactly one | pending | |
| -| MV-N140 | internal/host/movesreport.go | the host claim is not held by this move | pending | |
| -| MV-N141 | internal/host/movesreport.go | the staging lane has no move.json yet | pending | |
| -| MV-N142 | internal/host/movesreport.go | the source region publishes no data bucket | pending | |
| -| MV-N143 | internal/host/movesreport.go | this box cannot write the return lane in the source's bucket | pending | |
| -| MV-N144 | internal/host/movesreport.go | no replica has been staged yet | pending | |
| -| MV-N145 | internal/host/movesreport.go | the instance left <region> recently and can move back after <RFC 3339 time> | pending | |
| +| MV-N130 | internal/host/movesreport.go (a T3 note, not a failure) | <NAME> in the carried .env overrides the rendered configuration | approved | |
| +| MV-N131 | internal/host/movesreport.go (a T3 note for an advisory variable) | <NAME> (<kind>) | approved | |
| +| MV-N132 | internal/host/movesreport.go | the store bound as <PREFIX> did not answer the probe from this box | approved | |
| +| MV-N133 | internal/host/movesreport.go | this box could not read the archive the source published | approved | |
| +| MV-N134 | internal/host/movesreport.go | the archive does not open with this box's key or does not match its manifest | approved | |
| +| MV-N135 | internal/host/movesreport.go | this box could not measure its free disk space | approved | |
| +| MV-N136 | internal/host/movesreport.go | this box needs <GiB> GiB free for the move without filling its disk past 85% | approved | |
| +| MV-N137 | internal/host/movesreport.go | this box could not stage the source's release | approved | |
| +| MV-N138 | internal/host/movesreport.go | no box publishes <region> | approved | |
| +| MV-N139 | internal/host/movesreport.go | <n> boxes publish <region>, and a move needs exactly one | approved | |
| +| MV-N140 | internal/host/movesreport.go | the host claim is not held by this move | approved | |
| +| MV-N141 | internal/host/movesreport.go | the staging lane has no move.json yet | approved | |
| +| MV-N142 | internal/host/movesreport.go | the source region publishes no data bucket | approved | |
| +| MV-N143 | internal/host/movesreport.go | this box cannot write the return lane in the source's bucket | approved | |
| +| MV-N144 | internal/host/movesreport.go | no replica has been staged yet | approved | |
| +| MV-N145 | internal/host/movesreport.go | the instance left <region> recently and can move back after <RFC 3339 time> | approved | |
| | MV-N146 | internal/moves/readiness.go | no fresh rate measurement for the disk's per-file sync (MV-N68 with a new <which>) | pending | |
| -| MV-N147 | internal/console/apiinstancemove.go | invalid region | pending | |
| -| MV-N148 | internal/host/movesphase1.go | the app's readiness path could not be read | pending | |
| -| MV-N149 | internal/moves/readiness.go | the target has not checked a release yet | pending | |
| -| MV-N150 | internal/moves/readiness.go | the target checked release <release> and the source now runs <release> | pending | |
| -| MV-N151 | internal/host/movesphase1.go | the files beside the database could not be archived | pending | |
| -| MV-N152 | internal/moves/readiness.go | the cut budget could not be priced | pending | |
| -| MV-N153 | internal/host/movesreport.go | this box requires a proof for the source's release and has not accepted one | pending | |
| -| MV-N154 | internal/host/movesreport.go | the source staged its archive without a fixed version id | pending | |
| -| MV-N155 | internal/moves/readiness.go | T11: the database has grown to <MiB> MiB since the target priced <MiB> MiB. waiting for the target's next report | pending | |
| -| MV-N156 | internal/console/apiinstancemove.go | the source box is not eligible to move from | pending | |
| -| MV-N157 | internal/console/apiinstancemove.go | could not read the host roster. try again | pending | |
| -| MV-N158 | internal/provision/provision.go | stop evidence budget | pending | |
| -| MV-N159 | internal/stopevidence/reconstruct_linux.go | the instance's processes could not be stopped | pending | |
| -| MV-N160 | internal/stopevidence/reconstruct_linux.go | pid <pid> in the agent's cgroup is not the agent | pending | |
| -| MV-N161 | internal/stopevidence/reconstruct_linux.go | <count> process(es) hold the database open | pending | |
| -| MV-N162 | internal/stopevidence/reconstruct_linux.go | lock.json still held | pending | |
| -| MV-N163 | internal/provision/provision.go | the cut ran past its deadline | pending | |
| -| MV-N164 | internal/provision/provision.go | the final copy kept finding changes at the source | pending | |
| -| MV-N165 | internal/provision/provision.go | the stopped files could not be archived | pending | |
| -| MV-N166 | internal/host/movesphase1.go | <region> has more than one box. Moves between regions with several boxes are not supported yet. | pending | |
| -| MV-N167 | internal/provision/provision.go | the instance keeps its data under a per-incarnation path, which moves cannot cut yet | pending | |
| +| MV-N147 | internal/console/apiinstancemove.go | invalid region | approved | |
| +| MV-N148 | internal/host/movesphase1.go | the app's readiness path could not be read | approved | |
| +| MV-N149 | internal/moves/readiness.go | the target has not checked a release yet | approved | |
| +| MV-N150 | internal/moves/readiness.go | the target checked release <release> and the source now runs <release> | approved | |
| +| MV-N151 | internal/host/movesphase1.go | the files beside the database could not be archived | approved | |
| +| MV-N152 | internal/moves/readiness.go | the cut budget could not be priced | approved | |
| +| MV-N153 | internal/host/movesreport.go | this box requires a proof for the source's release and has not accepted one | approved | |
| +| MV-N154 | internal/host/movesreport.go | the source staged its archive without a fixed version id | approved | |
| +| MV-N155 | internal/moves/readiness.go | T11: the database has grown to <MiB> MiB since the target priced <MiB> MiB. waiting for the target's next report | approved | |
| +| MV-N156 | internal/console/apiinstancemove.go | the source box is not eligible to move from | approved | |
| +| MV-N157 | internal/console/apiinstancemove.go | could not read the host roster. try again | approved | |
| +| MV-N158 | internal/provision/provision.go | stop evidence budget | approved | |
| +| MV-N159 | internal/stopevidence/reconstruct_linux.go | the instance's processes could not be stopped | approved | |
| +| MV-N160 | internal/stopevidence/reconstruct_linux.go | pid <pid> in the agent's cgroup is not the agent | approved | |
| +| MV-N161 | internal/stopevidence/reconstruct_linux.go | <count> process(es) hold the database open | approved | |
| +| MV-N162 | internal/stopevidence/reconstruct_linux.go | lock.json still held | approved | |
| +| MV-N163 | internal/provision/provision.go | the cut ran past its deadline | approved | |
| +| MV-N164 | internal/provision/provision.go | the final copy kept finding changes at the source | approved | |
| +| MV-N165 | internal/provision/provision.go | the stopped files could not be archived | approved | |
| +| MV-N166 | internal/host/movesphase1.go | <region> has more than one box. Moves between regions with several boxes are not supported yet. | approved | |
| +| MV-N167 | internal/provision/provision.go | the instance keeps its data under a per-incarnation path, which moves cannot cut yet | approved | |
| |
| ## Plan 2 |
| |
| @@ -214,20 +214,20 @@ Columns: id, file, text, status. |
| |
| | id | file | text | status | |
| |---|---|---|---| |
| -| MV-N168 | internal/provision/provision.go | configuration changed during the move | pending | |
| -| MV-N169 | internal/provision/provision.go | the landing ran past its deadline | pending | |
| -| MV-N170 | internal/provision/provision.go | this box cannot land a move while host claims are on | pending | |
| -| MV-N171 | internal/provision/provision.go | the landing row is not at the flat path | pending | |
| -| MV-N172 | internal/provision/provision.go | the installed database does not match the build | pending | |
| -| MV-N173 | internal/console/apiinstancemove.go | this app has no host-claim admission yet. try again shortly | pending | |
| -| MV-N174 | internal/console/apiinstancemove.go | could not read this app's admission. try again | pending | |
| -| MV-N175 | internal/console/apiinstancemove.go | another operation holds this app. try again when it finishes | pending | |
| -| MV-N176 | internal/console/apiinstancemove.go | could not register the move. try again | pending | |
| -| MV-N177 | internal/console/apiinstancemove.go | the host roster does not allow this move. the source and target must be active boxes in <from> and <to> | pending | |
| -| MV-N178 | internal/console/apiinstancemove.go | the instance or its boxes changed under this request. read its state and try again | pending | |
| -| MV-N179 | internal/console/apiinstancemove.go | the move could not be recorded and is held until an operator checks the record | pending | |
| -| MV-N180 | internal/provision/provision.go | the files directory already holds files this move did not write | pending | |
| -| MV-N181 | internal/stopevidence/reconstruct_linux.go | <count> process(es) in the agent's cgroup cannot be identified | pending | |
| +| MV-N168 | internal/provision/provision.go | configuration changed during the move | approved | |
| +| MV-N169 | internal/provision/provision.go | the landing ran past its deadline | approved | |
| +| MV-N170 | internal/provision/provision.go | this box cannot land a move while host claims are on | approved | |
| +| MV-N171 | internal/provision/provision.go | the landing row is not at the flat path | approved | |
| +| MV-N172 | internal/provision/provision.go | the installed database does not match the build | approved | |
| +| MV-N173 | internal/console/apiinstancemove.go | this app has no host-claim admission yet. try again shortly | approved | |
| +| MV-N174 | internal/console/apiinstancemove.go | could not read this app's admission. try again | approved | |
| +| MV-N175 | internal/console/apiinstancemove.go | another operation holds this app. try again when it finishes | approved | |
| +| MV-N176 | internal/console/apiinstancemove.go | could not register the move. try again | approved | |
| +| MV-N177 | internal/console/apiinstancemove.go | the host roster does not allow this move. the source and target must be active boxes in <from> and <to> | approved | |
| +| MV-N178 | internal/console/apiinstancemove.go | the instance or its boxes changed under this request. read its state and try again | approved | |
| +| MV-N179 | internal/console/apiinstancemove.go | the move could not be recorded and is held until an operator checks the record | approved | |
| +| MV-N180 | internal/provision/provision.go | the files directory already holds files this move did not write | approved | |
| +| MV-N181 | internal/stopevidence/reconstruct_linux.go | <count> process(es) in the agent's cgroup cannot be identified | approved | |
| |
| ## Plan 3 |
| |
| @@ -235,11 +235,11 @@ Columns: id, file, text, status. |
| |
| | id | file | text | status | |
| |---|---|---|---| |
| -| MV-N182 | internal/provision/provision.go | the probe ran out of attempts | pending | |
| -| MV-N183 | internal/provision/provision.go | the commit came after the deadline | pending | |
| -| MV-N184 | internal/moves/startcheck.go | this box holds another generation of the instance | pending | |
| -| MV-N185 | internal/moves/startcheck.go | the instance's files belong to another generation | pending | |
| -| MV-N186 | internal/moves/startcheck.go | the instance's database belongs to another generation | pending | |
| +| MV-N182 | internal/provision/provision.go | the probe ran out of attempts | approved | |
| +| MV-N183 | internal/provision/provision.go | the commit came after the deadline | approved | |
| +| MV-N184 | internal/moves/startcheck.go | this box holds another generation of the instance | approved | |
| +| MV-N185 | internal/moves/startcheck.go | the instance's files belong to another generation | approved | |
| +| MV-N186 | internal/moves/startcheck.go | the instance's database belongs to another generation | approved | |
| |
| ## Plan 4 |
| |
| @@ -247,19 +247,19 @@ Columns: id, file, text, status. |
| |
| | id | file | text | status | |
| |---|---|---|---| |
| -| MV-N300 | internal/provision/provision.go | the target box was declared lost | pending | |
| -| MV-N301 | internal/provision/provision.go | the source no longer matches what it recorded when it stopped | pending | |
| -| MV-N302 | internal/provision/provision.go | the recovery probe ran out of attempts | pending | |
| -| MV-N303 | internal/provision/provision.go | the source did not answer within 15 minutes of moving back | pending | |
| -| MV-N304 | internal/provision/provision.go | the move has committed. it cannot roll back | pending | |
| -| MV-N305 | internal/provision/provision.go | the move is not stuck. there is nothing to retry | pending | |
| -| MV-N306 | internal/provision/provision.go | the target holds nothing the move still needs. there is nothing to declare lost | pending | |
| -| MV-N307 | internal/provision/provision.go | the files directory holds files the return did not write | pending | |
| -| MV-N308 | internal/provision/provision.go | the returned database does not match the build | pending | |
| -| MV-N309 | internal/provision/provision.go | the source holds files of an installation the return cannot account for | pending | |
| -| MV-N310 | internal/provision/provision.go | the target's stopped database is missing | pending | |
| -| MV-N311 | internal/provision/provision.go | the target changed after it stopped | pending | |
| -| MV-N312 | internal/provision/provision.go | the target's files cannot be archived | pending | |
| +| MV-N300 | internal/provision/provision.go | the target box was declared lost | approved | |
| +| MV-N301 | internal/provision/provision.go | the source no longer matches what it recorded when it stopped | approved | |
| +| MV-N302 | internal/provision/provision.go | the recovery probe ran out of attempts | approved | |
| +| MV-N303 | internal/provision/provision.go | the source did not answer within 15 minutes of moving back | approved | |
| +| MV-N304 | internal/provision/provision.go | the move has committed. it cannot roll back | approved | |
| +| MV-N305 | internal/provision/provision.go | the move is not stuck. there is nothing to retry | approved | |
| +| MV-N306 | internal/provision/provision.go | the target holds nothing the move still needs. there is nothing to declare lost | approved | |
| +| MV-N307 | internal/provision/provision.go | the files directory holds files the return did not write | approved | |
| +| MV-N308 | internal/provision/provision.go | the returned database does not match the build | approved | |
| +| MV-N309 | internal/provision/provision.go | the source holds files of an installation the return cannot account for | approved | |
| +| MV-N310 | internal/provision/provision.go | the target's stopped database is missing | approved | |
| +| MV-N311 | internal/provision/provision.go | the target changed after it stopped | approved | |
| +| MV-N312 | internal/provision/provision.go | the target's files cannot be archived | approved | |
| |
| ## Plan 5 |
| |
| @@ -268,3 +268,26 @@ Columns: id, file, text, status. |
| ## Plan 6 |
| |
| (completed by Plan 6 Task 7) |
| + |
| +## Review of 2026-10-09 |
| + |
| +Paul approved the wording of all 205 rows then pending (M-C1 to M-C22 and MV-N1 to MV-N183), with no edits. 160 are marked approved above: their code already speaks the approved text. |
| + |
| +The other 45 were `pending` only because the copy gate requires an approved row's text to appear in its file. Their wording is approved and final. 24 are now `approved`: their code was brought back to the approved text (18 rows: MV-N12, MV-N13, MV-N14, MV-N15, MV-N40 to MV-N45, MV-N52, MV-N59, MV-N77, MV-N80, MV-N86, MV-N92, MV-N105, MV-N106), or the row's File cell was corrected to the file that says it (6 rows, now `internal/host/movesphase1.go`: M-C14, M-C15, M-C16, MV-N72, MV-N79, MV-N81). |
| + |
| +21 stay `pending`. Each flips to approved, verbatim, in the commit that makes its file speak it. |
| + |
| +Not built yet (18): |
| + |
| +- M-C1 to M-C12, M-C18 and M-C22 (14 rows, `move.go`): the `carlos move` CLI is Plan 6, and no `move.go` exists. |
| +- M-C13 and M-C19 (`internal/console/apiinstancemove.go`, `internal/console/apiinstances.go`): the abort refusal after the cut started and the delete door's refusal during a move. Plan 5 Task 8 lists both as Plan 6 copy; no code says either. |
| +- M-C20 (`internal/host/movespaging.go`): the paging sentence is Plan 5, and no `movespaging.go` exists. |
| +- MV-N11 (`internal/console/apiinstancemove.go`): the declare-lost door is Plan 4 Task 10. `resolve` answers "nothing to resolve yet" to anything but a retry. |
| + |
| +Built, but the gate cannot read the row (3), so the row stays pending until Paul rules on how it is gated: |
| + |
| +- MV-N54: the row ends in a list template, `<sqid> ("<name>"), ...`. The code builds that list at run time (`apicli.go`) and joins it into the sentence, so the sentence is never one literal ending in `, ...`. Making it so would print a literal `...`. |
| +- MV-N129: the same, `<NAME (kind)>, ...`; `t3Differs` in `internal/host/movesreport.go` joins the names it found. |
| +- MV-N146: the row's text carries a note, `(MV-N68 with a new <which>)`. The code says `no fresh rate measurement for the disk's per-file sync` through MV-N68's `NoFreshRate`, which is correct; the note is not a part of any sentence the code could say. |
| + |
| +The 16 rows added after that review (MV-N184 to MV-N186, MV-N300 to MV-N312) were approved by Paul on 2026-10-09 with no edits. |