cef499fbb5
The Gateway WS health probe sampled only transport state — ready, open, heartbeat-ACK age, latency. A socket that stays ESTAB and keeps ACKing while zero gateway frames arrive (the #109521 "connected-but-deaf" incident) read healthy indefinitely, and the adapter went silent for hours with no log line and no watchdog firing. Two defects fixed: 1. Dispatch-side dimension. `on_socket_raw_receive` now stamps `_last_gateway_frame_at` for every inbound raw gateway frame — heartbeats and ACKs included, so a legitimately quiet server is not flagged. The health check gains an `event_silence` reason with its own bound, `websocket_event_max_silence_seconds` (default 300s, 0 disables the dimension alone). The stamp resets on `on_ready` so a reconnect never inherits pre-restart silence. Trip path is unchanged: consecutive failures -> retryable `discord_websocket_health_stale` -> the existing reconnect watcher builds a fresh adapter. 2. Silent probe disable. `_finite_positive_config_float` / `_config_int` mapped anything `float()` rejects ("15s", "nan", "true") to 0.0 with no log line, permanently disabling the watchdog invisibly. Unparsable and non-positive values now log one WARNING naming the knob and raw value. The new key rides the existing `_YAML_WEBSOCKET_LIVENESS_KEYS` seeding and is documented in the Discord guide's liveness section.