00988f3b89
The renderer pings each pool backend every 60s (`hermes:backend:touch` → `touchPoolBackend` → updates `lastActiveAt`). The LRU eviction cap used a keepalive-fresh window of 90s — only 1.5× the ping cadence — to decide whether a backend was "plausibly still alive". One missed or delayed ping pushed a live backend past the threshold and the cap-driven eviction killed the active profile's backend mid-session, restarting the gateway and re-minting runtime ids. On WSL2, where the renderer→Electron IPC roundtrips through 9p, brief 9p hiccups commonly stretch a ping to seconds of observed silence, producing the ~80–90s exit / ~2 min cycle reported in #95189 (122 gateway starts on 2026-08-26 alone, driving renderer OOM via reconnect churn at ~5GB/day). Widen POOL_KEEPALIVE_FRESH_MS to 4 minutes (3× ping cadence + IPC stall headroom, still bounded well below POOL_IDLE_MS=10min). Backends with one or even two missed pings are now spared; truly idle backends (multiple lapses, minutes idle) remain eligible for eviction by the cap and the idle reaper. The constant is also overridable via HERMES_DESKTOP_POOL_KEEPALIVE_FRESH_MS to make this tunable without a rebuild.