f19aff9b79
Root cause: agent-health.service runs Type=oneshot with the default KillMode=control-group. restart_browser() spawned the replacement chromium with nohup under the service, so systemd SIGKILLed it the moment the service exited. Every 5-min tick: FAIL -> restart -> RECOVERED -> SIGKILL at teardown. opm and pip were permanently dark and dm.py read masked it (empty output, exit 0). Fix: launch replacements via systemd-run --user --scope (backgrounded) so the browser lives in a transient scope outside the service cgroup and survives teardown. setsid does NOT escape either. Note: systemd-run --scope waits for the scope even with --no-block (verified 2026-10-03), hence the backgrounding. Same fix in chromebox-watchdog.sh (timers currently off). dm.py: dm_read() now uses run_full() and prints a WARNING to stderr with rc + last error line instead of failing silently on empty reads. Trailers: Session: sidechat/opm-blind-fix