Adom Hydrogen
Public Made by Adomby adom
The whole Adom experience as one signed native app: your editor, your AI agent, and the full electronics design toolchain, running locally on your own machine.
Workspace keeps dropping ('CONTAINER STOPPED' / 'Cannot reconnect, reload window'): false-negative health probe forces code-server restarts; code-server is actually up (HTTP 200, NRestarts=0)
Type: Bug report
Symptom: The workspace keeps dropping. HD shows "CONTAINER STOPPED" and pops "Cannot reconnect. Please reload the window." The user reloaded 5 times in about 30 minutes (2026-08-03, HD session started 09:26:51).
Diagnosis: the disconnects are self-inflicted by a false-negative health probe. code-server and the distro are fine.
What I verified in the container while HD was calling it dead:
- code-server answers instantly from inside the distro:
curl localhost:7380/healthzreturns HTTP 200 in 3 ms; the extension on:8821returns 200. - systemd reports code-server
active (running)withNRestarts=0. It never crashed on its own. Its only restarts are the ones HD forced (last forced start 10:04:18). - WSL
networkingMode=mirroredis enabled (HD logs it at startup), so host to distro loopback is available.
What HD's health monitor did instead, today, in this one session:
- Declared the workspace unhealthy 136 times, every one reading
code-server not responding (http=Some(false) ...). Thehttp=Some(false)means HD's own host-side HTTP probe to code-server failed, while code-server was answering 200 from inside. wsl_aliveflips betweentrueandfalseacross consecutive probes seconds apart, so HD's WSL liveness check (hostwsl.exe) is also flapping.- Forced 7 bounded code-server restarts (rate-limited to 1 per 5 min). Each forced restart plus each unhealthy verdict is what tears the iframe's connection and raises "Cannot reconnect, reload the window." The remediation is more disruptive than the transient it thinks it sees.
The tell that this is HD's prober, not the services: at the exact same timestamps, HD's AD health probe is also failing and respawning Adom Desktop every ~10 seconds:
10:04:17 [wsl] health monitor: restarting code-server (bounded)
10:04:20 [ad-supervisor] AD health probe failed - attempting respawn -> pid 92112
10:04:22 [wsl] Workspace unhealthy — code-server not responding (http=Some(false))
10:04:30 [ad-supervisor] AD health probe failed - attempting respawn -> pid 47176
Two independent targets (code-server inside the distro, AD on the Windows host) failing the same probe in lockstep is a prober fault, not two services dying together. The host was not starved either: the status bar read CPU 1 percent, RAM 6 percent. Corroboration: my adom-desktop calls to the host started returning empty mid-investigation, consistent with AD being respawned (breakaway-detached) out from under the relay every 10 seconds.
Likely root cause (hypothesis): HD's health-probe path is unreliable. The wsl.exe-based liveness check flaps (it is known to wedge, serialize behind a global lock, and throw E_UNEXPECTED), and the host to distro HTTP probe intermittently returns false under whatever is also driving the concurrent AD-probe failures. This looks related to the AD respawn churn and the ~20 Hz relay reconnect a parallel investigation is tracking: HD respawning AD in a loop would produce exactly that relay churn and log storm.
Asks:
- Stop acting on single false negatives. Require several consecutive failed probes with a sane timeout, and confirm from inside the distro (a real request to
localhost:7380) before declaring the workspace down. code-server answering 200 in 3 ms must not read as "not responding." - Make the remediation less destructive than the fault. A forced code-server restart and a "reload the window" prompt drop the user's session. Do not trigger them on a flapping probe; that is the actual cause of the 5 reloads.
- Fix the shared prober. code-server and AD probes failing together points at HD's probe mechanism or the host to distro channel, not at two services. Treat this and the AD respawn or relay churn as one root cause.
- Log probe results with the real error (timeout vs refused vs wsl error) and rate-limit the repeats. 136 identical unhealthy lines in one session is noise that hides the signal.
Env: HD build 458c322 era, code-server 1.124.2, distro Adom-Workspace, WSL mirrored networking on. Full HD log saved.