fix(mobile): prevent header overflow and back-button artifacts - #8624
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. |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The PR is a focused mobile header fix, but it replaces existing Home/iPad navigation-header behavior and changes shared iOS 26 native header rendering through a dependency patch. That production runtime surface and required native rebuild make it broader than an auto-approvable UI adjustment. You can add or adjust custom eligibility rules. Learn more. |
Additional verification: scroll-edge blur and header fadeCompared native Debug builds of the PR base ( No visible regression observed:
These recordings exercise scrolling under the header, not just the push/pop transition. No code changes were needed for this verification pass. Recordings
Matching scrolled states |
## What's Changed * 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 ## New Contributors * @ryanrhughes made their first contribution in pingdotgg/t3code#8569 **Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260829.1218...v0.0.37-nightly.20260829.1219 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260829.1219
## 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




Why
Long connection-status content can crowd the iOS header, hide its leading content, and turn the direct Settings button into UIKit's overflow menu. Separately, iOS 26.5 morphs the custom leading brand item's rectangle into the next screen's glass back button during navigation.
What Changed
Verification
Fresh native Debug build on iPhone 17 Pro, iOS 26.5, using a disposable local environment:
vp test run apps/mobile/src/features/home/workspace-connection-status.test.ts).git diff --checkpassed.UI Changes
Header-only crops from the simulator recordings:
Before — the leading rectangle morphs into Back:
After — Back remains a separate round control:
Before recording · After push/pop recording
Checklist
Requires a native dev-client rebuild. Refresh CocoaPods after installing the updated patch; a Metro reload alone cannot apply the native change.
Note
Medium Risk
Changes core iOS navigation header rendering and ships a native dependency patch; incorrect title/fade behavior would affect every Home/sidebar session and requires a full iOS rebuild to deploy.
Overview
Moves iOS Home and sidebar branding off custom leading toolbar items and into the native
headerTitleslot, so the glass back button no longer morphs from the brand rectangle on push/pop (iOS 26.5). Liquid Glass–specific paths (unstable_headerLeftItems, transparent title,BRAND_HEADER_ITEM_IDENTIFIER) are removed fromCompactBrandTitleandgetConnectionAwareBrandHeaderOptions.Connection-status headers are width-bounded using available header width minus trailing bar actions (
headerWidth,trailingItemCount), with truncation/flexShrinkso long labels do not force Settings into UIKit’s overflow menu. Home passes window width; the iPad sidebar passes pane width and refreshes options when width or header items change.The
react-native-screenspatch adds an empty nativeUILabelguide on title/center header subviews (iOS 26) so scroll-edge fade geometry works with Fabric custom title views without drawing over the brand. Internal docs describe the title-slot policy and note that a native dev-client rebuild (CocoaPods refresh) is required for the patch.Reviewed by Cursor Bugbot for commit eed8204. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Fix header overflow and back-button artifacts by moving brand title to
headerTitleslotunstable_headerLeftItemsto theheaderTitleslot across Home and iPad sidebar headers, avoiding UIKit toolbar-item behavior on iOS 26.5.brandTitleOffset()to returnIPAD_HOME_TITLE_OFFSETon iPad and0elsewhere; removes the native-leading-item offset path and deletesrenderCompactBrandHeaderItems.maxWidthsupport toWorkspaceConnectionTitleandStatusFadeInso long labels truncate within available header space;HomeRouteScreenandThreadNavigationSidebarPanerecompute header options on width changes.react-native-screens@4.26.2so iOS 26+ custom title/center subviews contribute geometry for UIKit's scroll-edge fade and supportUIBarButtonItem.identifierfor transition matching.getCompactBrandHeaderOptionsalways setsunstable_headerLeftItemstoundefined; any caller that previously relied onrenderCompactBrandHeaderItemsfor custom leading items will no longer render them.Macroscope summarized eed8204.