Context
During a Google auth expiry, HandleGoogleAuthExpiredError flips connected=false and sets last_error to "Google Messages session cookie expired; refreshing and reconnecting..." while the watchdog self-heals (#74). Both status pills (native googleStatusText in OpenMessageApp.swift and web googleStatusText() in index.html) render this window as "Needs reconnect".
Observed 2026-07-08: a New Message send failed with "session expired; refreshing and reconnecting. Try again in a few seconds", and moments later Platforms showed "Connected" — the heal had already finished. The pills were honest at both instants, but "Needs reconnect" during the heal reads as user action required when the watchdog is already fixing it.
Proposal
When paired && !connected and last_error matches the auth-expired refresh message (or a dedicated reconnecting bool is exposed on /api/status), show "Reconnecting…" instead of "Needs reconnect" in:
- native Platforms view (
googleStatusText, OpenMessageApp.swift)
- web platforms overlay (
googleStatusText(), index.html)
A dedicated status field beats string-matching last_error; the backend already knows it is mid-heal (googleAuthExpired + refresh in flight in the watchdog).
🤖 Generated with Claude Code
Context
During a Google auth expiry,
HandleGoogleAuthExpiredErrorflipsconnected=falseand setslast_errorto "Google Messages session cookie expired; refreshing and reconnecting..." while the watchdog self-heals (#74). Both status pills (nativegoogleStatusTextin OpenMessageApp.swift and webgoogleStatusText()in index.html) render this window as "Needs reconnect".Observed 2026-07-08: a New Message send failed with "session expired; refreshing and reconnecting. Try again in a few seconds", and moments later Platforms showed "Connected" — the heal had already finished. The pills were honest at both instants, but "Needs reconnect" during the heal reads as user action required when the watchdog is already fixing it.
Proposal
When
paired && !connectedandlast_errormatches the auth-expired refresh message (or a dedicatedreconnectingbool is exposed on/api/status), show "Reconnecting…" instead of "Needs reconnect" in:googleStatusText, OpenMessageApp.swift)googleStatusText(), index.html)A dedicated status field beats string-matching
last_error; the backend already knows it is mid-heal (googleAuthExpired+ refresh in flight in the watchdog).🤖 Generated with Claude Code