A dropped connection says so, instead of the generic error card

A user's run failed with the wizard's generic "check your Ollama
settings" card and could not be replicated with the same key - because
the key and model were never the problem: a raw error (a mid-run socket
drop, a wifi/LTE switch, the app backgrounded by the phone OS) leaked
out of the NDJSON reader as a DOMException, and the wizard can only
show the generic card for unknown errors.

The reader now classifies everything: abort -> "cancelled", stall ->
"the model stopped responding", anything else on the wire -> "the
connection dropped mid-run, try again". Pinned with a fetch stub that
kills the stream mid-run in the wizard suite (95 checks).

Contrast 0 findings, mobile 124/124, chat 101/101, regression 44/44,
i18n 13/13, native 33/33. Version 0.4.1, SW -> freezmo-v70.
This commit is contained in:
Martin Dvořák 2026-10-13 18:51:24 +00:00
commit b70b0e83cf
6 changed files with 71 additions and 15 deletions

View file

@ -1411,6 +1411,15 @@ Things I chose while building, with the reasoning:
pre-blurred wallpaper — the scene is clearly visible through the glass, and the
pixel-contrast scan still passes.
76. **A dropped connection says so.** A user's run failed with the wizard's generic "check your
Ollama settings" card, and it could not be replicated on the owner's machine with the same key
— because the key and model were never the problem. A raw error (a mid-run socket drop, a
wifi/LTE switch, an app backgrounded by the phone OS) leaked out of the NDJSON reader as a
DOMException, and the wizard can only show that generic card for unknown errors. The reader now
classifies everything: an abort is "cancelled", a stall is "the model stopped responding", and
anything else on the wire is "the connection dropped mid-run — try again". Pinned with a
fetch stub that kills the stream mid-run in the wizard suite (95 checks).
75. **A quiet run can no longer load forever.** A user got stuck on the wizard's loading screen:
a hung model meant silence, and silence was indistinguishable from work — the server's own hard
deadline is 2x `OLLAMA_TIMEOUT_MS` (ten minutes by default), and the client waited on a dead