Skip to content

Next Release - #3899

Merged
isekovanic merged 11 commits into
mainfrom
develop
Oct 27, 2026
Merged

isekovanic merged 11 commits into
mainfrom
develop

Conversation

@isekovanic

Copy link
Copy Markdown
Contributor

🎯 Goal

πŸ›  Implementation details

🎨 UI Changes

iOS
Before After
Android
Before After

πŸ§ͺ Testing

β˜‘οΈ Checklist

  • I have signed the Stream CLA (required)
  • PR targets the develop branch
  • Documentation is updated
  • New code is tested in main example apps, including all possible scenarios
    • SampleApp iOS and Android
    • Expo iOS and Android

isekovanic and others added 11 commits October 19, 2026 13:18
## 🎯 Goal

This PR bumps `react-native-gesture-handler` to version `3.4` on our
sample apps. It resolves an extremely critical issue with the library's
`ReanimatedSwipable` component that would happen when it is rendered
inside of any type of `ScrollView`, essentially hijacking the native
swipe gestures entirely (making scrolling virtually impossible). The
issue was introduced in version `3.3` of RNGH (I believe), to which we
bumped with the `react-native` upgrade to `0.88`.


[Here](software-mansion/react-native-gesture-handler#4581)
is the upstream issue for reference.

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
fix: channel list swipable stuck state after unmount
## 🎯 Goal

Make commits fast. The pre-commit hook ran the full `yarn lint` on every
commit, so even a README-only commit took ~20s, and ~40s when anything
failed (it then ran a full `lint-fix` too). It also failed with `env:
python: No such file or directory` in GUI git clients (e.g. Fork) that
don't have pyenv shims on `PATH`.

## πŸ›  Implementation details

- `dotgit/hooks/pre-commit-format.sh` now checks only the staged files:
- Prettier on the staged files (`--ignore-unknown`; `.prettierignore`
still applies)
- ESLint on the staged JS/TS files, with `--cache`
(`node_modules/.cache/eslint/`) and `--no-warn-ignored`
- `validate-translations` and `validate-entry-isolation` only when
something under `package/` is staged (both only read the SDK package)
- on failure, fixes just those files and aborts with the same message as
before
- `dotgit/hooks/pre-commit-reject-binaries.py`: shebang `python` β†’
`python3` (present on macOS via the Xcode CLT and on current Linux
distros)
- `AGENTS.md`: documents what the hook checks

CI is unchanged: `check-pr.yml` still runs the full `yarn lint`.

Known limitation, same as before: the hook checks the working-tree
version of each staged file, so with partial staging the unstaged lines
are checked too.

## 🎨 UI Changes

None.

## πŸ§ͺ Testing

Ran the hook against a temporary index (`GIT_INDEX_FILE`) for each case:

| Case | Before | After |
| -------------------------------------- | --------------- |
------------------------------------- |
| Nothing staged | ~20s | 0.2s |
| README only | ~20s | 0.3s |
| TS file in `package/` (validators run) | ~20s | 2.9s (2.1s with a warm
ESLint cache) |
| Prettier violation | ~40s (full fix) | 0.9s, file auto-fixed, commit
aborted |
| ESLint warning (unused variable) | ~40s | 1.6s, reported, commit
aborted |

`shellcheck` is clean, and the script stays bash 3.2-compatible (macOS
default). This PR's own commit went through both hooks and commitlint in
0.85s.

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [x] PR targets the `develop` branch
- [x] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

Require a Linear ticket for every PR opened by Claude Code, as already
done in stream-video-js (GetStream/stream-video-js#2464).

Ticket: https://linear.app/stream/issue/REACT-1188

## πŸ›  Implementation details

- Adds `.claude/hooks/require-linear-ticket.sh`, a PreToolUse hook that
blocks `gh pr create` and MCP PR-creation tools unless a `REACT-…`,
`RN-…`, `CHAT-…` or `VID-…` ID is in the PR title or PR body. The branch
name does not count. Needs only bash, jq and curl; every other tool call
exits 0.
- For `gh pr create`, only the text from the `gh pr create` invocation
onward is scanned, and `--head`/`--base`/`--repo` values are ignored.
`--body-file` contents are included. For MCP tools, only `title` and
`body` are read.
- If `LINEAR_API_KEY` is set, the ticket's existence is checked via
Linear GraphQL. Only a "not found" response blocks; auth or network
errors warn and allow. Team keys can be overridden with
`LINEAR_TEAM_KEYS`.
- Registered in a new project `.claude/settings.json`; the workflow is
documented under "Pull requests" in `AGENTS.md` (new tickets go in the
`RN` team).

## 🎨 UI Changes

None.

## πŸ§ͺ Testing

Pipe-tested the hook: missing ticket, ID only in the branch name or
`--head`, and IDs from other teams (e.g. `FEEDS-…`) exit 2;
`REACT`/`RN`/`CHAT`/`VID` IDs in the title or body exit 0; unrelated
commands exit 0.

## β˜‘οΈ Checklist

- [x] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [x] PR targets the `develop` branch
- [x] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios (repository tooling only, no app changes)
## 🎯 Goal

This PR bumps `stream-chat-js` to version `9.54.1` in order to consume
the WS lifecycle fix it contains.

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

This PR handles an unfortunate crash that was introduced with poll
optimistic votes. Since we were not properly handling the case of having
an empty array (as server-side this never happens but rather the entry
is removed from the object) it would result in an uncaught error instead
of just resolving gracefully.

## πŸ›  Implementation details

Linear ticket:
https://linear.app/stream/issue/REACT-1415/uncaught-error-when-removing-the-last-vote-in-a-poll

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
## 🎯 Goal

Linear ticket:
https://linear.app/stream/issue/RN-469/edits-drop-custom-attachments-from-messages

This PR fixes an issue where editing a message would cause custom
attachments specifically (or well any attachments that might not require
uploads for example) to be removed instead.

## πŸ›  Implementation details

<!-- Provide a description of the implementation -->

## 🎨 UI Changes

<!-- Add relevant screenshots -->

<details>
<summary>iOS</summary>


<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>


<details>
<summary>Android</summary>

<table>
    <thead>
        <tr>
            <td>Before</td>
            <td>After</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <!--<img src="" /> -->
            </td>
            <td>
                <!--<img src="" /> -->
            </td>
        </tr>
    </tbody>
</table>
</details>

## πŸ§ͺ Testing

<!-- Explain how this change can be tested (or why it can't be tested)
-->

## β˜‘οΈ Checklist

- [ ] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch
- [ ] Documentation is updated
- [ ] New code is tested in main example apps, including all possible
scenarios
  - [ ] SampleApp iOS and Android
  - [ ] Expo iOS and Android
@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

title develop branch diff status
js_bundle_size 2036 KB 2036 KB 0 B 🟒
ai_components_size 130 KB 130 KB 0 B 🟒

@github-actions

Copy link
Copy Markdown

Next releases

v9.10.2

9.10.2 (2026-10-27)

Bug Fixes

  • bump to latest rngh (#3878) (ad4e646)
  • channel list swipable stuck state after unmount (fcc5dfe)
  • gracefully handle empty arrays on poll preview label (#3897) (768b06c)
  • onerror ws lifecycle handling (#3893) (61922d7)
  • stop dropping custom attachments on edit (87b6c02)
  • stop dropping custom attachments on edit (#3898) (91f8991)

sampleapp@v4.16.2

4.16.2 (2026-10-27)

Bug Fixes

@isekovanic
isekovanic merged commit ae3f4d3 into main Oct 27, 2026
18 checks passed
@stream-ci-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in version 9.10.2 πŸŽ‰

The release is available on:

Your semantic-release bot πŸ“¦πŸš€

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants