chore(mobile): upgrade to Expo SDK 57 - #8609
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
There was a problem hiding this comment.
🟠 High
t3code/patches/react-native-screens@4.26.2.patch
Line 1505 in 6209b24
headerCenterBarButtonItems and headerToolbarItems reuse the 'right' namespace, so their generated button and menu IDs collide with header-right items at the same index/path. Because dispatch searches the right collection first, tapping a center or toolbar control/menu invokes the matching header-right callback instead; prepare these collections with distinct namespaces and handle those namespaces during dispatch.
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @patches/react-native-screens@4.26.2.patch around line 1505:
`headerCenterBarButtonItems` and `headerToolbarItems` reuse the `'right'` namespace, so their generated button and menu IDs collide with header-right items at the same index/path. Because dispatch searches the right collection first, tapping a center or toolbar control/menu invokes the matching header-right callback instead; prepare these collections with distinct namespaces and handle those namespaces during dispatch.
There was a problem hiding this comment.
🟠 High
On iOS 26, passing { type: "searchBarPlacement" } through a left, right, or center header prop throws invalidArgumentException. These items reach barButtonItemGroupsFromItems: and are wrapped by fixedGroupWithRepresentativeItem:items:, but UIKit permits search-bar placement items only in toolbarItems; route them exclusively through the toolbar path or exclude them from item groups.
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @patches/react-native-screens@4.26.2.patch around line 321:
On iOS 26, passing `{ type: "searchBarPlacement" }` through a left, right, or center header prop throws `invalidArgumentException`. These items reach `barButtonItemGroupsFromItems:` and are wrapped by `fixedGroupWithRepresentativeItem:items:`, but UIKit permits search-bar placement items only in `toolbarItems`; route them exclusively through the toolbar path or exclude them from item groups.
There was a problem hiding this comment.
🟡 Medium
When mailSearchToolbar uses its default useFallbackSearchField value of false with an attached searchController, onSearchTextChange never fires as the user types. The UISearchBar branch does not register an editing-change action for searchTextChangeId; wire the same callback to searchBar.searchTextField in that branch.
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @patches/react-native-screens@4.26.2.patch around line 527:
When `mailSearchToolbar` uses its default `useFallbackSearchField` value of `false` with an attached `searchController`, `onSearchTextChange` never fires as the user types. The `UISearchBar` branch does not register an editing-change action for `searchTextChangeId`; wire the same callback to `searchBar.searchTextField` in that branch.
There was a problem hiding this comment.
🟡 Medium
A headerToolbarItems array containing a mailSearchToolbar and ordinary items drops every ordinary toolbar item. This assigns @[] to navigationToolbarConfigs, so the later builder never creates the remaining buttons; remove only the mail-search entry while preserving the other configs.
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @patches/react-native-screens@4.26.2.patch around line 708:
A `headerToolbarItems` array containing a `mailSearchToolbar` and ordinary items drops every ordinary toolbar item. This assigns `@[]` to `navigationToolbarConfigs`, so the later builder never creates the remaining buttons; remove only the mail-search entry while preserving the other configs.
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This is a broad Expo SDK 57 and React Native 0.86 production-native upgrade, including a changed default for synchronous shadow-state updates and a substantial react-native-screens compatibility patch. The native toolbar/search paths also carry unresolved identifier, placement, callback, and item-retention risks that merit focused review. Not approved because:
Adjust the Minimum Blocking Severity for this repo — including turning it Off — in Settings. You can add or adjust custom eligibility rules. Learn more. |
6209b24 to
1e2b733
Compare
## What's Changed * Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599 * Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603 * fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605 * fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607 * chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609 * fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611 * fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610 * chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613 * feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236 * feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532 * feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569 * fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504 * fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627 * fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624 * fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087 * fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094 * fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090 * perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018 * fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501 * fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693 * fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694 * revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733 * test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738 * feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793 * feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688 * fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741 * fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392 * feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237 * fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799 * fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746 * fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807 * fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804 * fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806 * fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811 * fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803 * fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584 * chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814 * fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828 * fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840 * feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614 * fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790 ## New Contributors * @ryanrhughes made their first contribution in pingdotgg/t3code#8569 * @ahmed-besic made their first contribution in pingdotgg/t3code#8392 * @MatthewFeroz made their first contribution in pingdotgg/t3code#8790 **Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
Problem
The mobile client was still on Expo SDK 56 and React Native 0.85, one release behind the current stable Expo stack.
Fix
Expo SDK 57 release notes: https://expo.dev/changelog/sdk-57
Verification
vp i --frozen-lockfilevp exec expo install --checkvp run --filter @t3tools/mobile typecheckvp run lint:mobile(Swiftlint and Android lint clean)vp run --filter @t3tools/mobile test(790 tests passed)ConnectedExpo Doctor's SDK version, Hermes, Expo config, Metro config, native tooling, and peer-dependency checks pass. Its overall exit remains nonzero on this pnpm workspace because its npm-based package explanations and file-linked local native modules are reported as issues.
Generated with GPT-5.6-sol in T3 Code using the Codex harness.
Note
Medium Risk
Broad native stack bump plus large rebased
react-native-screensand Metro source-map patches; regressions are most likely in iOS header/toolbar behavior, gestures, and dev bundling rather than server-side logic.Overview
Upgrades the mobile app from Expo SDK 56 / React Native 0.85 to SDK 57.0.18 / RN 0.86.3, bumping the matching Expo modules,
babel-preset-expo, Reanimated, gesture-handler, screens, and worklets.expo.install.excludenow skipsreact-native-keyboard-controllerso Expo’s installer doesn’t fight the pinned version.Patches are rebased for the new versions:
@expo/metro-config@57still sanitizes composed source maps (strip invalid Hermes bridge segments before@jridgewell/remapping),react-native-screens@4.26.2keeps T3’s iOS 26 glass header chrome (center/toolbar items, mail-search toolbar, bar-button identifiers) with Android no-op setters, and gesture-handler 2.32 retainsfailOffsetYon Reanimated swipeables. Removed patches for@react-native/gradle-plugin@0.85.3andexpo-modules-jsi@56that are no longer needed upstream.Workspace pnpm overrides /
patchedDependenciespoint at the SDK 57 dependency line (e.g.@expo/metro-config@57.0.12).Reviewed by Cursor Bugbot for commit 1e2b733. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Upgrade mobile app to Expo SDK 57 and React Native 0.86.3
react-native-gesture-handler,react-native-reanimated,react-native-screens, andreact-native-workletsto new versions in package.jsonpatchedDependenciesto target Expo 57-compatible versions; removes obsolete patches for@react-native/gradle-plugin@0.85.3andexpo-modules-jsi@56.0.10@expo/metro-configpatch to sanitize Hermes-only trailer/debug line mappings before composing source maps, producing valid JSON-roundtrippable outputreact-native-screenspatch to4.26.2and adds header toolbar items, nestedUIMenusupport, identifier-based subview updates, and new press event routing across iOS and AndroidsynchronousShadowStateUpdatesEnableddefault changes fromfalsetotrueinScreenStackHeaderConfigNativeComponentandScreenStackHeaderSubviewNativeComponenttype declarations within thereact-native-screenspatchMacroscope summarized 1e2b733.