Phones offer no easy hard-refresh, so a cached index.html kept serving an old bundle after a deploy (the live feed showed "reconnecting"). index.html and the SPA catch-all now send Cache-Control: no-store, while hashed /assets stay immutable. Also retry the first socket reconnect after 1s (was 2s) and surface the close code in the header so a failure is actionable on a phone.