* feat(wsl): serve saved WSL work behind a closed hosts gate (serve-only)
The WSL hosts gate gains three states. A closed gate with a saved WSL host or a
committed move becomes serve-only: saved hosts stay listed and reachable,
committed rewrites, retention, interrupted-move recovery and the way back keep
running, and the preload API is exposed through a stamped window argument.
Adding hosts and starting moves still need the open gate. With nothing saved
the gate stays closed exactly as before.
* fix(wsl): stamp serve-only into the dashboard popout and Space windows too
They load the same preload, so without the argument they hid saved WSL hosts'
status and Connect in serve-only. One helper now supplies the argument for every
window on the shared preload.
* fix(wsl): reviewer follow-ups for the serve-only gate
- Refuse wslHosts:add unless the internal gate is open here, so this PR is safe
on its own.
- Promote on any move journal entry, so recovery can reset an in-flight move
whose host record is gone.
- List unfinished moves in serve-only.
- An unreadable WSL deployment store fails closed in serve-only too, through a
shared serving flag main sets at startup.
- Report the gate state in wsl_usage_snapshot as an optional field.