Only mark Inbox items read on explicit action
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Problem
In the Desktop Inbox, opening or selecting an unread row immediately marks the item read. This makes browsing destructive to triage state: a user cannot preview several unread items without changing the queue, and an item can disappear from **Show unread only** merely because it was selected.
Current code couples the two actions in the Inbox selection handler: after selecting the item, it calls `markItemRead(itemId)`.
- Selection handler: https://github.com/block/buzz/blob/63496cc1d4c6f1b7c613801bdcc694169dcf391a/desktop/src/features/home/ui/HomeView.tsx#L673-L687
- Explicit row-level **Mark as read** action already exists: https://github.com/block/buzz/blob/63496cc1d4c6f1b7c613801bdcc694169dcf391a/desktop/src/features/home/ui/InboxListPane.tsx#L421-L435
- Read action advances the shared channel/thread/message read markers: https://github.com/block/buzz/blob/63496cc1d4c6f1b7c613801bdcc694169dcf391a/desktop/src/features/home/useHomeInboxReadState.ts#L181-L227
## Steps to reproduce
1. Open the Desktop Inbox with one or more unread items.
2. Enable **Show unread only**.
3. Select an unread row to preview its conversation in the detail pane.
4. Observe that selection marks it read; moving to other items drains or changes the unread queue.
## Expected behavior
Use a Slack-style inbox triage model: selection previews an item, while read/completed state changes only through an explicit checkoff or **Mark as read** action. Selected and unread should remain separate states.
This request does not prescribe a storage or protocol implementation. The existing explicit read action and shared NIP-RS markers are relevant behavior to preserve.
## Acceptance criteria
- Opening or previewing an unread Inbox item does not mark it read.
- Read state changes only through an explicit checkoff or mark-read action.
- Users can move through multiple unread items without losing their queue.
- Existing manual **Mark unread** behavior remains coherent with explicit completion.
- Keyboard and accessibility behavior are defined: preview/select and mark-read are distinct operable actions with clear focus and screen-reader labels.
- An explicit read-state change persists correctly across refresh and devices.
- Selected styling is distinguishable from unread styling.
- In **Show unread only**, previewing the selected row does not remove it from the list; explicit completion follows a predictable next-item behavior.
## Related work reviewed
- #102 broadly requested read/done handling and was closed after the original Inbox work; it did not establish explicit-only semantics.
- #1114 added Inbox read/unread handling.
- #1116 described marking unread rows read when opened; it is closed and not a request to decouple selection.
- #2045 merged the current conversation-oriented Inbox behavior.
- #3669 and its open PRs concern persistence of the **Show unread only** preference, not when an item becomes read.
- #3365 concerns scroll targeting after read-state changes, not explicit checkoff semantics.
GitHub Discussions are disabled for this repository, so there was no discussion thread to match.
Contributor guide
Assessment
This issue has not been assessed yet.