carlos / platform Public

copy gate: rows MV-O237 to MV-O256 (MV-O237 to MV-O242 the plan's Task 8 list, approved by Paul 2026-10-22; the rest pending); Task 8's new files join movesScanFiles

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 9d6c192262687795371380c69ad2f4a63dee929f parent 748525e
2 files changed, +34 −0
  • approved_moves_copy_test.go +9 −0
  • docs/superpowers/plans/2026-10-06-moves-phase1-copy.md +25 −0
diff --git a/approved_moves_copy_test.go b/approved_moves_copy_test.go
index 2740ffd65..2b6e22c35 100644
--- a/approved_moves_copy_test.go
+++ b/approved_moves_copy_test.go
@@ -110,6 +110,8 @@ var movesCopyIDs = []string{
"MV-O190", "MV-O191", "MV-O192", "MV-O193", "MV-O194", "MV-O195", "MV-O196", "MV-O197",
"MV-O198", "MV-O199", "MV-O200", "MV-O201", "MV-O202", "MV-O203", "MV-O204", "MV-O205", "MV-O206", "MV-O207", "MV-O208", "MV-O209", "MV-O210", "MV-O211", "MV-O212", "MV-O213", "MV-O214", "MV-O215", "MV-O216",
"MV-O217", "MV-O218", "MV-O219", "MV-O220", "MV-O221", "MV-O222", "MV-O223", "MV-O224", "MV-O225", "MV-O226", "MV-O227", "MV-O228", "MV-O229", "MV-O230", "MV-O231", "MV-O232", "MV-O233", "MV-O234", "MV-O235", "MV-O236",
+ "MV-O237", "MV-O238", "MV-O239", "MV-O240", "MV-O241", "MV-O242", "MV-O243", "MV-O244", "MV-O245", "MV-O246",
+ "MV-O247", "MV-O248", "MV-O249", "MV-O250", "MV-O251", "MV-O252", "MV-O253", "MV-O254", "MV-O255", "MV-O256",
}
// copyRow is one row of the record. The File cell is the file the sentence is
@@ -1214,6 +1216,13 @@ var movesScanFiles = []string{
"internal/console/selfserve_checks.go",
"internal/console/selfserve_job.go",
"internal/console/testhooks.go",
+ // Self-serve moves plan 2 Task 8: the cut's health check and pages, the
+ // finaliser, the operator's return (console and box).
+ "internal/console/selfserve_health.go",
+ "internal/console/selfserve_pages.go",
+ "internal/console/selfserve_finalise.go",
+ "internal/console/offlinereturn.go",
+ "internal/host/movesoffline_return.go",
"internal/console/claim_runtime.go",
"internal/alerting/alerting.go",
"internal/hostops/move_log_writer.go",
diff --git a/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md b/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md
index d17dfa14c..5fc52ff7e 100644
--- a/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md
+++ b/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md
@@ -771,3 +771,28 @@ The self-serve job's sentences (self-serve moves plan 2 Task 7; `internal/consol
| MV-O234 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 7, approved by Paul 2026-10-22) | another move is in flight | approved |
| MV-O235 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 7, approved by Paul 2026-10-22) | the instance was recreated | approved |
| MV-O236 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 7, approved by Paul 2026-10-22) | waiting for another move on this box | approved |
+
+The self-serve cut, its abort, the finaliser, the pages and the operator's return (self-serve moves plan 2 Task 8). MV-O237 to MV-O242 are the plan's Task 8 copy list, approved by Paul 2026-10-22: the health window's warning (`<region>` the region the account moved to as the console names it, `<n>` the window in whole minutes, rounded up), the abort's detail for a target that did not report its revert (`<label>` the target box's edges label), the return door's refusal and answer (`<id>` the forward move's id, `<region>` the region asked for, `<rec.Region>` the record's region as the console names it), the open door's and the job's refusal of another move's open record (Controller ruling 2), and the return's guarded write (the brief's Interfaces text). MV-O243 to MV-O245 are the three target facts Task 7 left unchecked (Controller ruling 6), and MV-O246 the return door's live link refusal (the box's own detail is not repeated at an operator door): pending Paul's review. MV-O247 to MV-O256 are the job's pages through the alert sink (the subject, the body around a reason, and each condition's reason; `<id>` the move's id, `<region>`, `<from>` and `<to>` region names, `<host>` the instance's host name): pending Paul's review. The job's reasons also fill MV-O217's "could not determine <fact> on <label>" with the facts the stop, the seal, the landing, the open and the stage path, and the cut's abort speaks MV-O233 when the record refuses one of the cut's writes before the open.
+
+| id | file | text | status |
+|---|---|---|---|
+| MV-O237 | internal/console/selfserve_health.go (self-serve moves plan 2 Task 8, approved by Paul 2026-10-22) | the account did not answer on <region> within <n> minutes | approved |
+| MV-O238 | internal/console/selfserve_job.go (self-serve moves plan 2 Task 8, approved by Paul 2026-10-22) | target <label> did not report; its staged copy is left for cleanup | approved |
+| MV-O239 | internal/console/offlinereturn.go (self-serve moves plan 2 Task 8, approved by Paul 2026-10-22) | no completed move <id> from <region> to <rec.Region> for this instance | approved |
+| MV-O240 | internal/console/offlinereturn.go (self-serve moves plan 2 Task 8, approved by Paul 2026-10-22) | return requested; the target box will report its leftovers | approved |
+| MV-O241 | internal/console/apiinstancemove_offline.go (self-serve moves plan 2 Task 8, approved by Paul 2026-10-22) | another move's open record is in the way | approved |
+| MV-O242 | internal/console/offlinereturn.go (self-serve moves plan 2 Task 8 text, approved by Paul 2026-10-22) | the instance was recreated since that move | approved |
+| MV-O243 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 8, Controller ruling 6) | the target box's stage path is not armed | pending |
+| MV-O244 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 8, Controller ruling 6) | the target box lacks a capability this move needs: <cap> | pending |
+| MV-O245 | internal/console/selfserve_checks.go (self-serve moves plan 2 Task 8, Controller ruling 6) | the target box's secrets key does not match | pending |
+| MV-O246 | internal/console/offlinereturn.go (self-serve moves plan 2 Task 8) | the target box has a stale live link for <host> | pending |
+| MV-O247 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | carlos self-serve move needs an operator: <host> | pending |
+| MV-O248 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | <why>. run carlos move offline status --host <host> to see what it waits for | pending |
+| MV-O249 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> is open in <region> and its target has not reported opened | pending |
+| MV-O250 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> is open in <region> and the account did not answer its health check | pending |
+| MV-O251 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> has been finishing for more than 10 minutes | pending |
+| MV-O252 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> has been reverting for more than 10 minutes | pending |
+| MV-O253 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> cannot read its record to confirm its open | pending |
+| MV-O254 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the move <id> has not written its open record | pending |
+| MV-O255 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | a reservation names <id>, which no move owns | pending |
+| MV-O256 | internal/console/selfserve_pages.go (self-serve moves plan 2 Task 8) | the staging lane from <from> to <to> failed its probe | pending |