Repository navigation
fix: v10 regressions found in side-by-side QA - #1965
Merged
Merged
Conversation
A retried failed edit was re-sent as a new message. The server rejected it as a duplicate, which the send path took for a delivered send: the edited text showed as sent while the server kept the old one, and the rejection went unhandled. retry() now replays a failed edit through update(). A failed edit is told apart by message_text_updated_at, which a failed send never has, so this holds after a reload too.
parseError left status unset for transport failures (axios network errors, offline). UI SDKs offer edit and discard on a failed message only for status 0, as v9 UIs did, so those actions were missing.
…nel.visible Hiding every channel of a list drops its loaded page. Channels shown again then landed only in the paginator's logical intervals, which a list UI does not render, so most never came back. A list without a loaded first page now re-queries it on channel.visible (debounced), as v9 did. Also documents that a logical interval can be the active one.
Parent message updates replaced the thread's participants with the message's thread_participants, which lists only repliers, dropping the parent's author. They are now merged.
Local builds take the version from git describe, whose tags are v-prefixed, so the user agent read stream-chat-js-vv10.x. Published builds use package.json and were not affected.
parseError gave status 0 to any Error without a response, so an error thrown by an integrator's own request handler read as a network failure, and the UI offered the edit and discard actions meant for one. Only an axios error with no response that the caller did not cancel, and an OfflineError, get it now.
On channel.visible, every list without a loaded page re-queried its first page, including lists the shown channel cannot belong to, such as one that is simply empty. Only lists whose filters match the channel re-query now.
isekovanic
approved these changes
Oct 30, 2026
…order Hides three channels and shows them again newest, oldest, middle, with the list query running, and asserts all three come back in sort order from one query. Without the reload only the first channel shown survives.
…ached send A send that failed after the server stored the message leaves a cached payload. When an edit of that message later failed, Resend took the cached payload and sent the message again, which the server rejects as a duplicate. A failed edit is now replayed as an edit first, and the stale payload is dropped.
isekovanic
approved these changes
Oct 30, 2026
MartinCupela
approved these changes
Oct 30, 2026
MartinCupela
left a comment
Contributor
There was a problem hiding this comment.
Thanks, both points are fixed: the channel.visible re-query now only hits lists whose filters match the shown channel, and status 0 goes only to real transport failures. The failed-edit replay with a stale cached send in 0c22561 looks right too. Looks good.
github-actions Bot
pushed a commit
that referenced
this pull request
Oct 30, 2026
## [10.0.0-rc.28](v10.0.0-rc.27...v10.0.0-rc.28) (2026-10-30) ### Bug Fixes * **deps:** bump [@stream-io](https://github.com/stream-io) toolkit packages to the .mjs/.cjs builds ([#1971](#1971)) ([aa97cf4](aa97cf4)), closes [GetStream/js-toolkit#58](https://github.com/GetStream/js-toolkit/issues/58) * v10 regressions found in side-by-side QA ([#1965](#1965)) ([b87d598](b87d598))
|
🎉 This PR is included in version 10.0.0-rc.28 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket: https://linear.app/stream/issue/REACT-1475
CLA
Description of the changes, What, Why and How?
These fixes come from a manual side-by-side QA pass. It compared the React
examples/viteapp on stream-chat-react v14 + stream-chat v9 against v15 + this branch's v10. Each commit fixes one regression and adds a unit test that fails without the fix.fix(messageOperations)):retry()sent a failed edit as a new message. The server rejected it as a duplicate. The send path took that rejection for a delivered send, so the client showed the edited text as sent while the server kept the old text, and the rejection went unhandled. A failed edit is now sent again throughupdate(). It is recognized bymessage_text_updated_at, which a failed send never has, so this also works after a reload.fix(errors)):parseErrordid not setstatuswhen a request got no response. UI SDKs offer Edit and Discard on a failed message only whenstatus === 0, as v9 UIs did, so those actions disappeared. Such errors now getstatus: 0. Only real transport failures get it: an axios error with no response that the caller did not cancel, or anOfflineError. A cancelled request and an error thrown by an integrator's own request handler keep no status (review follow-up).channel.hidden(fix(ChannelManager)): hiding every channel in a list drops its loaded page. When channels were shown again, they went only into the paginator's logical intervals. A list UI does not render those, so most channels never came back, and the example app's sideloaded section listed them twice. Onchannel.visible, a list with no loaded first page now re-queries it (debounced), as v9 did, but only when the shown channel matches the list's filters (review follow-up).fix(thread)): updates to the parent message replaced the thread's participants with the message'sthread_participants, which lists only repliers. This dropped the parent message's author. The two lists are now merged.fix(scripts)): local builds take the version fromgit describe, whose tag isv-prefixed, so the user agent readstream-chat-js-vv10…. Published builds were not affected.Checks:
yarn lint,yarn types,yarn buildandyarn test-unit(4836 passed). The suite reports 2 unhandled errors, and the base branch reports the same 2.The stream-chat-react half is GetStream/stream-chat-react#3364 (same ticket).
Changelog
status: 0.