Skip to content

fix(ui): let a deleted thread parent with replies take new replies - #3111

Open
xsahil03x wants to merge 32 commits into
masterfrom
sahil/thread-composer-deleted-parent
Open

xsahil03x wants to merge 32 commits into
masterfrom
sahil/thread-composer-deleted-parent

Conversation

@xsahil03x

Copy link
Copy Markdown
Member

What

StreamThreadPage hid the composer whenever the thread's parent message was deleted. The backend still accepts replies to a deleted parent that already has replies; it only refuses them when the parent has none. The page now follows the same rule: the composer stays unless the parent is deleted and has no replies.

Follow-up to #3110 (FLU-1092), which makes a deleted parent's thread reachable again. Stacked on it.

Before After

Verification

  • thread_page_test.dart: the composer is hidden for a deleted parent without replies, and shown for one with replies. The second fails without the fix.
  • Android emulator (sample app): opened the thread of a deleted parent with one reply, and sent "Reply two" from the composer. The backend accepted it and the thread shows 2 replies (screenshots above).

🤖 Generated with Claude Code

testableapple and others added 23 commits October 23, 2026 14:55
A deleted message that had thread replies showed the "Message deleted"
placeholder without its "N replies" row, so the thread could no longer
be opened from the channel.

Fixes FLU-1092.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
flu-1092-a-deleted-thread-parent-loses-its-n-replies-footer-so-the
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
StreamThreadPage hid the composer whenever the parent message was
deleted. A deleted parent that already has replies still accepts new
ones, so the composer now stays unless the parent is deleted and has no
replies.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…parent-loses-its-n-replies-footer-so-the' into sahil/thread-composer-deleted-parent

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
@coderabbitai

coderabbitai Bot commented Oct 26, 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 27 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: 65e0a587-3e6b-4fa6-a657-945a52e026e2
Commits

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

Files selected for processing: 3
  • packages/stream_chat_flutter/CHANGELOG.md
  • packages/stream_chat_flutter/lib/src/pages/thread_page.dart
  • packages/stream_chat_flutter/test/src/channel/thread_page_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 26, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.39%. Comparing base (7a0e302) to head (5c4397f).

Additional details and impacted files
@@                                            Coverage Diff                                            @@
##           sahil/flu-1092-a-deleted-thread-parent-loses-its-n-replies-footer-so-the    #3111   +/-   ##
=========================================================================================================
  Coverage                                                                     80.38%   80.39%           
=========================================================================================================
  Files                                                                           455      455           
  Lines                                                                         29628    29628           
=========================================================================================================
+ Hits                                                                          23817    23818    +1     
+ Misses                                                                         5811     5810    -1     

☔ 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 5 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>
* 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-1092-a-deleted-thread-parent-loses-its-n-replies-footer-so-the

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
…parent-loses-its-n-replies-footer-so-the' into sahil/thread-composer-deleted-parent
…leted-thread-parent-loses-its-n-replies-footer-so-the

# 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/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
…parent-loses-its-n-replies-footer-so-the' into sahil/thread-composer-deleted-parent
…leted-thread-parent-loses-its-n-replies-footer-so-the

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
…parent-loses-its-n-replies-footer-so-the' into sahil/thread-composer-deleted-parent
Base automatically changed from sahil/flu-1092-a-deleted-thread-parent-loses-its-n-replies-footer-so-the to master October 28, 2026 13:03
…er-deleted-parent

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md

This branch has not been deployed

No deployments
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