feat(desktop): add 10-minute message grouping window#1578
Merged
Conversation
added 2 commits
July 7, 2026 14:01
Consecutive same-author messages currently collapse into the time-only (avatarless) continuation style regardless of how far apart they are. Add a 5-minute rolling window: a message only groups onto the one above it when it is from the same author AND within 5 minutes of it. Past that gap the message reads as a new thought and gets the traditional avatar + header treatment. The window is measured against the immediately preceding message, so a steady stream keeps grouping while a lull breaks it. Signed-off-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
Promote the grouping-window logic into shared helpers in messageGrouping.ts (MESSAGE_GROUPING_WINDOW_SECONDS = 10 min, isWithinGroupingWindow) and apply it consistently across the three continuation surfaces: - channel timeline (buildTimelineItems) - threaded reply panel (MessageThreadPanel) - home inbox detail (InboxDetailPane) Same-author messages now only collapse into the avatarless continuation style when they land within 10 minutes of the previous one; past that gap they read as a new thought with the traditional avatar + header. Threads/inbox previously grouped on author alone with no time check. Threads carry createdAt on TimelineMessage already; the inbox reply model gained a createdAt field, populated in all three InboxReply builders. Bumps the window from 5 to 10 minutes per product decision. Signed-off-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
8fd4b72 to
724c196
Compare
wesbillman
approved these changes
Jul 7, 2026
wesbillman
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed by Pinky (Buzz agent) on Wes's behalf.
Summary: Adds a 10-minute rolling window to same-author message grouping — a message only renders as a compact continuation (time-only, no avatar/header) if it's from the same author and within 10 minutes of the previous message. Applied consistently across the channel timeline, thread panel, and home inbox detail pane.
Verified:
isWithinGroupingWindowlogic: inclusive at exactly 600s; negative gap (out-of-order timestamps) or missing timestamps safely break the group; window measured against the previous message (not group start), with a test pinning that behavior.- Test coverage: boundary / negative / missing-timestamp cases in
messageGrouping.test.mjs; window-break and steady-stream tests added totimelineItems.test.mjs. InboxReply.createdAtplumbing supplied at all three construction sites (HomeView ×2, InboxDetailPane).- Purely additive
&&onto the existing author check — day-divider and unread-divider grouping breaks unchanged. - All CI checks green (Desktop Build, Core, E2E Integration, Smoke ×4, Relay E2E).
- 2 commits behind main (#1576, #1577) with zero file overlap — safe to merge as-is.
Non-blocking note: MESSAGE_GROUPING_WINDOW_SECONDS hardcoded at 10 min is the right call for now; a setting would be over-engineering.
tellaho
added a commit
that referenced
this pull request
Jul 7, 2026
…ivity * origin/main: fix(desktop): hydrate reactions for Inbox context messages (#1596) fix: cleanup old screenshots that my agents committed (#1598) chore(release): release Buzz Desktop version 0.3.46 (#1585) fix(desktop): preserve agent model/provider when persona snapshot fields are blank (#1583) feat(acp,desktop): identify and reap stale agent harness processes (#1582) feat(desktop): active-draft badge, send-from-drafts confirm dialog, thread-deleted state (#1581) fix(desktop): treat baked build env vars as satisfying required agent config (#1580) feat(desktop): add "Copy image" to image right-click context menu (#1579) fix(nest): use buzz-dev symlink name for dev builds (#1587) fix(composer): address image-editor follow-up nits on #1491 (#1565) fix(desktop): render black static boot screen (#1570) feat(agents): group activity tool bursts (#1571) feat(desktop): aggregated overview rail, commit detail page, and full breadcrumbs (#1573) fix(desktop): fetch profiles for reaction actors and thread-reply authors (#1550) refactor(desktop): unify EditAgentDialog styling with PersonaDialog (#1540) feat(desktop): add 10-minute message grouping window (#1578) feat(desktop): unify sidebar section actions into a per-section ⋮ menu (#1577) feat(desktop): emoji avatar picker for agents + reliable picker scroll (#1576) Co-authored-by: Taylor Ho <taylorkmho@gmail.com> Signed-off-by: Taylor Ho <taylorkmho@gmail.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.
Summary
Testing
desktop/src/features/messages/lib/messageGrouping.test.mjsdesktop/src/features/messages/lib/timelineItems.test.mjstsc --noEmit