Skip to content

fix(ui): show system messages without a prefix in the channel list - #3124

Merged
xsahil03x merged 26 commits into
masterfrom
sahil/flu-1096-the-channel-preview-prefixes-a-system-message-with-its
Oct 28, 2026
Merged

xsahil03x merged 26 commits into
masterfrom
sahil/flu-1096-the-channel-preview-prefixes-a-system-message-with-its

Conversation

@xsahil03x

Copy link
Copy Markdown
Member

What

In group channels, the channel list showed a system message with a "You:" or sender prefix, e.g. "Salvatore: Salvatore cleared the chat history". Your own system messages also showed a delivery tick. The preview now shows a system message's text on its own, with no prefix and no tick.

  • StreamMessagePreviewFormatter.formatMessage skips the prefix for system messages. The screen-reader label already did.
  • ChannelListTileSubtitle doesn't show a delivery status for system messages, as it already doesn't for deleted ones.

A system message usually names the actor already, and the message list shows it without a sender. iOS UIKit and Android XML preview it the same way; SwiftUI and Compose prefix it, and RN shows no sender prefixes at all. Figma has no system-message preview variant.

This also enables "new system message increments the unread count" in unread_counts_test.dart. The truncation test in channel_list_test.dart now expects the bare text.

Fixes FLU-1096.

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

Before After

Verification

  • stream_message_preview_text_test.dart: a system message from the current user, and one from another user, show no prefix in a group channel.

  • stream_channel_list_item_test.dart: the subtitle shows the delivery status of your message, and hides it for your system message.

    Restoring the prefix fails the two preview tests, and restoring the tick fails the subtitle test.

  • The channel, scroll view and utils suites pass; only the local macOS goldens fail.

  • Android emulator against the real backend, in a 3-member group truncated with a system message by another member. Before, the preview read "Salvatore: Salvatore cleared the chat history". After, it reads "Salvatore cleared the chat history".

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

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

🤖 Generated with Claude Code

testableapple and others added 19 commits October 23, 2026 14:55
…LU-1096)

A system message's preview no longer starts with "You:" or the sender's
name, and shows no delivery status. The text usually names the actor
already, and the screen reader label already read it bare.

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

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 17 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

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: 78bc59d5-a72a-4bc3-8c20-c40adae4011b
Commits

Reviewing files that changed from the base of the PR and between 3d44386 and ada2463.

Files selected for processing: 7
  • e2e_app/integration_test/channel_list_test.dart
  • e2e_app/integration_test/unread_counts_test.dart
  • packages/stream_chat_flutter/CHANGELOG.md
  • packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_item.dart
  • packages/stream_chat_flutter/lib/src/utils/message_preview_formatter.dart
  • packages/stream_chat_flutter/test/src/channel/stream_message_preview_text_test.dart
  • packages/stream_chat_flutter/test/src/scroll_view/channel_scroll_view/stream_channel_list_item_test.dart
  • 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.40%. Comparing base (3d44386) to head (ada2463).

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3124      +/-   ##
==========================================
+ Coverage   80.39%   80.40%   +0.01%     
==========================================
  Files         455      455              
  Lines       29628    29630       +2     
==========================================
+ Hits        23818    23823       +5     
+ Misses       5810     5807       -3     

☔ 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.

xsahil03x and others added 4 commits October 27, 2026 12:34
* test(repo): assert the token date and signature policy (FLU-1083)

The SDK refreshes the token on code 40 only. A token used before its
issue date (42) is reconnected as-is until the server's clock catches
up, and a bad signature (43) is not retried with a new token. The four
tests now assert that instead of a refresh.

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

* test(repo): tighten the token date and signature tests (FLU-1083)

Keep the invalid window open past the refresh so the refreshed token is
always rejected, count token requests through an env assertion, and fix
the step and file comments to match what the tests assert.

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

* test(repo): drop the token signature after login test (FLU-1083)

A signing secret doesn't go bad mid-session, and the test only timed the
SDK's reconnect backoff.

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

* test(repo): keep the login error across the loading screen (FLU-1083)

The chooser page is replaced while connecting, so an error it stored
itself was gone by the time the login failed. The auth state now carries
it, and the rebuilt page shows it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC
* fix(ui): keep the footer of a sent message before a failed one (FLU-1090)

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>

* docs(ui): describe every failed message in the changelog (FLU-1090)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
flu-1096-the-channel-preview-prefixes-a-system-message-with-its

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
Base automatically changed from test/e2e-native-parity to master October 27, 2026 17:37
…channel-preview-prefixes-a-system-message-with-its

# Conflicts:
#	e2e_app/README.md
#	e2e_app/fastlane/Fastfile
#	e2e_app/integration_test/authentication_test.dart
#	e2e_app/integration_test/giphy_test.dart
#	e2e_app/integration_test/hyper_links_test.dart
#	e2e_app/integration_test/message_actions_test.dart
#	e2e_app/integration_test/message_delivery_status_test.dart
#	e2e_app/integration_test/message_list_test.dart
#	e2e_app/integration_test/pages/channel_list_page.dart
#	e2e_app/integration_test/robots/backend_robot.dart
#	e2e_app/integration_test/robots/participant_robot.dart
#	e2e_app/integration_test/robots/user_robot.dart
#	e2e_app/integration_test/robots/user_robot_message_list_asserts.dart
#	e2e_app/integration_test/support/stream_test_env.dart
#	e2e_app/integration_test/unread_counts_test.dart
#	e2e_app/lib/auth/auth_controller.dart
#	e2e_app/lib/pages/channel_list_tab.dart
#	e2e_app/lib/pages/home_page.dart
#	e2e_app/lib/pages/thread_list_tab.dart
#	e2e_app/lib/widgets/e2e_message_actions.dart
#	e2e_app/lib/widgets/search_text_field.dart
#	e2e_app/pubspec.yaml
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter/test/src/message_list_view/message_list_failed_message_grouping_test.dart
…channel-preview-prefixes-a-system-message-with-its

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
…channel-preview-prefixes-a-system-message-with-its

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
@xsahil03x
xsahil03x merged commit c544d39 into master Oct 28, 2026
36 checks passed
@xsahil03x
xsahil03x deleted the sahil/flu-1096-the-channel-preview-prefixes-a-system-message-with-its branch October 28, 2026 13:49
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.

3 participants