feat(mobile): experiment with v5 stacks and native iPad columns - #12646
Draft
juliusmarminge wants to merge 15 commits into
Draft
juliusmarminge wants to merge 15 commits into
juliusmarminge wants to merge 15 commits into
Conversation
juliusmarminge
added this pull request to stack #12649
September 19, 2026 22:56
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: 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. |
juliusmarminge
force-pushed
the
mobile/rns-v5-migration
branch
from
September 23, 2026 06:13
3a0cd97 to
bc16e28
Compare
This branch has not been deployed
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.
Our current iPad workspace simulates columns in React and depends on a large react-native-screens header patch. This draft moves iPhone navigation to v5 stacks and the iPad workspace to native split-column stacks, with Duo in #12648 above it.
It builds on the Expo 58 stack ending at #12052. RNS is pinned to Software Mansion's split-column prototype from #4666, commit
b604a9f78f4c4ff2ea7b68d6f0a0efc06821fde5; the published v5 alpha does not contain this split navigator.Stack.HostandStack.Screen; retain outgoing descriptors until native dismissal completes.ScrollViewMarker. Use native column measurements for top clearance. Both FlatList and LegendList keep rows below the header at rest, and Android retains its existing scroll view behavior.The RNS patch file shrinks from 2,223 to 1,290 lines. Remaining patches cover neutral-header background/shadow, custom-title scroll-edge geometry, search and toolbar bindings, app-owned menu state, empty-column/sidebar animation fixes, packaging, and legacy TypeScript/Android compatibility. Patch-file size includes diff context and excludes the new navigator adapter.
Validation: mobile typecheck passes on both layers; the existing focused navigation/layout suites passed 59 tests here and 69 in the Duo layer. The four scroll-edge helper tests pass after this follow-up. Fresh native builds pass on iPhone, iOS 27.0, and iPad, iOS 26.5, with matching installed fingerprints. The iPhone shows the automatic effect sampling content beneath the custom title, native bottom search filtering to one thread, Cancel clearing the query and dismissing the keyboard, and filters opening without a keyboard. The fresh iPad client retains its native fade, top controls, floating search, and darker sidebar inset with the automatic style. The isolated backend has 43 seeded threads; the iPad capture uses a longer cached fixture while reconnecting. Scrolled screenshots and the scroll-effect recording use the list's existing scroll API through CDP, rather than physical scroll gestures. Search, Cancel, and filter checks use native taps. Targeted lint retains existing HomeScreen warnings; React Doctor reports no errors in changed files and retains its existing complexity warning.
The broader mobile test run previously passed 183 files and failed
notification-center-manager.test.tsandpermissions-service.test.ts; both failures reproduce on the unchanged Expo base. This is a progress draft: modal wrappers, header option parity/accessibility, interactive dismissal, iPad multitasking, and Android still need verification.Before — existing iPad workspace on the Expo base:
After — native v5 columns with the corrected sidebar background, top controls, search, and preserved draft:
Native Files inspector with the screen background:
Earlier sidebar collapse/expand recording with keyboard and draft retained. This recording invokes the existing sidebar button callback through CDP; UIKit performs the column transition. It is not evidence of a physical touch test.
iOS 27 automatic scroll-edge effect: before and after
Before, the forced bar material hid content beneath the title:
After, UIKit's automatic effect samples content beneath the custom title:
At rest:
Automatic scroll-edge rendering while the list scrolls. The recording uses the existing list scroll API through CDP.
Fresh iOS 26 iPad client: automatic native sidebar fade
Files loading and terminal Back: before and after
Before: duplicate loading indicators in the Files inspector:
After: one loader in the Files inspector:
Before: two terminal Back buttons:
After: one terminal Back button beside the sidebar control:
The after captures use a cached disconnected fixture to keep the initial loading state visible. The terminal Back was exercised through a native tap.
Built with GPT-6 in the Codex harness.