carlos / platform Public

copy gate: the self-serve doors' rows MV-O198 to MV-O216; the new console files join movesScanFiles

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev b47c3713c12b0d399f0525c41c85cfe9992a0ffb parent bb74a45
2 files changed, +28 −0
  • approved_moves_copy_test.go +4 −0
  • docs/superpowers/plans/2026-10-06-moves-phase1-copy.md +24 −0
diff --git a/approved_moves_copy_test.go b/approved_moves_copy_test.go
index f3479614d..e68911264 100644
--- a/approved_moves_copy_test.go
+++ b/approved_moves_copy_test.go
@@ -108,6 +108,7 @@ var movesCopyIDs = []string{
"MV-O178",
"MV-O179", "MV-O180", "MV-O181", "MV-O182", "MV-O183", "MV-O184", "MV-O185", "MV-O186", "MV-O187", "MV-O188", "MV-O189",
"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",
}
// copyRow is one row of the record. The File cell is the file the sentence is
@@ -1205,6 +1206,9 @@ var movesScanFiles = []string{
"internal/console/offlinereserve.go",
"internal/console/selfserve_pass.go",
"internal/console/selfserve_store.go",
+ "internal/console/selfserve_door.go",
+ "internal/console/selfserve_view.go",
+ "internal/console/selfserve_estimate.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 f253c25b6..9dd493aa7 100644
--- a/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md
+++ b/docs/superpowers/plans/2026-10-06-moves-phase1-copy.md
@@ -722,3 +722,27 @@ Three more console door refusals for a staged move (`internal/console/apiinstanc
| MV-O195 | internal/console/selfserve_store.go (self-serve moves plan 2 Task 4, approved by Paul 2026-10-22; a row reason, not yet shown by a door) | waiting for an earlier move on this box | approved |
| MV-O196 | internal/console/apiinstances.go (self-serve moves plan 2 Task 1, approved by Paul 2026-10-22) | only an account owner can mint a move-capable instance token | approved |
| MV-O197 | internal/console/apiinstances.go (plan 1 lifetimes, msgLifetimeSettling; copy review in amadan discussion 350) | another change to this instance is still settling. try again in a minute | pending |
+
+The self-serve move doors' sentences (self-serve moves plan 2 Task 5; `internal/console/selfserve_door.go`, and the participant pinning in `internal/console/apiinstancemove_offline.go`), approved by Paul 2026-10-22 with the plan's Task 5 copy list. MV-O198 to MV-O203 and MV-O207 to MV-O209 are the prepare's refusals (`<region>` is the region's name, `<label>` the box's edges label). MV-O204 to MV-O206 are pinning's: a box whose status report is missing, stale or does not name its id and instance, and an identity record that does not verify or cannot be read. MV-O210 to MV-O214 are cut and cancel's (`<phase>` is the job's phase name). MV-O215 is the cut's answer when the confirmation window expired first. MV-O216 is the run family's existing 409 for a run in flight, which the self-serve door speaks itself. "another change to this instance is still settling. try again in a minute" is MV-O197 (plan 1's msgLifetimeSettling), reused.
+
+| id | file | text | status |
+|---|---|---|---|
+| MV-O198 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | self-serve moves are not enabled on this console | approved |
+| MV-O199 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | could not read the move | approved |
+| MV-O200 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | scheduled starts are not available yet | approved |
+| MV-O201 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | display_name must be at most 80 characters of plain text | approved |
+| MV-O202 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | <region> has <n> boxes. a self-serve move needs exactly one box in each region | approved |
+| MV-O203 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | the source box has not reported recently. try again in a minute | approved |
+| MV-O204 | internal/console/apiinstancemove_offline.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | the box <label> has not reported recently | approved |
+| MV-O205 | internal/console/apiinstancemove_offline.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | box <label> has an identity record that does not verify | approved |
+| MV-O206 | internal/console/apiinstancemove_offline.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | could not read the identity record for box <label> | approved |
+| MV-O207 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | this account's files are too large to move this way | approved |
+| MV-O208 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | could not measure the account's files. try again in a minute | approved |
+| MV-O209 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | no staging lane is configured from <from> to <to> | approved |
+| MV-O210 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | this is not the move you confirmed | approved |
+| MV-O211 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | the move was cancelled | approved |
+| MV-O212 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | the move is not ready to cut yet. it is <phase> | approved |
+| MV-O213 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | the move was confirmed and cannot be cancelled. it completes or returns on its own | approved |
+| MV-O214 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22) | no move is in flight | approved |
+| MV-O215 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22; MarkSelfServeCut's committed-expiry answer, quoted in the plan's Task 4 and ruled for Task 5) | the move expired. prepare again | approved |
+| MV-O216 | internal/console/selfserve_door.go (self-serve moves plan 2 Task 5, approved by Paul 2026-10-22; provision.MoveRunOpenError's sentence, the run family's existing 409, written out for the self-serve door) | a run is open on this instance: <id>. wait for it to finish or cancel it, then move the instance | approved |