Gate review: `escalated` still cleared on every bare 'open', so once a flapping proxy kept
`reconnectFailingSince` past the 5-minute escalation, each flap re-fired the persistent
"connection lost" toast. The trio (attempt, failingSince, escalated) now resets together
inside the stable-open check, matching the manual/wake reset sites. The predicate moves to
apps/shared/reconnect-backoff.ts (`isStableOpen`, `RECONNECT_STABLE_OPEN_MS`) so the pooled
secondary sockets in store/gateway.ts — which reset their ladder on every 'open' the same
way — share one definition of "stable".