Improve inbox thread updates#1114
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f6387f9aed
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 66d905a89b
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 084e71809b
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 279381c4be
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 248244200a
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 248244200a
ℹ️ 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".
|
🤖 Updated screenshots from the latest Inbox overviewInbox rows with unread dots, muted metadata, channel chips, two-line previews, thread activity, and the selected item detail. Filter menuInbox header controls with the filter menu, including Threads. Inbox hover trayHovering an inbox item reveals the row action tray. Inbox detail action trayThe selected inbox message detail uses the same midpoint action tray placement as the channel view. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 460a75f954
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a2cb35c921
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b58412ed7d
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 742b8c57d7
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
buzz/desktop/src/features/channels/useUnreadChannels.ts
Lines 1426 to 1429 in 6facbc5
When a cold-start catch-up returns more than MAX_ACTIVITY_ITEMS thread replies, relay history is newest-first (the DB query orders by created_at DESC in crates/buzz-db/src/event.rs), but this merge appends that newest-first batch and then keeps the tail. With an empty or small threadActivityRef, the cap drops the newest replies and persists older ones, so the Inbox can miss the latest unread thread activity after restart; sort by createdAt before slicing or reuse the sorted addThreadActivityItems helper here.
ℹ️ 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".
|
🤖 Addressed the latest Codex review note in 5ce9be2: cold-start thread activity now reuses the sorted |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 049aa2bfd3
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 704d620f4c
ℹ️ 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".
| options.onThreadReplyNotification?.(channelId, event); | ||
| } | ||
| } else { | ||
| options.onThreadReplyNotification?.(channelId, event); |
There was a problem hiding this comment.
Record mentioned roots on the thread-only route
When a non-DM thread reply @mentions the user in a thread they have not followed/participated in, shouldNotify is true but this new branch bypasses onChannelMessage. In useUnreadChannels, the only live path that calls recordMentionedRoot is handleChannelMessage, so the root never enters mentionedRootIds; the Home row can appear, but the channel thread's notification/read gate will not recognize the user's interest for that live mention-only thread.
Useful? React with 👍 / 👎.
| await expect(badges).toHaveCount(1); | ||
| await expect(badges).toContainText("2"); |
There was a problem hiding this comment.
Align casual-thread badge expectation with the notify gate
In this test, Tyler has no authored/participated/followed/mentioned stake in the Alice/Bob thread, but computeThreadBadgeCounts skips roots unless isNotifiedForThread(rootId) is true, so thread-unread-badge remains absent rather than reaching count 1/"2". I checked desktop/playwright.config.ts: this screenshot spec is included in the smoke project, so the new expectation will fail CI unless the production notification gate is changed too.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a419a8a57c
ℹ️ 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".
| ? threadBadgeFrontiersRef.current.get(activeChannelId) | ||
| : undefined, | ||
| isNotifiedForThread, | ||
| (rootId) => !isThreadMuted(rootId), |
There was a problem hiding this comment.
Clear casual thread badges when opened
With this broadened gate, every unmuted casual thread now gets a main-timeline unread badge, but the read effect above still returns unless isNotifiedForCurrentThread is true. For a thread the user has not authored, participated in, followed, or been mentioned in, opening the thread never advances thread:<root>, so the badge this line creates remains after the user reads and closes the thread. Either keep the badge gate aligned with the read gate or mark these casual threads read on open.
Useful? React with 👍 / 👎.




Summary
Tests
cd desktop && . ../bin/activate-hermit && ../node_modules/.bin/biome check --write ...cd desktop && . ../bin/activate-hermit && pnpm typecheckcd desktop && . ../bin/activate-hermit && pnpm test -- src/features/channels/unreadReadMarker.test.mjs src/features/home/lib/inbox.test.mjs src/features/home/lib/inboxViewHelpers.test.mjsgit diff --check