First open creates a session whose DB row the gateway persists lazily on the first prompt, so a freshly created (never prompted) session CANNOT be resumed. Any WS reconnect while sitting on it — tab switch + socket blip, app background, gateway restart — re-fired session.resume on that key; the gateway answered 4007 "session not found" and the bounded retry (desktop parity, #766) burned its budget on a permanently invalid key, leaving an error popup whose Retry could never succeed. - Skip the reconnect re-resume (and the doomed REST transcript fetch) while the current session has no confirmed server-side row (REST 200 / resume success / first MessageStart = first prompt accepted). Sessions picked from History stay optimistic-resumable even while their page transiently 5xxes. - Treat a definitive "session not found" (4007 RPC / 404 REST) as terminal: recover with a fresh chat + notice instead of the dead-end Retry overlay. - session.branch: keep the storage key in currentSessionId (the handler stored the runtime registry id, so every later resume 4007'd and the transcript 404). Tests: reconnect on an unconfirmed session must not resume or error; 4007 must recover with a new session (deduped, notice shown); branch keeps the storage id (currentSessionId + transcript fetch key). RED-GREEN proven: all three fail on the pre-fix code and pass with it. Co-authored-by: M57 <hy4ri@users.noreply.github.com>