Problem
sessionManager.sendApproval() optimistically removes the approval from the timeline (dismissApproval) and then await client.send(...). If the send rejects (relay hiccup), the error is unhandled — the banner is gone but the agent never received the decision, and the user gets no feedback or retry.
Suggested fix
Keep the approval pending (or restore it) and surface a retry on send failure; only dismiss after the decision is acknowledged.
Where
mobile/src/lib/sessionManager.ts (sendApproval, lines ~400–406).
Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.
Problem
sessionManager.sendApproval()optimistically removes the approval from the timeline (dismissApproval) and thenawait client.send(...). If the send rejects (relay hiccup), the error is unhandled — the banner is gone but the agent never received the decision, and the user gets no feedback or retry.Suggested fix
Keep the approval pending (or restore it) and surface a retry on send failure; only dismiss after the decision is acknowledged.
Where
mobile/src/lib/sessionManager.ts(sendApproval, lines ~400–406).Filed from a UI research sweep of the Helm mobile app (landing + live demo session) using Playwright + full source review, cross-referenced against Claude, ChatGPT, GitHub Copilot Chat, and Codex/Claude Code UIs.