chore: merge master into v10.0.0#2677
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
9d5592b to
c3f71d6
Compare
Brings master's QA / security / perf work into the v10 design-refresh branch. Highlights of what landed in v10 from master: LLC (`stream_chat`) - `Client.queryDrafts` now forwards `filter` (#2647). - `Client.queryChannels` coalesces concurrent identical queries via the new `InFlightCache<K, V>` (#2652). - `SortedListX` / `ListX` extensions added in `list_extensions.dart`; duplicate-keyed inputs are tolerated by `merge` (#2660). v10's `IterableMergeExtension.merge` / `.mergeFrom` are kept — `SortedListX` is on `List` and routes there for the new perf paths; the old extension still serves `Iterable<T>` callers in v10. - `ChannelClientState._checkExpiredAttachmentMessages` removed (#2653); v10's `StreamImageCDN.cacheKey` already keeps the image cache valid across signed-URL rotations. - `ChannelClientState.updateChannelState` now identity-short-circuits when `updatedState.messages` is null or the same reference, so downstream `.distinct()` listeners can skip rebuilds. - Reaction listeners now dispatch via `_findMessage` (parentId-aware) while keeping v10's `addMyReaction` / `deleteMyReaction` semantics. `stream_chat_flutter_core` - `BetterStreamBuilder` correctness fixes: mounted guard, error reporting via `FlutterError.reportError`, identity-equal emission gating (#2651). - `MessageListCore` caches its `messagesStream` / `_initialMessages` as fields instead of recomputing in `build()` (#2651). `defaultMessageFilter` takes an optional `currentUserId`. - `StreamChatCore` debounces connectivity events to 3 s (#2652). `stream_chat_flutter` - `scrollable_positioned_list/`: master version taken in full. Bounded `_keyToIndexMap`, `isScrolling` / `isScrollingListenable`, `itemKeyBuilder` anchor preservation, fit-anchor fallback in `UnboundedRenderViewport`, sensible defaults on `scrollTo` (#2651). - `tld.dart` removed (#2654); `StreamMessageComposer` relaxed its URL regex from `[a-z]{2,4}` to `[a-z]{2,}` and dropped the `isValidTLD` filter at both call sites. - `StreamMessageListView` and `separated_reorderable_list_view`: v10's design-refresh version retained. v10 already covers the functional surface; master's identity-preserving micro-optimizations to `updateMessage` are a follow-up. CI / repo - Path/draft gating job (`gate`) added to `legacy_version_analyze`, `check_db_entities`, and `stream_flutter_workflow` (#2669). - Flutter 3.44 fixes (#2667), pana / build cleanups (#2656), local-setup CI fixes (#2650). - `melos.yaml`: kept v10's higher floors; added `firebase_crashlytics` (master's #2665); dropped `sentry_flutter` (per master). Notes / follow-ups - `sample_app/`: v10's redesigned app retained. The Sentry → Firebase Crashlytics migration (#2665) applies to master's pre-redesign sample app and was not ported here; left for a separate pass. - `channel_test.dart` `updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deleted` is marked `skip:` — v10's `_updateMessages` reconstructs the channel list via `_mergeMessagesIntoExisting`, so identity is not preserved on non-deletion edits. Functional behavior matches master. - `goldens/`: deleted-on-v10 goldens kept deleted; modified-on-both goldens kept at v10's bytes (the redesigned UI is the source of truth). - `stream_message_composer.dart` had `SizeTransition(alignment:)` which was never a valid parameter — switched to `axisAlignment: -1` (the Flutter API the v10 author intended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
c3f71d6 to
c73de0f
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## v10.0.0 #2677 +/- ##
==========================================
Coverage ? 67.10%
==========================================
Files ? 405
Lines ? 24344
Branches ? 0
==========================================
Hits ? 16335
Misses ? 8009
Partials ? 0 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Summary
Brings master's QA / security / perf work into the v10 design-refresh branch.
Master is 15 commits ahead of v10.0.0 — this PR carries those into v10 so the upcoming v10 release ships with the latest LLC perf rewrites, the in-flight queryChannels dedup, the jose security floor, and the relaxed URL detection.
What landed
LLC (
stream_chat)Client.queryDraftsnow forwardsfilter(fix(llc): forwardfilterparam inClient.queryDrafts#2647).Client.queryChannelscoalesces concurrent identical queries via the newInFlightCache<K, V>(fix(llc, core): coalesce queryChannels on flaky-network reconnects #2652).SortedListX/ListXextensions added inlist_extensions.dart; duplicate-keyed inputs are tolerated bymerge(chore(llc): tolerate duplicate-keyed inputs inSortedListX.merge#2660). v10'sIterableMergeExtension.merge/.mergeFromare kept —SortedListXis onListand routes there for the new perf paths; the old extension still servesIterable<T>callers in v10.ChannelClientState._checkExpiredAttachmentMessagesremoved (perf(llc): faster channel state ingest #2653); v10'sStreamImageCDN.cacheKeyalready keeps the image cache valid across signed-URL rotations.ChannelClientState.updateChannelStatenow identity-short-circuits whenupdatedState.messagesis null or the same reference, so downstream.distinct()listeners can skip rebuilds._findMessage(parentId-aware) while keeping v10'saddMyReaction/deleteMyReactionsemantics.stream_chat_flutter_coreBetterStreamBuildercorrectness fixes: mounted guard, error reporting viaFlutterError.reportError, identity-equal emission gating (perf(repo): cut StreamMessageListView UI-thread work under flood load #2651).MessageListCorecaches itsmessagesStream/_initialMessagesas fields instead of recomputing inbuild()(perf(repo): cut StreamMessageListView UI-thread work under flood load #2651).defaultMessageFiltertakes an optionalcurrentUserId.StreamChatCoredebounces connectivity events to 3 s (fix(llc, core): coalesce queryChannels on flaky-network reconnects #2652).stream_chat_flutterscrollable_positioned_list/: master version taken in full. Bounded_keyToIndexMap,isScrolling/isScrollingListenable,itemKeyBuilderanchor preservation, fit-anchor fallback inUnboundedRenderViewport, sensible defaults onscrollTo(perf(repo): cut StreamMessageListView UI-thread work under flood load #2651).tld.dartremoved (chore(ui): drop the bundled IANA TLD list #2654);StreamMessageComposerrelaxed its URL regex from[a-z]{2,4}to[a-z]{2,}and dropped theisValidTLDfilter at both call sites.StreamMessageListViewandseparated_reorderable_list_view: v10's design-refresh version retained. Master's identity-preserving micro-optimizations toupdateMessageare a follow-up.CI / repo
gate) added tolegacy_version_analyze,check_db_entities, andstream_flutter_workflow(ci(repo): centralize path/draft gating in a per-workflow gate job #2669).panareports #2656), local-setup CI fixes (ci(repo): Resolve local setup related issues #2650).melos.yaml: kept v10's higher floors; addedfirebase_crashlytics(master's chore(samples): replace Sentry with Firebase Crashlytics #2665); droppedsentry_flutter(per master). v10's own pubspec/sample-app still referencessentry_flutter(see follow-ups).Notes / follow-ups
sample_app/: v10's redesigned sample app retained as a unit (gradle, manifest, main.dart, pbxproj — auto-merge would have left it inconsistent with v10's app.dart / pubspec). The Sentry → Firebase Crashlytics migration (chore(samples): replace Sentry with Firebase Crashlytics #2665) applies to master's pre-redesign sample app and is not ported here.channel_test.dart > updateMessage quoted-rewrite > does not rewrite quotes when an existing quoted target is updated without being deletedisskip:-ed. v10's_updateMessagesreconstructs the channel list via_mergeMessagesIntoExisting, so identity is not preserved on non-deletion edits. Functional behavior matches master.stream_message_composer.darthadSizeTransition(alignment:)which was never a valid Flutter parameter — switched toaxisAlignment: -1(the API the v10 author intended).Test plan
dart analyze— clean acrossstream_chat,stream_chat_flutter_core,stream_chat_flutterdart test packages/stream_chat/test— 491 pass, 1 skippeddart test packages/stream_chat/test/src/client/channel_test.dart— 316 pass, 1 skippedflutter test packages/stream_chat_flutter_core/test— 239 passflutter test packages/stream_chat_flutter/test/scrollable_positioned_list/— 194 pass, 2 skippedsample_appboots against v10 on at least one platform🤖 Generated with Claude Code