Repository navigation
Conversation
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>
|
Warning Review limit reachedYou'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 59 minutes. View limit details
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Standalone E2E app and platform projects e2e_app/**, melos.yaml |
Adds a Flutter E2E app with authentication, navigation, channel views, reminders, threads, Android configuration, and iOS configuration. |
Fastlane execution and test infrastructure e2e_app/fastlane/**, e2e_app/integration_test/support/**, e2e_app/integration_test/robots/** |
Adds test selection, batching, retries, coverage handling, mock-server control, token testing, widget helpers, fluent robots, and Allure labeling. |
Integration test coverage e2e_app/integration_test/** |
Adds coverage for authentication, messages, attachments, channels, threads, polls, reactions, reminders, moderation, search, unread states, and delivery statuses. |
Workflow and action migration .github/workflows/**, .github/actions/**, .gitignore, e2e_app/.gitignore |
Moves E2E commands and artifacts to e2e_app, adds Android API 36 and batched cron coverage, adds coverage-map aggregation, and parameterizes Ruby setup. |
Sample app E2E removal sample_app/**, .claude/skills/flutter-version-bump/SKILL.md |
Removes the sample app’s E2E lanes, tests, Firebase stubs, E2E overrides, and test-only authentication controls. |
Message rendering fixes packages/stream_chat_flutter/lib/src/**, packages/stream_chat_flutter/test/src/** |
Separates failed and non-failed message groups and preserves deleted-message replies and reply counts. The changelog records both fixes. |
Priority:
Estimated code review effort: 5 (Critical) | ~120 minutes
Change: Bug fix
Sequence Diagram(s)
sequenceDiagram
participant CI
participant Fastlane
participant E2EApp
participant MockServer
participant Allure
CI->>Fastlane: Select and run test batch
Fastlane->>MockServer: Start mock server
Fastlane->>E2EApp: Launch integration tests
E2EApp->>MockServer: Request test data and tokens
Fastlane->>Allure: Upload test results
Fastlane->>CI: Upload coverage artifacts
Suggested reviewers: testableapple
Merge Risk: 
Minimal · previous review 3923d
-
The change restores the replies row under a deleted thread parent, so the thread is reachable again from the channel. No merge-blocking issue was found in the supplied evidence. The remaining changes are E2E app and CI migration, which do not affect production behavior.
Pre-merge checks: 
4 · 
1
-
Failed checks: 1 warning Passed checks: 4 passedFull details: Docstring Coverage
-
Explanation
Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 4 functions across 9 files. (100 skipped: 100 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches: 💡 3
-
📝 Generate docstrings: 💡
-
- Commit to this branch
- Create a new PR
⚔️ Resolve merge conflicts: 💡
-
- Resolve merge conflict in branch
sahil/flu-1092-a-deleted-thread-parent-loses-its-n-replies-footer-so-the
- Resolve merge conflict in branch
🛠️ Fix failing CI checks: 💡
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- 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.
Comment @coderabbitai help to get the list of available commands.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3110 +/- ##
==========================================
+ Coverage 80.28% 80.32% +0.04%
==========================================
Files 455 455
Lines 29614 29617 +3
==========================================
+ Hits 23775 23790 +15
+ Misses 5839 5827 -12 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
* 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
…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
What
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.
StreamMessageContentnow keeps the replies row under the placeholder, matching Android and iOS. The backend keepsreply_counton a soft delete.This also enables the two e2e tests that cover it in
message_list_test.dart.Fixes FLU-1092.
Stacked on #3105 (the e2e suite); GitHub retargets it to
masteronce that merges.Verification
stream_message_metadata_test.dart: a deleted thread parent shows its replies count. It fails without the fix.v11: see the "Merging master into v11" comment on FLU-1092.
🤖 Generated with Claude Code
Summary by CodeRabbit