Test build for nathanvdh's handle-disconnect-exceptions branch, combined with everything already proven here.
Ports his two additions onto the full stack (ACK fix + keep-alive poll + WiFi-drop recovery + favourites + console temp):
- Escaped main-loop exceptions are now ERROR-logged via a task done-callback (a silently-dead read loop is how the zombie-client bug stayed invisible)
- run()/stop() lifecycle hardening: stop() is safe when never started, run() is restartable
His OSError widening was already in v0.4.3 (same fix, converged independently). No behaviour change expected in normal operation - the point of this soak is that any future escaped exception shows up loudly in the log instead of silently killing the connection.
TDD: 56 tests green.