The stage-transition payload {"state":"loading","payload":{"stage":"mmproj_model"}}
lacks the stages/current/value keys — accessing them raised KeyError which crashed
the LogWatcher task, freezing the UI at the last good state indefinitely.
- log_parser: skip loading payloads missing stages/current/value (next message
has the full payload within milliseconds)
- log_watcher: wrap on_line calls in try/except so any future parser error
keeps the tail loop alive instead of killing the task
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- log_watcher: add --reopen-log mode (close/reopen each poll) for sshfs/network
filesystems; fix nonlocal clients bug causing UnboundLocalError on first broadcast;
fix list(clients) copy to prevent RuntimeError on concurrent set mutation
- log_parser: capture progress=X.XX from prompt timing lines into Metrics.prompt_progress
- frontend: show progress bar during processing_prompt state with PROMPT N% label;
widen stats panel to 300px; remove model name truncation; add drag handle on
right border of stats panel to resize between 280px–840px
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>