You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Keep the review after a send and never hand a prompt to a shell pane (#1321)
Sending a review erased it while the agent received nothing. Two causes.
A resolved sendAgentMessageNow was treated as proof of delivery: it drops the
AgentPromptDelivery the backend returns, so the renderer wiped inlineComments on
every resolve. Even a tmux 'delivered' verdict only means the keystrokes were
accepted, not that the agent read them. Every send path now stamps sentAt and
keeps the text; clearing stays the confirmed Reset review.
resolveAgentPromptTargetPane fell through to the session's active pane whenever a
task had two or more live agent panes and no recorded focus, so a hand-off could
be typed into a focused shell split and still report success. The active pane now
wins only when it is itself an agent pane, otherwise the first live agent pane
does, and both fallbacks log the pane they picked.
Pressing "Send to agent" on a diff review could erase the whole review while the agent received nothing — the send reported success as soon as the keystrokes left dev3, which is not the same as the agent reading them. Sent comments are now marked as sent and kept, exactly like a single comment sent on its own, and clearing them stays the explicit Reset button. A second cause is fixed underneath: on a task with several agent panes and no recorded focus, the hand-off could be typed into whatever pane you were looking at, including a plain shell — it now always goes to an agent pane, and the chosen pane is written to the log.
Copy file name to clipboardExpand all lines: docs/ux/PRODUCT_UX_BIBLE.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -200,8 +200,8 @@ Layout = left **Files aside** (collapsible, `22rem`) + right **diff stream**.
200
200
-**Files aside** contains two cards: the **Review export card** (top) and the **Files card** (read-progress + expand/collapse-all + the file tree).
201
201
-**Per-file header (diff stream):** status chip (A/M/D/R/C/T/?), path (click = expand/collapse), **copy-file-path** icon button (role `neutral`/icon), `+N/−N` stat pill, **mark-read** checkbox (success-tinted when read), expand/collapse caret. The path renders as **one truncating line at every width** (directory truncates, basename always survives) and the identity column carries a `basis-[15rem]` floor, so the trailing controls wrap onto a second row instead of squeezing the path into a one-character-per-line column.
202
202
-**Inline comments:** drag across the gutter to select a line range (or use the hover `+` widget for a single line) → composer opens → comment is added to a per-file/per-side/per-line thread. Threads render inline and are editable/deletable in place.
203
-
-**Composer actions (budget: 3):**`Cancel` (`neutral`), **`Send now`** (`secondary`), `Add comment` (`primary`). `Send now` is the one-shot lane: the comment is parked in the review, shipped to the agent, then dropped on success — a single remark costs one click instead of add → send → delete. A failed send leaves it in the review, so nothing typed is lost.
204
-
-**Per-comment actions (budget: 3, no growth):**`Edit` (`neutral`), `Delete` (`destructive`), `Send to agent` (`secondary`) — the same pattern as the GitHub thread action, pushing that single comment into the task terminal. Sending is per comment and **sticky**: the comment is marked `Sent`, persisted with the review, and leaves the export payload, so `Copy review` and the batch `Send to Agent` cover **only unsent** comments. Sent comments stay visible and re-readable in the export card (greyed, `Sent` badge); editing one clears the mark so the edited text can be delivered again.
203
+
-**Composer actions (budget: 3):**`Cancel` (`neutral`), **`Send now`** (`secondary`), `Add comment` (`primary`). `Send now` is the one-shot lane: the comment is parked in the review and shipped to the agent in one click instead of add → send. **No send ever deletes a comment**— a resolved send only proves the keys left dev3, so the text is marked `Sent` and kept; clearing stays the explicit, confirmed `Reset review` (decision `never-destroy-a-review-on-send`).
204
+
-**Per-comment actions (budget: 3, no growth):**`Edit` (`neutral`), `Delete` (`destructive`), `Send to agent` (`secondary`) — the same pattern as the GitHub thread action, pushing that single comment into the task terminal. Sending is per comment and **sticky**: the comment is marked `Sent`, persisted with the review, and leaves the export payload, so `Copy review` and the batch `Send to Agent` cover **only unsent** comments. Sent comments stay visible and re-readable in the export card (greyed, `Sent` badge); editing one clears the mark so the edited text can be delivered again. The **batch** send marks its comments the same way rather than wiping the review — the pre-2026-08-10 auto-clear destroyed reviews whose delivery was never actually proven.
205
205
206
206
**Review export card — action hierarchy (the one budgeted cluster):**
Copy file name to clipboardExpand all lines: docs/ux/UX_DECISIONS.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,12 @@ Compact index of UX architecture decisions — the *why* behind rules that live
4
4
`PRODUCT_UX_BIBLE.md` / `ux-architecture.yaml`. Max ~5 lines per entry; details live in
5
5
git history, PRs, and the records in `decisions/`. Newest first.
6
6
7
+
## 2026-08-10 — A send marks the review, it never deletes it
8
+
9
+
-**Rule:** No send path (per-comment, composer `Send now`, or batch) may clear inline review comments; they are stamped `Sent`, and only the confirmed `Reset review` destroys anything.
10
+
-**Why:** A resolved send proves the keystrokes left dev3, not that the agent read them — a reviewer lost a whole review to a send that never landed; the rejected alternative, clearing only on a proven `delivered`, still deletes on the common tmux case where the agent's TUI swallows the paste.
## 2026-08-10 — Review export card is a title line; the composer owns the one-shot send
8
14
9
15
-**Rule:** The export cluster (count + Copy + Send + icon-only Reset) sits on the card's title line, renders nothing when the review is empty, and the count is plain text — never a bordered box; the composer gains `Send now`, which delivers one remark and drops it.
0 commit comments