feat(mobile): prototype Duo on the shared v5 navigator - #12648
Draft
juliusmarminge wants to merge 4 commits into
Draft
juliusmarminge wants to merge 4 commits into
juliusmarminge wants to merge 4 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/duo-v5-stack
branch
2 times, most recently
from
September 19, 2026 23:31
3f80f56 to
2669f8d
Compare
juliusmarminge
force-pushed
the
mobile/duo-v5-stack
branch
7 times, most recently
from
September 20, 2026 02:53
a8ed8f8 to
8b56c0e
Compare
juliusmarminge
force-pushed
the
mobile/duo-v5-stack
branch
from
September 23, 2026 06:13
8b56c0e to
5b715dc
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.
Keep the Duo prototype separate from the general v5 migration in #12646. This draft moves the existing Duo work onto that shared navigator instead of maintaining a second split-stack/header implementation. The original v4 experiment remains in #12557.
This layer adds iOS 27.1 fold/occlusion geometry and vertical-bar traits to the native layout observer, reserves the active toolbar edge and fold around thread lists/composers, and binds
UIBarButtonItem.axisBehaviorthrough v5's neutral header. The RNS patch file is 1,340 lines here versus 1,290 in the shared migration. The difference includes diff context. Generic stack rendering, iPad columns, search/menu/toolbar/appearance bindings, modal presentation, and markdown resizing belong below this PR.The same Expo app and React Navigation router remain in use. UIKit owns split-column collapse/expansion; the selected conversation and draft stay in the application model. The experimental split host is enabled on iPad and iOS 27.1; production device gating remains open.
The branch inherits the shared native header background/shadow bindings and custom-title geometry fix. Main already supplies a native label geometry guide so UIKit can recognize React custom titles when shaping automatic scroll-edge effects; the shared migration now ports that compatibility fix to v5's native header-content factory. It applies to custom title/subtitle content without T3 Code semantics or an extra blur API. The forced navigation-bar material workaround has been removed. The iOS 26 iPad sidebar also uses the automatic native effect, with top Settings/filter controls, floating search, and a darker inset background. Files loading and terminal Back retain one owner.
Validation: mobile typecheck and the four scroll-edge helper tests pass after this rebase; the existing focused navigation/layout/reserved-region suite passed 69 tests. A fresh Duo native build passes and the installed fingerprint matches. The current unfolded landscape client shows the selected review, preserved draft, automatic native header protection, and conversation/composer clearance from the toolbar rail with the 43-thread fixture. Navigation and screenshot scroll positioning use the existing callbacks/list API through CDP; these are not new physical touch or pose-transition checks. Earlier touch checks confirmed sidebar and filter callbacks but predate this revision. XCTest still targets the inactive display for some Duo interactions, so folded/book/portrait, keyboard, sheets, inspector transitions, and actual touch behavior need further checks on this revision.
This is a progress draft while the upstream native APIs settle. The shared iPhone header before/after, iOS 26 iPad automatic-effect capture, scroll recording, and native search/filter/Back checks are in #12646. All library patches should either fix generic library behavior or expose UIKit capabilities using the library's existing conventions.
Current unfolded landscape — native split columns, selected review, preserved draft, and system toolbar rail:
The sidebar scrolled under UIKit's automatic header protection:
Follow-up screenshot matrix:
For each supported pose, capture keyboard hidden and visible with a draft, then light and dark appearance. Include active search and an open filter menu; record one uninterrupted flat → book → closed → open transition to show draft and selection retention.
Built with GPT-6 in the Codex harness.