feat(wsl-mover): D3a-2 move status line on WSL host rows (dark) (#34676)

* feat(wsl-mover): D3a-2 per-distro move status line on WSL host rows, with decline causes and stale-record pruning (dark)

* fix(wsl-mover): key D3a-2 status records without the node-only journal module in the renderer

* fix(wsl-mover): D3a-2 pre-review — never prune user choices or on an unreadable host file; calm paused line; one-key blocker sentence; Show terminal feedback

* refactor(wsl-mover): D3a-2 distro-in-use check in its own module

* test(wsl-mover): the orchestrator host-connect test gives the new in-use port

* fix(wsl-mover): D3a-2 Check again runs as the user's act on the distro (stopped-distro gates)

* fix(wsl-mover): D3a-2 user steps use main's runAsWslUserAct gate; wiring test
This commit is contained in:
Neil
2026-10-28 00:54:52 -07:00
committed by GitHub
parent 03dcd30367
commit bb10b80be5
24 changed files with 1053 additions and 41 deletions
@@ -18,6 +18,9 @@ export type WslMoveOrchestratorTrigger =
/** A backoff retry or deferred re-check; runs only while the host stays ready. */
| 'timer'
/** "Use on this computer again" (`released-here`) or a Remove of the distro's host (`removed`). */
export type WslMoveOrchestratorDeclineCause = 'released-here' | 'removed'
/** Why the orchestrator stopped trying on its own; each needs the user. */
export type WslMoveOrchestratorParkReason =
| 'export-incomplete'
@@ -46,7 +49,13 @@ export type WslMoveOrchestratorState =
| { kind: 'waiting-for-host'; migrationId: string }
/** `waits`: uncounted checks so far (an earlier move still settling), for their cap. */
| { kind: 'backoff'; nextAttemptAt: number; reason: string; waits?: number }
| { kind: 'parked'; reason: WslMoveOrchestratorParkReason; until?: number }
| {
kind: 'parked'
reason: WslMoveOrchestratorParkReason
until?: number
/** For `declined`: which choice of the user's declined it. */
cause?: WslMoveOrchestratorDeclineCause
}
/**
* `nextCheckAt` / `waits` while a newer preview waits on this move to finish settling:
* new projects may be queued behind it, so the wait is re-checked and capped like a backoff.