Preserve companion sends and recover saved source receipts - #2857
Preserve companion sends and recover saved source receipts#2857Chris0Jeky wants to merge 3 commits into
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30b5fb64af
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <ChatComposeBar | ||
| :message-content="messageContent" | ||
| :sending-message="sendingMessage" | ||
| :send-blocked="thinkingDirty || refreshingReceipt" |
There was a problem hiding this comment.
Disable retained-instruction sends while blocked
When a bound session still has a retained board-recovery turn and the embedded thinking deck is dirty—or while a receipt retry is running—this prop disables only ChatComposeBar. The Continue retained instruction control in ChatMessageList.vue remains enabled, but its handler reaches sendMessageToSession, which now returns immediately for the same sendBlocked/refreshingReceipt conditions, so clicking the visible action silently does nothing. Pass the blocked state to that send control and disable it as well.
AGENTS.md reference: frontend/AGENTS.md:L5-L5
Useful? React with 👍 / 👎.
…panion-continuity
|
PR2857 comment3973669791: MEDIUM usability, non-blocking. The retained-instruction button stays enabled while shared thinking is dirty or a receipt refresh runs, but the common send guard refuses the POST. This is an enabled control that does nothing, not an unguarded send or data-loss path. Track disabling/explaining this control in the #2808 continuation; do not reopen the completed parent review loop. |
Card companion sends now wait for unsaved thinking to be saved, so the message cannot silently use an older shared draft. Navigation remains in the thinking workspace while a send is pending, and the dialog explains that closing the browser does not cancel an accepted server request.
A failed post-send receipt read keeps the successful response and offers a GET-only retry with session/write-generation checks. Preview expiry uses the server receipt interval minus elapsed request time, avoiding client wall-clock skew. Source choice and Review/Apply remain explicit. Related to #2808; stacked on #2855.
Validation: 6,315 frontend tests passed (3 existing skips,407 files);99 targeted tests; production build/typecheck, scoped lint, doc links and governance passed. Chromium passed unsaved-thinking Ctrl+Enter prevention, a held real Mock POST/navigation guard, failed receipt GET then retry with one POST, saved source receipts,375px overflow/axe and unchanged card. Initial new-test mock/type fixtures failed and were corrected before these passes. Independent bounded Luna review found no direct HIGH/CRITICAL defects across the send paths, refresh races, navigation and preview expiry. Hosted checks pending.
Not verified: physical devices or live-provider quality. No backend runtime change or user database mutation.