{
  "ensure-workspace": {
    "status": "failed",
    "output": "=== Ensure workspace runtime (WSL2 Ubuntu) ===\n=== Ensure WSL2 subsystem is responsive (auto-recovers if wedged) ===\n  $ wsl --status\n    | Default Distribution: Adom-Workspace\n    | Default Version: 2\n    | WSL1 is not supported with your current machine configuration.\n    | Please enable the \"Windows Subsystem for Linux\" optional component to use WSL1.\n  ✓ `wsl --status` ok (0s)\n  ✓ WSL2 subsystem is responsive\nChecking WSL2 prerequisites (wsl --status)...\n  ✓ WSL2 is installed and ready\n=== Ensure WSL2 subsystem is responsive (auto-recovers if wedged) ===\n  $ wsl --status\n    | Default Distribution: Adom-Workspace\n    | Default Version: 2\n    | WSL1 is not supported with your current machine configuration.\n    | Please enable the \"Windows Subsystem for Linux\" optional component to use WSL1.\n  ✓ `wsl --status` ok (0s)\n  ✓ WSL2 subsystem is responsive\n  ✓ distro already registered + up to date\n  → booting the workspace (systemd PID 1), one blocking wait for boot to finish (~10-30s)…\n  ── systemd boot log ──\n    │ [    2.218863] winvm bash[80]: │    (Foreground is fine for a quick local relay you'll sit and watch.)\n    │ [    2.218863] winvm bash[80]: └────────────────────────────────────────────────────────────────────────────\n    │ [    2.218863] winvm bash[80]: ┌─ SECURITY: this relay is using the DEFAULT development token ──────────────\n    │ [    2.218863] winvm bash[80]: │ The token is a well-known literal published in the adom-bridge docs, so\n    │ [    2.218863] winvm bash[80]: │ ANYONE who knows this relay's URL can join it and drive EVERY desktop\n    │ [    2.218863] winvm bash[80]: │ connected to it. If a connected desktop controls real hardware, treat\n    │ [    2.218863] winvm bash[80]: │ this as an open door.\n    │ [    2.218863] winvm bash[80]: │\n    │ [    2.218863] winvm bash[80]: │ Rotate (both sides must match):\n    │ [    2.218863] winvm bash[80]: │   1. relay:   adom-bridge serve --supervise --token <secret>\n    │ [    2.218863] winvm bash[80]: │              (or export ADOM_AUTH_TOKEN=<secret>)\n    │ [    2.218863] winvm bash[80]: │   2. desktop: set the same value as auth_token on that server entry\n    │ [    2.218863] winvm bash[80]: │              (Connections panel, or server_add with authToken)\n    │ [    2.218863] winvm bash[80]: │ Check any relay:  curl -s <relay-http>/health   -> usingDefaultToken\n    │ [    2.219356] winvm bash[80]: └────────────────────────────────────────────────────────────────────────────\n    │ [    2.219378] winvm systemd[1]: Started [redacted] - Getty on tty4.\n    │ [    2.222287] winvm systemd[1]: Started [redacted] - Getty on tty5.\n    │ [    2.224375] winvm systemd[1]: Started [redacted] - Getty on tty6.\n    │ [    2.225860] winvm systemd[1]: Finished getty-static.service - getty on tty2-tty6 if dbus and logind are not available.\n    │ [    2.226558] winvm systemd[1]: Reached target getty.target - Login Prompts.\n    │ [    2.258114] winvm systemd[1]: e2scrub_reap.service: Deactivated successfully.\n    │ [    2.258354] winvm systemd[1]: Finished e2scrub_reap.service - Remove Stale Online ext4 Metadata Check Snapshots.\n    │ [    2.259911] winvm systemd[1]: Reached target multi-user.target - Multi-User System.\n    │ [    2.261759] winvm systemd[1]: Starting systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP...\n    │ [    2.272240] winvm systemd[1]: systemd-update-utmp-runlevel.service: Deactivated successfully.\n    │ [    2.272440] winvm systemd[1]: Finished systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP.\n    │ [    2.273142] winvm systemd[1]: Startup finished in 352ms.\n    │ [    2.424473] winvm CRON[93]: pam_unix(cron:session): session closed for user adom\n    │ [    2.437816] winvm kernel: TCP: eth0: Driver has suspect GRO implementation, TCP performance may be compromised.\n    │ [    2.487599] winvm login[157]: pam_unix(login:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [    2.551400] winvm bash[81]: 10-16 12:19:39 NOTICE update available: wiki has 0.28.7, running 0.28.6. `adom-wiki pkg update adom/adom-shotlog` then restart `adom-shotlog serve`.\n    │ [    2.627439] winvm bash[80]: Adom relay server started\n    │ [    2.627439] winvm bash[80]:   WebSocket: ws://0.0.0.0:8765\n    │ [    2.627439] winvm bash[80]:   HTTP API:  http://127.0.0.1:8766\n    │ [    2.902046] winvm code-server[82]: [2026-10-16T12:19:39.619Z] info  code-server 4.124.2 9fe7eb79d5ab2f2ed369d0e79cce4dbc6fe00a31\n    │ [    2.902361] winvm code-server[82]: [2026-10-16T12:19:39.628Z] info  Using user-data-dir /home/adom/.local/share/code-server\n    │ [    2.915507] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info  Using config file /home/adom/.config/code-server/config.yaml\n    │ [    2.915563] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info  HTTP server listening on http://127.0.0.1:7380/\n    │ [    2.915563] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info    - Authentication is disabled\n    │ [    2.915563] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info    - Not serving HTTPS\n    │ [    2.915761] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info  Using proxy URI in PORTS tab: http://{{port}}.localhost:47083/\n    │ [    2.915761] winvm code-server[82]: [2026-10-16T12:19:39.642Z] info  Session server listening on /home/adom/.local/share/code-server/code-server-ipc.sock\n    │ [    4.942730] winvm code-server[82]: (node:192) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.\n    │ [    4.942730] winvm code-server[82]: (Use `node --trace-deprecation ...` to show where the warning was created)\n    │ [    5.086667] winvm code-server[82]: [12:19:41]\n    │ [    5.154462] winvm code-server[82]: [reconnection-grace-time] No CLI argument provided, using default: 10800000ms (10800s)\n    │ [    5.155794] winvm code-server[82]: [12:19:41] [AgentHostChannel] Registered unavailable IPC channel 'agentHostProxy': no --agent-host-bridge-port / --agent-host-bridge-path set.\n    │ [    5.159263] winvm code-server[82]: [12:19:41] Extension host agent started.\n    │ [    5.162246] winvm code-server[82]: (node:192) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.\n    │ [    5.191995] winvm code-server[82]: [12:19:41] [127.0.0.1][6c153942][ManagementConnection] Unknown reconnection token (never seen).\n    │ [    5.288306] winvm code-server[82]: [12:19:42] [127.0.0.1][7f9a05a8][ExtensionHostConnection] Unknown reconnection token (never seen).\n    │ [    6.313402] winvm unknown: WSL (133) ERROR: CheckConnection: getaddrinfo() failed: -5\n    │ [    6.330577] winvm unknown: WSL (133) ERROR: CheckConnection: getaddrinfo() failed: -5\n    │ [    6.350656] winvm unknown: WSL (133) ERROR: CheckConnection: connect() failed: 101\n    │ [   12.521872] winvm unknown: WSL (2 - Interop) ERROR: CreateLoginSession:3068: Timed out waiting for user session for uid=1001\n    │ [   12.523233] winvm unknown: WSL (2 - Interop) ERROR: SendMessage:206: Failed to write message LxMessageResultBool. Channel: InteropServer\n    │ [   12.524032] winvm unknown: WSL (2) ERROR: Exception thrown from a scope_exit lambda Broken pipe @C:/__w/1/s/src/shared/inc\\SocketChannel.h:207 (SendMessage)\n    │ [   13.805887] winvm login[324]: pam_unix(login:session): session opened for user root(uid=0) by root(uid=0)\n    │ [   13.807328] winvm login[336]: ROOT LOGIN  on '/dev/pts/2'\n    │ [   20.733170] winvm bash[80]: [2026-10-16T12:19:57.459Z] WS connected: 96f22eb8-656c-4c28-b43f-d68b89e86efa from 127.0.0.1:55154\n    │ [   20.733653] winvm bash[80]: [2026-10-16T12:19:57.460Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=auth id=215e3a4e-735e-4dea-9e2f-2fb69ef4caa9\n    │ [   20.733653] winvm bash[80]: [2026-10-16T12:19:57.460Z] Auth OK: 96f22eb8-656c-4c28-b43f-d68b89e86efa (Adom Bridge)\n    │ [   23.846548] winvm unknown: WSL (2 - Interop) ERROR: CreateLoginSession:3068: Timed out waiting for user session for uid=0\n    │ [   23.847273] winvm unknown: WSL (2 - Interop) ERROR: SendMessage:206: Failed to write message LxMessageResultBool. Channel: InteropServer\n    │ [   23.848068] winvm unknown: WSL (2) ERROR: Exception thrown from a scope_exit lambda Broken pipe @C:/__w/1/s/src/shared/inc\\SocketChannel.h:207 (SendMessage)\n    │ [   23.896430] winvm systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   24.426618] winvm CRON[434]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [   24.427047] winvm CRON[435]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [   24.456993] winvm CRON[434]: pam_unix(cron:session): session closed for user adom\n    │ [   24.908959] winvm python3[432]: 127.0.0.1 - - [16/Oct/2026 12:20:01] \"GET / HTTP/1.1\" 200 -\n    │ [   26.418296] winvm systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   26.422044] winvm systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   26.422492] winvm systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   30.746139] winvm systemd[1]: Reloading requested from client PID 588 ('systemctl')...\n    │ [   30.746380] winvm systemd[1]: Reloading...\n    │ [   30.824580] winvm systemd[1]: Reloading finished in 78 ms.\n    │ [   32.623274] winvm bash[80]: [2026-10-16T12:20:09.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=4b04b839-f28e-4a10-bdeb-6b295e531150\n    │ [   35.368544] winvm systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   36.380546] winvm python3[689]: 127.0.0.1 - - [16/Oct/2026 12:20:13] \"GET / HTTP/1.1\" 200 -\n    │ [   36.468383] winvm systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   36.470191] winvm systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   36.470469] winvm systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   45.949262] winvm code-server[82]: File not found: /usr/lib/code-server/lib/vscode/node_modules/vsda/rust/web/vsda_bg.wasm\n    │ [   45.951056] winvm code-server[82]: File not found: /usr/lib/code-server/lib/vscode/node_modules/vsda/rust/web/vsda.js\n    │ [   45.955727] winvm code-server[82]: [12:20:22] [127.0.0.1][281fbc50][ManagementConnection] New connection established.\n    │ [   46.433643] winvm code-server[82]: [12:20:23] [127.0.0.1][c6b473f7][ExtensionHostConnection] New connection established.\n    │ [   46.488057] winvm code-server[82]: [12:20:23] [127.0.0.1][c6b473f7][ExtensionHostConnection] <905> Launched Extension Host Process.\n    │ [   46.812548] winvm code-server[82]: [12:20:23] [127.0.0.1][c6b473f7][ExtensionHostConnection] <905> [reconnection-grace-time] Extension host: read VSCODE_RECONNECTION_GRACE_TIME=10800000ms (10800s)\n    │ [   47.623437] winvm bash[80]: [2026-10-16T12:20:24.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=e7ffb259-bf75-4712-84f5-4c319acb35e1\n    │ [   49.043513] winvm kernel: hv_balloon: Max. dynamic memory size: 16380 MB\n    │ [   62.622991] winvm bash[80]: [2026-10-16T12:20:39.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=6d4e7bd6-8a64-4a71-ac05-b11e36feb9f7\n    │ [   77.623193] winvm bash[80]: [2026-10-16T12:20:54.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=d5be1005-ec6e-452d-85c4-b43e86e8eda7\n    │ [   84.459849] winvm CRON[1753]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [   84.460348] winvm CRON[1754]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [   84.491736] winvm CRON[1753]: pam_unix(cron:session): session closed for user adom\n    │ [   92.623136] winvm bash[80]: [2026-10-16T12:21:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=39e52075-e8ad-4263-8170-f72efb947cd3\n    │ [  107.623247] winvm bash[80]: [2026-10-16T12:21:24.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=498eab17-c863-4a9d-88d7-dc747370a3a6\n    │ [  122.623104] winvm bash[80]: [2026-10-16T12:21:39.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=0b7e4707-26ae-4fc4-88fe-3920ee8dc606\n    │ [  137.623152] winvm bash[80]: [2026-10-16T12:21:54.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=b6a6f6f0-de77-4dc7-8caa-4d525062fe6b\n    │ [  144.493896] winvm CRON[2504]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  144.494534] winvm CRON[2505]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  144.531047] winvm CRON[2504]: pam_unix(cron:session): session closed for user adom\n    │ [  152.622987] winvm bash[80]: [2026-10-16T12:22:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=04dbaba8-d2ff-4427-bb8d-8067e22723aa\n    │ [  167.622991] winvm bash[80]: [2026-10-16T12:22:24.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=ab0d176f-efd6-4fe9-9bba-2232dfaff304\n    │ [  182.623423] winvm bash[80]: [2026-10-16T12:22:39.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=1b126103-7d0d-4130-b975-9b6fdfc85ddb\n    │ [  197.623208] winvm bash[80]: [2026-10-16T12:22:54.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=5d1bd4d5-4a77-4559-afe1-6e8a533ff6c6\n    │ [  204.533290] winvm CRON[3209]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  204.533764] winvm CRON[3210]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  204.565301] winvm CRON[3209]: pam_unix(cron:session): session closed for user adom\n    │ [  212.622846] winvm bash[80]: [2026-10-16T12:23:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=99d4a13d-a079-4da7-91d7-6ec3afdddf4b\n    │ [  227.623155] winvm bash[80]: [2026-10-16T12:23:24.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=a0e56e37-440f-477c-852a-a36abbbf7410\n    │ [  242.623184] winvm bash[80]: [2026-10-16T12:23:39.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=b59762cb-b9fa-436c-ab01-c3b766d4fe0c\n    │ [  257.622710] winvm bash[80]: [2026-10-16T12:23:54.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=83af7716-b366-4f69-a011-ab693f6fde64\n    │ [  264.568046] winvm CRON[3956]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  264.568654] winvm CRON[3957]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  264.603104] winvm CRON[3956]: pam_unix(cron:session): session closed for user adom\n    │ [  272.623247] winvm bash[80]: [2026-10-16T12:24:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=3cd19343-078c-4b4a-8f3c-04933fe71f9d\n    │ [  287.623206] winvm bash[80]: [2026-10-16T12:24:24.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=b328e220-2fe5-423e-97d1-90c1d96e8ebe\n    │ [  302.623376] winvm bash[80]: [2026-10-16T12:24:39.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=b1e6c3f5-a52e-496e-b64d-aea1bf64af22\n    │ [  317.626100] winvm bash[80]: [2026-10-16T12:24:54.352Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=3d1143b4-4d27-408d-880a-c4d8d80545bf\n    │ [  324.605432] winvm CRON[4703]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  324.605925] winvm CRON[4704]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  324.637632] winvm CRON[4703]: pam_unix(cron:session): session closed for user adom\n    │ [  332.622730] winvm bash[80]: [2026-10-16T12:25:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=41bea2a0-03e0-44cb-beb0-fb568f85dcea\n    │ [  347.622763] winvm bash[80]: [2026-10-16T12:25:24.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=f7877290-edd6-42b1-b396-ddc872be18d6\n    │ [  362.623200] winvm bash[80]: [2026-10-16T12:25:39.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=97b75205-2ce1-4bce-9710-c0bb02e76521\n    │ [  377.622782] winvm bash[80]: [2026-10-16T12:25:54.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=3622f172-063f-4a30-a3c7-e41af2389127\n    │ [  384.640771] winvm CRON[5410]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  384.641299] winvm CRON[5411]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  384.677192] winvm CRON[5410]: pam_unix(cron:session): session closed for user adom\n    │ [  392.623111] winvm bash[80]: [2026-10-16T12:26:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=9e1abdda-cd4f-40a0-b9ac-ac7c5b8b64a6\n    │ [  407.623353] winvm bash[80]: [2026-10-16T12:26:24.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=7c5217f9-557a-4085-bbd0-2ed5b17c3815\n    │ [  422.623272] winvm bash[80]: [2026-10-16T12:26:39.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=653f27a8-0672-4d58-aec1-ab0a0a498a62\n    │ [  437.623523] winvm bash[80]: [2026-10-16T12:26:54.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=615c7677-342b-493b-afcd-34aeff42e5c3\n    │ [  443.646239] winvm code-server[82]: [12:27:00] [127.0.0.1][281fbc50][ManagementConnection] The client has disconnected gracefully, so the connection will be disposed.\n    │ [  444.679758] winvm CRON[6157]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  444.680251] winvm CRON[6158]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  444.712119] winvm CRON[6157]: pam_unix(cron:session): session closed for user adom\n    │ [  445.692524] winvm systemd[1]: Stopping code-server.service - Adom code-server (Hydrogen Desktop workspace editor)...\n    │ [  445.830905] winvm systemd[1]: code-server.service: Deactivated successfully.\n    │ [  445.831215] winvm systemd[1]: Stopped code-server.service - Adom code-server (Hydrogen Desktop workspace editor).\n    │ [  445.831433] winvm systemd[1]: code-server.service: Consumed 41.941s CPU time, 1.2G memory peak, 0B memory swap peak.\n    │ [  452.622879] winvm bash[80]: [2026-10-16T12:27:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=7eba80ba-dfec-4c99-b9f8-6bdff358d6a1\n    │ [  467.623094] winvm bash[80]: [2026-10-16T12:27:24.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=66c4f2f0-d4e9-4177-b5b9-af7258aa9c8b\n    │ [  482.623468] winvm bash[80]: [2026-10-16T12:27:39.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=32b3f91d-9a86-4838-b13e-2e2e31177295\n    │ [  497.623723] winvm bash[80]: [2026-10-16T12:27:54.350Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=56b9965d-baa0-48fa-844f-d09260e02d1e\n    │ [  504.715168] winvm CRON[6169]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  504.715698] winvm CRON[6170]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  504.748252] winvm CRON[6169]: pam_unix(cron:session): session closed for user adom\n    │ [  512.622990] winvm bash[80]: [2026-10-16T12:28:09.349Z] ← 96f22eb8-656c-4c28-b43f-d68b89e86efa type=pong id=891bb7ab-0dcd-4a7c-a4e5-dfb5dbd6bf7c\n  ── end boot log ──\n  ✓ workspace booted: systemd is 'running' after 0s (a degraded per-user session is normal for v9)\n  image version check: rootfs(/etc/adom-golden-version)=v31-full · HD-wrote(/etc/adom-tarball-version)=v31-full · expected=v31-full\nEnsuring adom user (uid 1001/gid 1001) + /home/adom/project...\n  ✓ adom user already present\n  ✓ /home/adom/project ready\nWriting adom-host alias (WSL2 → Windows gateway)...\n  ✓ alias ready\nStarting code-server inside the distro...\n  ✓ code-server start issued\n  ✓ api-key persistence ensured (boot-proof)\nDeep-verifying workspace (target: code-server reachable on host 127.0.0.1:7380)...\n  ✓ distro 'Adom-Workspace' is registered\n  --- verification round 1/3 ---\n  ✓ code-server binary present in distro\n  ✓ code-server process running in distro\n  ✗ code-server LISTENING on :7380 inside distro\n    → REPAIR: (re)starting code-server on the correct bind-addr...\n    ✓ code-server (re)started\n  ✗ code-server: port-held-windows: Port 7380 is in use by Windows PowerShell (powershell.exe) on Windows, and Hydrogen's editor needs it. Close Windows PowerShell, then run setup again.\n  ✗ workspace setup attempt failed (will retry if attempts remain): code-server: port-held-windows: Port 7380 is in use by Windows PowerShell (powershell.exe) on Windows, and Hydrogen's editor needs it. Close Windows PowerShell, then run setup again.",
    "percent": 0.0,
    "attempts": 0,
    "max_attempts": 3
  }
}