a9a0648f49
An unclean desktop exit (crash / SIGKILL / update handoff) stranded every `hermes serve` profile backend as an orphan (ppid=1) still serving, each holding its MCP child subtree — 31 orphans / ~1.3 GiB RSS on one install. Root causes + fixes: - serve had no parent-death watchdog: add _start_parent_death_watchdog() in web_server.py (mirrors slash_worker.py), gated on HERMES_PARENT_PID; os._exit cascades to MCP watchdogs. No-op for standalone `hermes serve`. - desktop passes HERMES_PARENT_PID in both serve spawn env blocks (main.ts). - POSIX teardown now group-kills (process.kill(-pid, ...)) so MCP grandchildren die too (backend-child.ts + waitForBackendExit SIGKILL fallback). Windows path unchanged (forceKillProcessTree). Tests updated + passing.