Repository navigation
Dismiss an Inbox row without opening Command details #1407
Description
This was generated by AI during triage.
Since the Inbox became a three-pane mailbox (#1368), a Dismissal with JavaScript on is only reachable from Command details. Opening details for each row is slow (#1363), so clearing Needs you means one details pane per row. The Day shift wants to dismiss a row straight from its one-line row, with the mouse or the keyboard.
Agent Brief
Category: enhancement
Summary: Dismiss an Inbox row from its one-line row, with a d shortcut and an Undo notice, without opening Command details
Current behavior:
src/console/row.html still renders a Dismiss form (form[data-dismiss] in .row-actions) for every row with can_dismiss, but .one-line .command > :not(.row-head) { display: none; } in src/console/assets/console.css hides it whenever scripting is enabled. The only visible Dismiss is in Command details (src/console/peek.html), which also offers Undo for a dismissed row. POST /dismiss and POST /dismiss/undo (src/console/dismiss.rs) and the in-flight dismissals state in src/console/assets/console.js already handle pending feedback, errors and live replacement of rows.
Desired behavior:
- Every one-line row that can be dismissed (a row in Needs you or Ready for review) shows a Dismiss button on its line, always visible, beside Copy. Rows that can't be dismissed show none. Clicking it doesn't open or toggle Command details.
ddismisses the selected row (selected with j/k or a click) when it can be dismissed, and does nothing otherwise. Selection then moves to the next row, soj/dcan sweep a group.dfollows the existing keydown guards (inputs, open dialogs, modifiers). The keyboard help dialog lists it.- After an inline Dismiss (button or
d) succeeds, a short-lived notice appears, "Dismissed · Undo". Undo posts to/dismiss/undofor that Command and the row comes back. It reuses the existing pending/disabled/error feedback, and a failed Undo shows its error and can be retried. The notice is announced to screen readers (role="status"). - Dismissing uses the same request, CSRF token and Activity log entry as Command details. If details is open on the dismissed row, it updates the way it does now.
- The narrow (≤760px) layout keeps the button reachable without horizontal scrolling.
- Without JavaScript, rows keep showing their full Dismiss form as they do now.
Key interfaces:
src/console/row.html: the row's line (.row-head) and thecan_dismissflag.src/console/assets/console.css: the.one-linegrid.src/console/assets/console.js: theform[data-dismiss]submit handler,dismissals,showDismissal,select/items, the documentkeydownhandler, the keyboard help dialog.src/console/dismiss.rs: the existing endpoints. No server change should be needed.
Acceptance criteria:
- A
console/tests/inbox.test.cjstest clicks the inline Dismiss on a Needs you row and the row leaves the group without Command details opening. - A test selects a row with
j, pressesd, and sees the row dismissed and the next row selected.don a row that can't be dismissed, or while typing in an input, does nothing. - A test clicks Undo in the notice and the row comes back. A failed dismiss or undo shows its error.
- The keyboard help lists
d. - Site browser tests and
console/README.mdsay Dismiss is on the row and underd.site/how-it-works/andsite/architecture/no longer say Dismiss is only in Command details or on rows only without JavaScript.
Out of scope:
- Dismissing several rows at once, or "dismiss all".
- Making Command details faster (Command details take ~35s because every read re-parses historical Session traces #1363).
- Changes to what a Dismissal means or when a dismissed row comes back.
Activity