Skip to content

fix(ui): keep the footer of a sent message before a failed one - #3122

Merged
xsahil03x merged 2 commits into
test/e2e-native-parityfrom
sahil/flu-1090-a-failed-message-stays-grouped-with-the-previous-one-which
Oct 27, 2026
Merged

xsahil03x merged 2 commits into
test/e2e-native-parityfrom
sahil/flu-1090-a-failed-message-stays-grouped-with-the-previous-one-which

Conversation

@xsahil03x

Copy link
Copy Markdown
Member

What

A message that failed was grouped with the sent message before it, so only the failed one kept a footer and the sent message lost its timestamp and delivery status. Nothing in the list said which of your messages went through.

StreamMessageListView now starts a new group where only one of two neighbouring messages failed, for both the stack position and the spacing. Consecutive failed messages still group together, and a failed message that is resent groups with the sent ones again. WhatsApp, Telegram and iMessage all keep the status of the last delivered message visible next to a failed one.

This also enables "delivery status is shown for the previous message when a new message fails to be sent" in message_delivery_status_test.dart.

Fixes FLU-1090.

Stacked on #3105 (the e2e suite); GitHub retargets it to master once that merges.

Before: offline send After: 5 sent, 2 failed offline

Verification

  • message_list_failed_message_grouping_test.dart:

    • a sent message followed by a failed one keeps its footer;
    • consecutive failed messages, and consecutive sent ones, still group;
    • a failed message groups again once it is sent;
    • a failed message gets the spacing of a new group.

    Removing the boundary, removing the spacing check, or splitting at every failed message each fails one of these.

  • The message list and message widget suites pass; only the local macOS goldens fail.

  • Android emulator: sent five messages, went offline and sent two more. The fifth sent message keeps "✓ 2:18 AM" and the two failed ones form their own group. After reconnecting, both are resent and show as sent.

  • e2e: the test is un-skipped and runs in this PR's E2E workflow.

v11: see the "Merging master into v11" comment on FLU-1090.

🤖 Generated with Claude Code

)

A message that failed now starts its own group, so the sent message
before it keeps its timestamp and delivery status. Consecutive failed
messages still group together.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 8aba0791-cee9-418b-9b7f-7eeb060f23ff

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.28%. Comparing base (b6acb2a) to head (7d2eb1b).
⚠️ Report is 1 commits behind head on test/e2e-native-parity.

Additional details and impacted files
@@                   Coverage Diff                   @@
##           test/e2e-native-parity    #3122   +/-   ##
=======================================================
  Coverage                   80.28%   80.28%           
=======================================================
  Files                         455      455           
  Lines                       29614    29616    +2     
=======================================================
+ Hits                        23775    23777    +2     
  Misses                       5839     5839           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

if (neighbor == null) return true;
if (message.user?.id != neighbor.user?.id) return true;
if (neighbor.isSystem || neighbor.isEphemeral || neighbor.isError) return true;
if (message.state.isFailed != neighbor.state.isFailed) return true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: isFailed also covers updatingFailed / deletingFailed, so an edit that fails mid-group splits the group too. That seems right, since the error badge shows for those as well, but the CHANGELOG says "failed to send". Either widen the wording ("a message that failed…") or narrow the check to isSendingFailed.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kept isFailed: a failed edit or delete shows the same error badge, so it should end the group too. I widened the CHANGELOG in 7d2eb1b instead: "Fixed a message that failed to send, update or delete hiding the timestamp and delivery status of the message before it."

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC
@xsahil03x
xsahil03x merged commit bdf15fd into test/e2e-native-parity Oct 27, 2026
23 checks passed
@xsahil03x
xsahil03x deleted the sahil/flu-1090-a-failed-message-stays-grouped-with-the-previous-one-which branch October 27, 2026 12:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants