Skip to content

fix(mobile): backport iOS thread scroll fix to 1.4.1 - #15808

Merged
juliusmarminge merged 2 commits into
release/mobile-1.4from
t3code/mobile-1.4.1-hotfix
Oct 5, 2026
Merged

juliusmarminge merged 2 commits into
release/mobile-1.4from
t3code/mobile-1.4.1-hotfix

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

Backports #14808 to the 1.4 store line so App Store users get the iOS thread scroll fix without waiting for 2.0.

On 1.4.0, an iOS thread feed snaps back to the top a few seconds after you open a Working thread, type in the composer, send, or steer. It came in with the Expo 58 bump (#12045). Reanimated 4.7 now syncs settled animated values back into React. react-native-keyboard-controller 1.22.4 left contentOffset out of its first animated-props run, so the synced offset was treated as a style, and the next render reset the scroll position to 0.

main already moved to 2.0.0 and the v2 orchestrator (#2829). This PR therefore targets a new release/mobile-1.4 branch, cut at 024d49520ea, the commit just before the v2 orchestrator landed. 1.4.0 itself shipped from 4804036e04a. The branch has two commits:

  • A cherry-pick of 1945ce82c0d that bumps react-native-keyboard-controller 1.22.4 → 1.22.6 and rebases our patch. It applied cleanly, and the installed patch hash matches main.
  • A bump of version from 1.4.0 to 1.4.1.

The keyboard-controller bump changes the native fingerprint, so this needs a new store build. An OTA can't reach 1.4.0 binaries.

Shipping

The production EAS workflow runs automatically only on pushes to main, so this branch needs a manual dispatch after merge:

  • Run Mobile EAS Production on release/mobile-1.4 with mode=build, profile=production, platform=ios. The bug is iOS-only, since keyboard-controller only emits contentOffset on iOS. An Android build would also put 1.4.1 on the Play internal track above 2.0.0.

The build is auto-submitted to TestFlight. Releasing it on the App Store is a manual step in App Store Connect. Afterwards, the latest iOS production build will be 1.4.1, which differs from main's 2.0.0, so the next mobile-touching push to main will cut and submit a fresh 2.0.0 build. That is harmless. OTAs from main can't reach 1.4.1, because main's fingerprint includes the major version (#14944).

Verification

  • tsc --noEmit in apps/mobile passes on this branch.
  • The fix itself was verified on the iOS simulator on main in #14808: opening a Working thread, typing, sending, and steering all keep the scroll position. I did not run a simulator pass on this branch. It has the same keyboard-controller patch and the same thread feed scroll setup (KeyboardAwareLegendList in ThreadFeed.tsx).

🤖 Generated with Claude Code

znoraka and others added 2 commits October 4, 2026 16:34
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 4, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 4, 2026
@github-actions github-actions Bot added the 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 13.5 KiB — 15.1 KiB ✅
Codex Thread snapshot wire — 7.1 KiB — 7.3 KiB ✅
Codex Live turn WebSocket wire — 6.4 KiB — 7.8 KiB ✅
Codex Live turn WebSocket decoded — 56.2 KiB — 66.4 KiB ✅
Codex Live turn messages — 9 — 21 ✅
Claude Total thread wire — 13.5 KiB — 15.1 KiB ✅
Claude Thread snapshot wire — 7.1 KiB — 7.3 KiB ✅
Claude Live turn WebSocket wire — 6.4 KiB — 7.8 KiB ✅
Claude Live turn WebSocket decoded — 57.0 KiB — 66.4 KiB ✅
Claude Live turn messages — 9 — 21 ✅

Baseline: unavailable · PR result: c086533 · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 114.0 KiB
  • Claude decoded thread snapshot: 114.7 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@macroscopeapp

macroscopeapp Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at c086533

Macroscope's review found this PR approvable — This is a focused mobile bug-fix backport that updates the keyboard controller and its local patch to preserve iOS thread scroll positions and correct inset math. Its runtime impact is limited to keyboard-aware scrolling; the app version and lockfile changes support the required native store build without introducing a new capability or broader infrastructure change.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge
juliusmarminge merged commit 6af29c1 into release/mobile-1.4 Oct 5, 2026
33 of 34 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/mobile-1.4.1-hotfix branch October 5, 2026 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants