feat(notifications): add Badge and room-message delivery - #2119
Merged
Merged
Conversation
…-v56 * origin/main: docs(agents): simplify instructions for ASD-STE100 (#2122)
hmans
marked this pull request as draft
August 26, 2026 16:45
hmans
marked this pull request as ready for review
August 26, 2026 16:45
…-v56 * origin/main: chore(cli): remove unused internal/service package (#2128) feat(bots): activate bots through notifications (#2127) feat(frontend): consolidate app preferences into settings (#2126) fix(frontend): move account settings to top (#2125) # Conflicts: # cli/internal/core/messages.go # docs/fdr/FDR-012-notifications.md
This was referenced Aug 27, 2026
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.
Why
Notification policy needs two missing controls. Users must be able to request a neutral room dot without creating a notification, and they must control how root messages in channel rooms request their attention. The Message Read Cursor must remain available for the New messages separator without forcing a room dot.
What changed
Badgedelivery mode. It creates only the existing neutral room or thread dot. It does not create a notification-list item, play a sound, send a push notification, or set an application-icon badge.Room messagesas an independent notification cause for root messages posted directly to channel rooms. Its product default isBadge. It applies at server, room-group, and channel-room scopes, but not to direct-message rooms.@all @hmanscan therefore apply each configured policy without collapsing the causes.message.readvisibility, and effective policy at the exact source event sequence. Later visibility loss records a durable boundary so old output does not reappear after permission regain. Thread messages and direct messages keep their existing causes.message.readandmessage.read.interactionschanges per exact notification target. A direct mention remains visible through interaction-scoped access, while output for inaccessible messages is removed.No notification-specific event or marker is added to
EVT. Badge output uses the boundednotification_unread_marker.*runtime state, and Room message decisions derive from the existing persistedMessagePostedEvent.Compatibility and rollout
Badge; additive public and persistedroom_messages = 10policy field and signal variant; additive transient unread invalidation; and a behavioural change to the publichas_unreadfields.has_unreadbehavioural change is intentional: cursor lag no longer implies a dot. Clients that need message position must continue to use the Message Read Cursor. This change ships inside the coordinated 0.5 server replacement boundary.has_unreadfields, but they do not show a new Room message notification-list item.Unimplementeduntil a supporting binary serves it again. The older server does not reinterpret or discard that occurrence.Test plan
Passed locally:
mise codegen-protoandmise run build-api-types.origin/main.mise test-cli, including regression coverage for retaining direct-mention Notification and Badge output through interaction-scoped read access.mise lint-frontend.mise test-frontend(including 71 Storybook files and 212 Storybook tests).mise run test-e2e -- notification-policy.test.ts(4 passed), including Room messages Off suppressing the dot while preserving the New messages separator.mise run test-e2e -- notifications.test.ts --grep "Room message notifications"(1 passed).mise license-check.The complete GitHub Actions suite passed on the final commit.