Repository navigation
feat(comms): has_replied on chats + unreplied unread split - #1082
Merged
Merged
Conversation
…ounts Uncategorized chats the viewer never replied to (inbound DMs, blast threads) now belong in the General inbox tab. Chats gain has_replied, and unread_by_category gains uncategorized_unreplied (a subset of uncategorized, so older clients keep working). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dylanjeffers
added a commit
to AudiusProject/apps
that referenced
this pull request
Nov 13, 2026
…pills (#14783) Needs AudiusProject/api#1082 for the new behavior. Before that deploys, nothing changes, because a missing `has_replied` falls back to Priority. **Why:** In the #eng thread on 9/10, Michael settled on Priority as the default view, curated to the user, with "a dot on general for new messages". What shipped put every uncategorized chat in Priority, so General only filled up if you sorted chats by hand. **Tab rule** (`getInboxTabForChat`): - An explicit Priority or General choice wins. - Uncategorized chats you have replied in → Priority. New inbound DMs and blast threads you never answered → General. - Your own sent blasts stay in Priority. - Sending a message in a General-by-default chat moves it to Priority right away. **Dots:** The tab dots use `uncategorized_unreplied` from `unread_by_category`. The dot now sits inside the pill after the label instead of hanging off the corner, and turns white on the selected (purple) pill. That needed a new `endAdornment` prop on `SelectablePill`, added to both harmony and harmony-native. **Menus/swipes:** These now offer only the tab the chat isn't shown in. Pushes are unchanged: only chats filed as General explicitly are silent. Tests: common `category.test.ts` (tab rule, unreplied buckets, reply moves a chat, blast copies don't count, filing moves unreads) and web `InboxTabs.test.tsx`. Typecheck and lint are clean on the touched files. Mobile has not been run on a device. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backs the inbox default change in AudiusProject/apps (linked from that PR). Michael's spec was that Priority holds only chats you chose and new chats land in General. What shipped put every uncategorized chat in Priority, so General stayed empty.
New rule (computed client-side from these fields): an explicit category wins. Otherwise a chat is Priority once you have sent a message of your own in it (blast copies don't count) and General until then.
GET /comms/chatsand/comms/chats/:idreturnhas_repliedper viewer. Sent blasts returntrue.GET /comms/chats/unread_by_categoryaddsuncategorized_unreplied, a subset ofuncategorized. Older clients ignore it and behave as before.chat_message_chat_created_non_blast_idx (chat_id, created_at, user_id) WHERE blast_id IS NULL.Tests: extended
TestPostMutateChatSetCategory(per-viewerhas_replied) andTestGetUnreadCountByCategory(replied, blast-copy-only and other-member-only chats).🤖 Generated with Claude Code