Repository navigation
fix(desktop): keep pending messages grouped so sends don't shift the timeline - #8195
Open
brucesantos wants to merge 3 commits into
Open
brucesantos wants to merge 3 commits into
brucesantos wants to merge 3 commits into
Conversation
…timeline A pending message always rendered with its own avatar, author, and "Sending…" header, then collapsed into its author group once the relay acknowledged it. Every send therefore flashed a header and shifted the timeline by one header height. Group pending rows exactly like acknowledged ones. A grouped pending row dims its body and keeps the send status for screen readers only, so the acknowledgement changes opacity but never the row's height. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: brucesantos <brucesantos@users.noreply.github.com>
Relay order breaks created_at ties by event id. An optimistic id sorts after every hex event id, so a message sent within the same second as the previous one rendered above it, took over the author header, and dropped back into place on acknowledgement. Treat a pending send as the newest event in its second. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: brucesantos <brucesantos@users.noreply.github.com>
🔐 Codex Security Review
|
The live-overlay test binds the send mutation's path. Keep only the pageless projection case from the earlier test, which it does not cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: brucesantos <brucesantos@users.noreply.github.com>
brucesantos
marked this pull request as ready for review
October 8, 2026 23:12
This was referenced Oct 9, 2026
This branch has not been deployed
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
Every send rendered the pending message with its own avatar, author, and "Sending…" header, then collapsed it into the author group on acknowledgement. The timeline shifted on every message, and a message sent within the same second as the previous one rendered above it first.
timelineItems.ts,MessageRow.tsx): pending rows group exactly like acknowledged ones. A grouped pending row dims its body (60% opacity) and keeps "Sending…" for screen readers only, so the acknowledgement changes opacity, never height. The first message of a group keeps the inline "Sending…" beside its timestamp, as Fix pending message feedback #3543 intended, since nothing shifts there. This also applies to the thread panel.channelWindowStore.ts):compareRelayOrdertreats a pending send as the newest event in its second. Before this, the optimistic id sorted against hex ids and put the send above an earlier same-second message.Not covered:
created_at(send_channel_message), not the optimistic row's second. A send right at a second boundary can therefore still move on acknowledgement if that crosses same-second neighbours, the grouping window, or a day divider.Related issue
Fixes #8194. Related: #3543, #8192, #8193.
Testing
buildTimelineItems: pending messages group like acknowledged ones. Addedtest_live_pending_send_projects_after_same_second_window_events, which follows the same live-overlay path as the send mutation. Both fail without the fix.message-feedback-snapshots.spec.tsasserts that a pending continuation has no author header, announces "Sending…", and keeps the same row height through acknowledgement. It fails onmain.tsc --noEmit, andmessaging.spec.tsplus the feedback spec (93/94; the one failure, "editing a thread root in single-panel view", is unrelated and passed 5/5 when run alone).Before / after, ⅓ speed:
before-after-pr.mp4
buzz-review-completed
🤖 Generated with Claude Code