Repository navigation
fix(chat): keep send recovery above the composer - #17
Conversation
|
Independent code review completed for this change before publication: correctness, project standards, tests, maintainability, reliability, frontend races and adversarial review. No actionable findings remain. The suggested short-phone geometry and final-row keyboard-dismiss checks were added to the existing full production PaneTerminal browser suite; a narrow closure review found no findings, and that suite passed on desktop/phone in light/dark themes. The full fast gate on committed revision No external model review ran. The unavailable route failed before code egress and was cleaned up; review used the available in-process reviewers. This comment records the completed review independently of any skipped CodeRabbit check. Hosted CI remains the merge gate. |
|
Deployed and verified revision Installed-source native green MP4, screenshots, results and reproduction harness. Both actual queued Send now attempts produced one native user turn and one submit, zero faded duplicates, and one compact non-resendable recovery notice. Clipboard refusal, terminal peek/back, preserved draft/focus, keyboard dismissal, next-message unblock, reload and short-phone visibility passed with no page errors. The harness explicitly projects the interruption error to generic The first installed attempt was an ordinary confirmed send before the browser observed working status, so it was not counted as Send now proof. The final harness requires browser working status and an actual queued response. No app code changed during this deployment proof. Fork merge remains gated on the hosted checks. |
Change
Keep unconfirmed-send recovery in a compact raised card immediately above the composer so Dismiss stays reachable while reading or scrolling chat. The saved text is folded, avoiding a second visible message bubble. An exact scoped sent/discarded receipt removes the saved copy automatically; equal native text alone cannot confirm delivery or release a queue fence.
This replaces the fork’s inline recovery presentation. Copy, terminal review and keyboard dismissal preserve the draft. Design references: Claude Code’s controls for taking back queued input and Paseo’s canonical user echoes.
Related: devswha#2792
Validation
bun run check fast: passed, 10,625 unit tests, 41 repository skips; typecheck/build and generated-file checks passed.bun run check run bun scripts/sent-waiting-browser-qa.ts: 18 cases passed across desktop/phone and PC namespaces; covers wrong/exact receipts, competing attempts, reload, focus and transcript virtualization.chat-virtual-browser-qa.tsandterminal-autoswitch-demo-regression.ts: passed. The production recovery case includes 390 × 470 disclosure geometry, denied clipboard fallbacks and Enter dismissal back to the owning composer, with draft preservation and no new input.codex_interrupt_unconfirmedto genericsubmit_changed; it does not establish the original remote host’s exact failure. An additional attempted automatic-queue control remained unconfirmed and is not counted as green.Screenshots
Native MP4, screenshots, results and reproduction harness.
Earlier inline screenshots and recordings are preserved in the evidence branch. These after images use isolated native test sessions; no live user chat was recorded.