{
  "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: Ubuntu\n    | Default Version: 2\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: Ubuntu\n    | Default Version: 2\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    │ [    1.325935] 5HaD0W systemd[1]: Starting e2scrub_reap.service - Remove Stale Online ext4 Metadata Check Snapshots...\n    │ [    1.326956] 5HaD0W systemd[1]: Starting getty-static.service - getty on tty2-tty6 if dbus and logind are not available...\n    │ [    1.327141] 5HaD0W systemd[1]: systemd-logind.service - User Login Management was skipped because no trigger condition checks were met.\n    │ [    1.327193] 5HaD0W systemd[1]: systemd-pcrphase.service - TPM2 PCR Barrier (User) was skipped because of an unmet condition check (ConditionSecurity=measured-uki).\n    │ [    1.327748] 5HaD0W systemd[1]: Starting systemd-user-sessions.service - Permit User Sessions...\n    │ [    1.328981] 5HaD0W (cron)[76]: cron.service: Referenced but unset environment variable evaluates to an empty string: EXTRA_OPTS\n    │ [    1.330367] 5HaD0W systemd[1]: Started code-server.service - Adom code-server (Hydrogen Desktop workspace editor).\n    │ [    1.330655] 5HaD0W systemd[1]: Started adom-relay.service - Adom Bridge relay (adom-bridge serve) - the bridge AD/HD connect back to.\n    │ [    1.330779] 5HaD0W cron[76]: (CRON) INFO (pidfile fd = 3)\n    │ [    1.330858] 5HaD0W systemd[1]: Started adom-shotlog.service - Adom Shotlog (screenshot log viewer, port 8820).\n    │ [    1.332378] 5HaD0W cron[76]: (CRON) INFO (Running @reboot jobs)\n    │ [    1.341033] 5HaD0W systemd[1]: e2scrub_reap.service: Deactivated successfully.\n    │ [    1.341153] 5HaD0W systemd[1]: Finished e2scrub_reap.service - Remove Stale Online ext4 Metadata Check Snapshots.\n    │ [    1.342025] 5HaD0W CRON[85]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [    1.342251] 5HaD0W CRON[84]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [    1.342658] 5HaD0W systemd[1]: Finished systemd-user-sessions.service - Permit User Sessions.\n    │ [    1.343471] 5HaD0W CRON[114]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [    1.343684] 5HaD0W CRON[115]: (adom) CMD (sleep 600; bash /home/adom/.adom/hooks/adom-core-update.sh >/dev/null 2>&1)\n    │ [    1.344639] 5HaD0W adom-bridge[73]: ┌─ adom-bridge relay (ws:8765 http:8766) ───────────────────────────\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ ⚠  RUNNING IN THE FOREGROUND — this relay STOPS when this shell / session ends.\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    In a container that means: when the session that launched it is torn down,\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    the relay dies, /proxy/8765/ returns HTTP 500, and EVERY connected desktop\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    falls into an endless \"Reconnecting in 30s\" loop until someone restarts it.\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ ✅ To make it SURVIVE the session AND self-heal, stop this and run instead:\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │        adom-bridge serve --supervise\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    That detaches the relay from your session (reparented to init) and starts a\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    watchdog: it restarts the relay with backoff and TOASTS the connected\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    desktops (with the reason) whenever it has to. Stop later with:\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │        adom-bridge serve --stop\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │    (Foreground is fine for a quick local relay you'll sit and watch.)\n    │ [    1.344639] 5HaD0W adom-bridge[73]: └────────────────────────────────────────────────────────────────────────────\n    │ [    1.344639] 5HaD0W adom-bridge[73]: ┌─ SECURITY: this relay is using the DEFAULT development token ──────────────\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ The token is a well-known literal published in the adom-bridge docs, so\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ ANYONE who knows this relay's URL can join it and drive EVERY desktop\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ connected to it. If a connected desktop controls real hardware, treat\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ this as an open door.\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ Rotate (both sides must match):\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │   1. relay:   adom-bridge serve --supervise --token <secret>\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │              (or export ADOM_AUTH_TOKEN=<secret>)\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │   2. desktop: set the same value as auth_token on that server entry\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │              (Connections panel, or server_add with authToken)\n    │ [    1.344639] 5HaD0W adom-bridge[73]: │ Check any relay:  curl -s <relay-http>/health   -> usingDefaultToken\n    │ [    1.345236] 5HaD0W adom-bridge[73]: └────────────────────────────────────────────────────────────────────────────\n    │ [    1.346036] 5HaD0W systemd[1]: Started console-getty.service - Console Getty.\n    │ [    1.347267] 5HaD0W systemd[1]: Started [redacted] - Getty on tty1.\n    │ [    1.349240] 5HaD0W systemd[1]: Started [redacted] - Getty on tty2.\n    │ [    1.351613] 5HaD0W systemd[1]: Started [redacted] - Getty on tty3.\n    │ [    1.354590] 5HaD0W systemd[1]: Started [redacted] - Getty on tty4.\n    │ [    1.357739] 5HaD0W systemd[1]: Started [redacted] - Getty on tty5.\n    │ [    1.360795] 5HaD0W systemd[1]: Started [redacted] - Getty on tty6.\n    │ [    1.362910] 5HaD0W systemd[1]: Finished getty-static.service - getty on tty2-tty6 if dbus and logind are not available.\n    │ [    1.363424] 5HaD0W systemd[1]: Reached target getty.target - Login Prompts.\n    │ [    1.363670] 5HaD0W systemd[1]: Reached target multi-user.target - Multi-User System.\n    │ [    1.365048] 5HaD0W systemd[1]: Starting systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP...\n    │ [    1.365327] 5HaD0W adom-bridge[73]: Adom relay server started\n    │ [    1.365327] 5HaD0W adom-bridge[73]:   WebSocket: ws://0.0.0.0:8765\n    │ [    1.365327] 5HaD0W adom-bridge[73]:   HTTP API:  http://127.0.0.1:8766\n    │ [    1.366590] 5HaD0W bash[74]: OK: Recovered 0 channel(s) from disk\n    │ [    1.366590] 5HaD0W bash[74]: OK: Retention active: max 200 shots/channel on disk (SHOTLOG_MAX_SHOTS), idle channels pruned after 30d (SHOTLOG_RETENTION_DAYS, 0=off)\n    │ [    1.367518] 5HaD0W bash[74]: OK: read-hook verified: auto-capture of every image any AI Reads is active.\n    │ [    1.369407] 5HaD0W bash[74]: OK: Listening on 0.0.0.0:8820\n    │ [    1.377735] 5HaD0W systemd[1]: systemd-update-utmp-runlevel.service: Deactivated successfully.\n    │ [    1.377932] 5HaD0W systemd[1]: Finished systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP.\n    │ [    1.378716] 5HaD0W systemd[1]: Startup finished in 382ms.\n    │ [    1.443321] 5HaD0W CRON[84]: pam_unix(cron:session): session closed for user adom\n    │ [    1.560251] 5HaD0W login[173]: pam_unix(login:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [    2.195860] 5HaD0W code-server[75]: [2026-11-02T04:17:18.847Z] info  code-server 4.124.2 9fe7eb79d5ab2f2ed369d0e79cce4dbc6fe00a31\n    │ [    2.196263] 5HaD0W code-server[75]: [2026-11-02T04:17:18.852Z] info  Using user-data-dir /home/adom/.local/share/code-server\n    │ [    2.209036] 5HaD0W code-server[75]: [2026-11-02T04:17:18.866Z] info  Using config file /home/adom/.config/code-server/config.yaml\n    │ [    2.209186] 5HaD0W code-server[75]: [2026-11-02T04:17:18.866Z] info  HTTP server listening on http://127.0.0.1:7380/\n    │ [    2.209186] 5HaD0W code-server[75]: [2026-11-02T04:17:18.866Z] info    - Authentication is disabled\n    │ [    2.209186] 5HaD0W code-server[75]: [2026-11-02T04:17:18.866Z] info    - Not serving HTTPS\n    │ [    2.209186] 5HaD0W code-server[75]: [2026-11-02T04:17:18.866Z] info  Session server listening on /home/adom/.local/share/code-server/code-server-ipc.sock\n    │ [    6.217610] 5HaD0W kernel: scsi 0:0:0:4: Direct-Access     Msft     Virtual Disk     1.0  PQ: 0 ANSI: 5\n    │ [    6.218484] 5HaD0W kernel: scsi 0:0:0:5: Direct-Access     Msft     Virtual Disk     1.0  PQ: 0 ANSI: 5\n    │ [    6.226377] 5HaD0W kernel: sd 0:0:0:4: Attached scsi generic sg4 type 0\n    │ [    6.226624] 5HaD0W kernel: sd 0:0:0:5: Attached scsi generic sg5 type 0\n    │ [    6.226697] 5HaD0W kernel: sd 0:0:0:4: [sde] 2147483648 512-byte logical blocks: (1.10 TB/1.00 TiB)\n    │ [    6.226700] 5HaD0W kernel: sd 0:0:0:4: [sde] 4096-byte physical blocks\n    │ [    6.226792] 5HaD0W kernel: sd 0:0:0:5: [sdf] 288832 512-byte logical blocks: (148 MB/141 MiB)\n    │ [    6.226847] 5HaD0W kernel: sd 0:0:0:4: [sde] Write Protect is off\n    │ [    6.226850] 5HaD0W kernel: sd 0:0:0:4: [sde] Mode Sense: 0f 00 00 00\n    │ [    6.227571] 5HaD0W kernel: sd 0:0:0:5: [sdf] Write Protect is off\n    │ [    6.227575] 5HaD0W kernel: sd 0:0:0:5: [sdf] Mode Sense: 0f 00 00 00\n    │ [    6.227629] 5HaD0W kernel: sd 0:0:0:4: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\n    │ [    6.227692] 5HaD0W kernel: sd 0:0:0:5: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\n    │ [    6.227951] 5HaD0W kernel: /dev/sdf: Can't open blockdev\n    │ [    6.229078] 5HaD0W kernel: sd 0:0:0:5: [sdf] Attached SCSI disk\n    │ [    6.229172] 5HaD0W kernel: sd 0:0:0:4: [sde] Attached SCSI disk\n    │ [    6.252815] 5HaD0W kernel: EXT4-fs (sdf): mounted filesystem 7eae6b88-2757-4e7a-a609-1fda15f27f03 r/w with ordered data mode. Quota mode: none.\n    │ [    6.271574] 5HaD0W unknown: WSL (1 - init(docker-desktop)) ERROR: ConfigApplyWindowsLibPath:2092: open /etc/ld.so.conf.d/ld.wsl.conf failed 2\n    │ [    6.290219] 5HaD0W unknown: WSL (1 - init(docker-desktop)) WARNING: /usr/share/zoneinfo/America/Los_Angeles not found. Is the tzdata package installed?\n    │ [    6.496152] 5HaD0W kernel: EXT4-fs (sde): mounted filesystem 78190c6a-f0d8-4085-9dcf-66c7114625d2 r/w with ordered data mode. Quota mode: none.\n    │ [    6.520268] 5HaD0W kernel: loop0: detected capacity change from 0 to 1518428\n    │ [    6.536070] 5HaD0W kernel: ISO 9660 Extensions: Microsoft Joliet Level 3\n    │ [    6.536154] 5HaD0W kernel: ISO 9660 Extensions: RRIP_1991A\n    │ [    6.555944] 5HaD0W kernel: loop1: detected capacity change from 0 to 1470396\n    │ [    6.556384] 5HaD0W kernel: ISO 9660 Extensions: RRIP_1991A\n    │ [    7.143349] 5HaD0W kernel: netlink: 'initd': attribute type 4 has an invalid length.\n    │ [    7.268267] 5HaD0W kernel: virtiofs: Unknown parameter 'negative_dentry_timeout'\n    │ [    7.543534] 5HaD0W kernel: RPC: Registered named UNIX socket transport module.\n    │ [    7.543539] 5HaD0W kernel: RPC: Registered udp transport module.\n    │ [    7.543540] 5HaD0W kernel: RPC: Registered tcp transport module.\n    │ [    7.543541] 5HaD0W kernel: RPC: Registered tcp-with-tls transport module.\n    │ [    7.543542] 5HaD0W kernel: RPC: Registered tcp NFSv4.1 backchannel transport module.\n    │ [    8.971031] 5HaD0W kernel: Initializing XFRM netlink socket\n    │ [   10.406519] 5HaD0W Exception:\n    │ [   10.406524] 5HaD0W unknown: Operation canceled @p9io.cpp:258 (AcceptAsync)\n    │ [   10.406525] 5HaD0W unknown:\n    │ [   10.486103] 5HaD0W kernel: device offline error, dev sde, sector 0 op 0x1:(WRITE) flags 0x800 phys_seg 0 prio class 2\n    │ [   10.501072] 5HaD0W kernel: EXT4-fs (sde): shut down requested (2)\n    │ [   10.501589] 5HaD0W kernel: Aborting journal on device sde-8.\n    │ [   10.502197] 5HaD0W kernel: device offline error, dev sde, sector 1073479680 op 0x1:(WRITE) flags 0x9800 phys_seg 1 prio class 2\n    │ [   10.503091] 5HaD0W kernel: device offline error, dev sde, sector 1073479680 op 0x1:(WRITE) flags 0x9800 phys_seg 1 prio class 2\n    │ [   10.503601] 5HaD0W kernel: Buffer I/O error on dev sde, logical block 134184960, lost sync page write\n    │ [   10.503980] 5HaD0W kernel: JBD2: I/O error when updating journal superblock for sde-8.\n    │ [   10.537809] 5HaD0W kernel: sd 0:0:0:4: [sde] Synchronizing SCSI cache\n    │ [   11.690501] 5HaD0W unknown: WSL (2 - Interop) ERROR: CreateLoginSession:2766: Timed out waiting for user session for uid=1001\n    │ [   11.909779] 5HaD0W login[318]: pam_unix(login:session): session opened for user root(uid=0) by root(uid=0)\n    │ [   11.911182] 5HaD0W login[330]: ROOT LOGIN  on '/dev/pts/2'\n    │ [   22.007996] 5HaD0W unknown: WSL (2 - Interop) ERROR: CreateLoginSession:2766: Timed out waiting for user session for uid=0\n    │ [   44.445789] 5HaD0W CRON[475]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [   44.446305] 5HaD0W CRON[476]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [   44.556656] 5HaD0W CRON[475]: pam_unix(cron:session): session closed for user adom\n    │ [   48.494805] 5HaD0W kernel: hv_balloon: Max. dynamic memory size: 16224 MB\n    │ [  104.559176] 5HaD0W CRON[531]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  104.559684] 5HaD0W CRON[532]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  104.622848] 5HaD0W CRON[531]: pam_unix(cron:session): session closed for user adom\n    │ [  164.624916] 5HaD0W CRON[534]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  164.625406] 5HaD0W CRON[535]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  164.705627] 5HaD0W CRON[534]: pam_unix(cron:session): session closed for user adom\n    │ [  177.500715] 5HaD0W systemd[1]: Reloading requested from client PID 739 ('systemctl') (unit init.scope)...\n    │ [  177.501008] 5HaD0W systemd[1]: Reloading...\n    │ [  177.653831] 5HaD0W systemd[1]: Reloading finished in 152 ms.\n    │ [  177.851840] 5HaD0W systemd[1]: Reloading requested from client PID 762 ('systemctl') (unit init.scope)...\n    │ [  177.851951] 5HaD0W systemd[1]: Reloading...\n    │ [  178.009529] 5HaD0W systemd[1]: Reloading finished in 157 ms.\n    │ [  178.211118] 5HaD0W systemd[1]: Stopping code-server.service - Adom code-server (Hydrogen Desktop workspace editor)...\n    │ [  178.233774] 5HaD0W systemd[1]: code-server.service: Deactivated successfully.\n    │ [  178.233892] 5HaD0W systemd[1]: Stopped code-server.service - Adom code-server (Hydrogen Desktop workspace editor).\n    │ [  178.429073] 5HaD0W systemd[1]: Reloading requested from client PID 792 ('systemctl') (unit init.scope)...\n    │ [  178.429206] 5HaD0W systemd[1]: Reloading...\n    │ [  178.610495] 5HaD0W systemd[1]: Reloading finished in 181 ms.\n    │ [  178.681298] 5HaD0W systemd[1]: Starting code-server.service - Adom code-server (Hydrogen Desktop workspace editor)...\n    │ [  178.681952] 5HaD0W systemd[1]: Started code-server.service - Adom code-server (Hydrogen Desktop workspace editor).\n    │ [  179.434910] 5HaD0W code-server[813]: [2026-11-02T04:20:16.087Z] info  code-server 4.124.2 9fe7eb79d5ab2f2ed369d0e79cce4dbc6fe00a31\n    │ [  179.435492] 5HaD0W code-server[813]: [2026-11-02T04:20:16.090Z] info  Using user-data-dir /home/adom/.local/share/code-server\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  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 1.\n    → REPAIR: forcing a clean code-server restart and retrying verification…\n  --- verification round 2/3 ---\n  ✓ code-server binary present in distro\n  ✓ code-server process running in distro\n  ✓ code-server LISTENING on :7380 inside distro\n  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 2.\n    → REPAIR: forcing a clean code-server restart and retrying verification…\n  --- verification round 3/3 ---\n  ✓ code-server binary present in distro\n  ✓ code-server process running in distro\n  ✓ code-server LISTENING on :7380 inside distro\n  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 3.\n\ncode-server runs inside the workspace but Windows cannot reach it: checking WSL networking and its firewall before giving up…\n  ✗ loopback probe FAILED (cause: unknown_loopback_failure)\n  · mirrored is configured; trying one WSL restart to heal the loopback…\n  $ wsl --shutdown   (no other distro is running: only ours restarts)\n  · loopback still failing after restart; continuing without elevation (the auth preflight reports the live diagnosis when it matters)\n  · the network fix is in place but not confirmed yet: waiting for WSL's network to come up (up to 90 s)…\n  ✓ starting the workspace again\n=== Ensure WSL2 subsystem is responsive (auto-recovers if wedged) ===\n  $ wsl --status\n    | Default Distribution: Ubuntu\n    | Default Version: 2\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    │ [    1.634842] 5HaD0W bash[73]: │    the relay dies, /proxy/8765/ returns HTTP 500, and EVERY connected desktop\n    │ [    1.634842] 5HaD0W bash[73]: │    falls into an endless \"Reconnecting in 30s\" loop until someone restarts it.\n    │ [    1.634842] 5HaD0W bash[73]: │\n    │ [    1.634842] 5HaD0W bash[73]: │ ✅ To make it SURVIVE the session AND self-heal, stop this and run instead:\n    │ [    1.634842] 5HaD0W bash[73]: │        adom-bridge serve --supervise\n    │ [    1.634842] 5HaD0W bash[73]: │    That detaches the relay from your session (reparented to init) and starts a\n    │ [    1.634842] 5HaD0W bash[73]: │    watchdog: it restarts the relay with backoff and TOASTS the connected\n    │ [    1.634842] 5HaD0W bash[73]: │    desktops (with the reason) whenever it has to. Stop later with:\n    │ [    1.634842] 5HaD0W bash[73]: │        adom-bridge serve --stop\n    │ [    1.634842] 5HaD0W bash[73]: │\n    │ [    1.634842] 5HaD0W bash[73]: │    (Foreground is fine for a quick local relay you'll sit and watch.)\n    │ [    1.634842] 5HaD0W bash[73]: └────────────────────────────────────────────────────────────────────────────\n    │ [    1.634842] 5HaD0W bash[73]: ┌─ SECURITY: this relay is using the DEFAULT development token ──────────────\n    │ [    1.634842] 5HaD0W bash[73]: │ The token is a well-known literal published in the adom-bridge docs, so\n    │ [    1.634842] 5HaD0W bash[73]: │ ANYONE who knows this relay's URL can join it and drive EVERY desktop\n    │ [    1.634842] 5HaD0W bash[73]: │ connected to it. If a connected desktop controls real hardware, treat\n    │ [    1.634842] 5HaD0W bash[73]: │ this as an open door.\n    │ [    1.634842] 5HaD0W bash[73]: │\n    │ [    1.634842] 5HaD0W bash[73]: │ Rotate (both sides must match):\n    │ [    1.634842] 5HaD0W bash[73]: │   1. relay:   adom-bridge serve --supervise --token <secret>\n    │ [    1.634842] 5HaD0W bash[73]: │              (or export ADOM_AUTH_TOKEN=<secret>)\n    │ [    1.634842] 5HaD0W bash[73]: │   2. desktop: set the same value as auth_token on that server entry\n    │ [    1.634842] 5HaD0W bash[73]: │              (Connections panel, or server_add with authToken)\n    │ [    1.634842] 5HaD0W bash[73]: │ Check any relay:  curl -s <relay-http>/health   -> usingDefaultToken\n    │ [    1.635632] 5HaD0W bash[73]: └────────────────────────────────────────────────────────────────────────────\n    │ [    1.635682] 5HaD0W bash[74]: OK: Recovered 0 channel(s) from disk\n    │ [    1.635682] 5HaD0W bash[74]: OK: Retention active: max 200 shots/channel on disk (SHOTLOG_MAX_SHOTS), idle channels pruned after 30d (SHOTLOG_RETENTION_DAYS, 0=off)\n    │ [    1.636047] 5HaD0W systemd[1]: Started [redacted] - Getty on tty1.\n    │ [    1.636116] 5HaD0W bash[74]: OK: read-hook verified: auto-capture of every image any AI Reads is active.\n    │ [    1.636495] 5HaD0W systemd[1]: Started [redacted] - Getty on tty2.\n    │ [    1.637028] 5HaD0W bash[74]: OK: Listening on 0.0.0.0:8820\n    │ [    1.637936] 5HaD0W systemd[1]: Started [redacted] - Getty on tty3.\n    │ [    1.642980] 5HaD0W bash[73]: Adom relay server started\n    │ [    1.642980] 5HaD0W bash[73]:   WebSocket: ws://0.0.0.0:8765\n    │ [    1.642980] 5HaD0W bash[73]:   HTTP API:  http://127.0.0.1:8766\n    │ [    1.644706] 5HaD0W systemd[1]: Started [redacted] - Getty on tty4.\n    │ [    1.648416] 5HaD0W systemd[1]: Started [redacted] - Getty on tty5.\n    │ [    1.650475] 5HaD0W systemd[1]: Started [redacted] - Getty on tty6.\n    │ [    1.650823] 5HaD0W systemd[1]: Reached target getty.target - Login Prompts.\n    │ [    1.651737] 5HaD0W systemd[1]: e2scrub_reap.service: Deactivated successfully.\n    │ [    1.651972] 5HaD0W systemd[1]: Finished e2scrub_reap.service - Remove Stale Online ext4 Metadata Check Snapshots.\n    │ [    1.656097] 5HaD0W systemd[1]: Reached target multi-user.target - Multi-User System.\n    │ [    1.659353] 5HaD0W systemd[1]: Starting systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP...\n    │ [    1.672955] 5HaD0W systemd[1]: systemd-update-utmp-runlevel.service: Deactivated successfully.\n    │ [    1.673096] 5HaD0W systemd[1]: Finished systemd-update-utmp-runlevel.service - Record Runlevel Change in UTMP.\n    │ [    1.674048] 5HaD0W systemd[1]: Startup finished in 419ms.\n    │ [    1.709224] 5HaD0W CRON[80]: pam_unix(cron:session): session closed for user adom\n    │ [    1.826889] 5HaD0W login[178]: pam_unix(login:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [    2.629388] 5HaD0W code-server[75]: [2026-11-02T04:22:48.144Z] info  code-server 4.124.2 9fe7eb79d5ab2f2ed369d0e79cce4dbc6fe00a31\n    │ [    2.630977] 5HaD0W code-server[75]: [2026-11-02T04:22:48.148Z] info  Using user-data-dir /home/adom/.local/share/code-server\n    │ [    2.641984] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info  Using config file /home/adom/.config/code-server/config.yaml\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info  HTTP server listening on http://127.0.0.1:7380/\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info    - Authentication is disabled\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info    - Not serving HTTPS\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info  Using proxy URI in PORTS tab: http://{{port}}.localhost:47083/\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info  Session server listening on /home/adom/.local/share/code-server/code-server-ipc.sock\n    │ [    2.642172] 5HaD0W code-server[75]: [2026-11-02T04:22:48.162Z] info  Using custom extensions gallery\n    │ [   11.906006] 5HaD0W unknown: WSL (2 - Interop) ERROR: CreateLoginSession:2766: Timed out waiting for user session for uid=1001\n    │ [   12.539148] 5HaD0W login[359]: pam_unix(login:session): session opened for user root(uid=0) by root(uid=0)\n    │ [   12.540531] 5HaD0W login[371]: ROOT LOGIN  on '/dev/pts/2'\n    │ [   15.711663] 5HaD0W CRON[402]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [   15.712226] 5HaD0W CRON[403]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [   15.815342] 5HaD0W CRON[402]: pam_unix(cron:session): session closed for user adom\n    │ [   22.670463] 5HaD0W unknown: WSL (2 - Interop) ERROR: CreateLoginSession:2766: Timed out waiting for user session for uid=0\n    │ [   22.876425] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   26.006978] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   26.008623] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   26.008907] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   28.712708] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   31.833051] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   31.835392] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   31.835478] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   39.172515] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   42.290925] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   42.292325] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   42.292392] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   48.666007] 5HaD0W kernel: hv_balloon: Max. dynamic memory size: 16224 MB\n    │ [   49.768446] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   53.012753] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   53.014675] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   53.014778] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   60.913390] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   64.073958] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   64.074706] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   64.074900] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   71.500436] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   74.620961] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   74.627362] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   74.627673] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   75.820392] 5HaD0W CRON[733]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [   75.823136] 5HaD0W CRON[734]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [   75.932425] 5HaD0W CRON[733]: pam_unix(cron:session): session closed for user adom\n    │ [   82.672517] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   85.828484] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   85.829498] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   85.829594] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   93.372461] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [   96.502129] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [   96.503275] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [   96.503448] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  104.132606] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  107.282256] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  107.283350] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  107.283526] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  114.988727] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  118.137943] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  118.141402] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  118.141657] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  126.612476] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  129.737479] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  129.738437] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  129.738597] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  135.935160] 5HaD0W CRON[976]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  135.935555] 5HaD0W CRON[977]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  135.998456] 5HaD0W CRON[976]: pam_unix(cron:session): session closed for user adom\n    │ [  137.156425] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  140.286614] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  140.287703] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  140.287884] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  147.828436] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  150.987054] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  150.987922] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  150.987974] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  158.576433] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  161.711438] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  161.712866] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  161.713051] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  169.156491] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  172.282758] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  172.284333] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  172.284537] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  180.316437] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  183.600055] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  183.601673] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  183.602605] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  191.620435] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  194.760733] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  194.762027] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  194.762254] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  196.001136] 5HaD0W CRON[1286]: pam_unix(cron:session): session opened for user adom(uid=1001) by adom(uid=0)\n    │ [  196.001724] 5HaD0W CRON[1287]: (adom) CMD (python3 /home/adom/.local/share/adom/codex/runtime/manage.py ensure-watch >/dev/null 2>&1 # adom/codex runtime)\n    │ [  196.062317] 5HaD0W CRON[1286]: pam_unix(cron:session): session closed for user adom\n    │ [  202.460499] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  205.606677] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  205.607789] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  205.612141] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  213.164481] 5HaD0W systemd[1]: Started hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\n    │ [  216.319303] 5HaD0W systemd[1]: Stopping hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1...\n    │ [  216.322315] 5HaD0W systemd[1]: hd-loopback-probe.service: Deactivated successfully.\n    │ [  216.322445] 5HaD0W systemd[1]: Stopped hd-loopback-probe.service - /usr/bin/python3 -m http.server 47996 --bind 127.0.0.1.\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  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 1.\n    → REPAIR: forcing a clean code-server restart and retrying verification…\n  --- verification round 2/3 ---\n  ✓ code-server binary present in distro\n  ✓ code-server process running in distro\n  ✓ code-server LISTENING on :7380 inside distro\n  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 2.\n    → REPAIR: forcing a clean code-server restart and retrying verification…\n  --- verification round 3/3 ---\n  ✓ code-server binary present in distro\n  ✓ code-server process running in distro\n  ✓ code-server LISTENING on :7380 inside distro\n  … probing host 127.0.0.1:7380 (TCP)…\n    … not reachable yet (1/10), waiting…\n    … not reachable yet (3/10), waiting…\n    … not reachable yet (6/10), waiting…\n    … not reachable yet (9/10), waiting…\n  ✗ host 127.0.0.1:7380 still unreachable after round 3.\n  · Windows could not reach the workspace; not switching to NAT networking: WSL runs 'none', not mirrored\n  ✗ network check: WSL networking mode 'none', workspace internet UNREACHABLE, network gate not confirmed\n  ✗ workspace setup attempt failed (will retry if attempts remain): code-server never became reachable on host 127.0.0.1:7380 after 3 verify/repair rounds. The VS Code pane would hang on 'Starting AI Environment', so step 1 is failing rather than advancing on a broken workspace.\n\nWindows could not reach the workspace even after the network check. network check: WSL networking mode 'none', workspace internet UNREACHABLE, network gate not confirmed. A VPN, a security tool or a firewall policy that blocks WSL is the usual cause.",
    "percent": 0.0,
    "attempts": 0,
    "max_attempts": 3
  }
}