Skip to content

fix(ios): keep workspace tabs with their native screen - #24666

Open
PixPMusic wants to merge 2 commits into
pingdotgg:mainfrom
PixPMusic:fix/ios-thread-entry-tab-bar
Open

PixPMusic wants to merge 2 commits into
pingdotgg:mainfrom
PixPMusic:fix/ios-thread-entry-tab-bar

Conversation

@PixPMusic

@PixPMusic PixPMusic commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Workspace tabs can overlap an entering iOS thread before Home's native disappearance callback arrives. On iPad, shrinking two columns into a compact chat can also flash the tabs above the composer, while Back can reveal the chat list before its tabs return.

Change

For card stacks, hide tabs as soon as a detail route is selected. Reveal them during native Back only for that outgoing route; a new selection expires the exception and cancelling Back clears it.

For native iPad columns, put the picker inside the existing primary screen and suppress its corresponding outer picker. UIKit now moves the tabs with the list through collapse, Back, and sidebar hiding. Compact Compose spacing is preserved; Usage and non-native fallbacks retain the outer picker.

Scope and approval

A focused correction to workspace navigation visibility from Alex's original report, eligible under the focused bug-fix exception. Rebased onto upstream main at 1eb4071a49, preserving main's native-pop handling. Android/web/desktop retain their existing paths. No provider, contract, connection, or user-documentation changes are needed.

Independent of #24651 and #24942; no merge order is required. The new iPad captures include the independent composer geometry from #24942, but this branch contains only navigation changes. Model labels and keyboard/accessory geometry are separate work.

Verification

  • The original failing-first visibility tests cover entry before native disappearance, new and same-key selections, completed/cancelled Back, detail navigation, modal projection, and cold-linked histories. The current focused pass passed 79 tests across five navigation files.
  • Final vp run check:changed passed formatting, lint, knip, affected typechecks, and 29 adjacent tests. Existing warnings remain.
  • Native captures used the matching client at pinned base 5b35402623d7, verified with mobile-native-client.ts ensure: fingerprint 07e40ccef828624c8ce643ba94921bcedea7dcb4. The later rebase includes the upstream query-test mock correction and preserves main’s newer Duo rotation handling; the final local checks below pass on the rebased source.
  • New integrated pass: iPad Pro 13-inch, iPadOS 26.5, dark theme, isolated demo fixtures and a sanitized environment label. Recorded landscape two-column → compact resize and portrait compact native Back. Tabs stay with the primary screen instead of flashing over the composer or appearing after the returned list.
  • The original revision also exercised thread entry, completed/cancelled Back, repeated reopening, and PRs/Usage/Settings on iPhone SE, 12 mini, 17 Pro, and 17 Pro Max, plus the iPad sidebar and Duo paths. That earlier evidence is retained below; those form factors were not rerun during this iPad extension.
  • Latest iPad cancellation, all-tab switching, physical devices, iPadOS 27, relay, and tunnel were not manually exercised. No provider turns were started. The separate keyboard accessory overlap also reproduces on upstream main and is not addressed here.

Matched iPad compact Back recordings, same portrait window and demo thread, original transition speed with idle lead-in trimmed: Before · After.

Before: the list appears without its tabs After: tabs arrive with the list
Before: the compact chat list has returned, but its tabs are still absent After: the compact chat list and tabs return together

Additional iPad evidence: two-column → compact resize after · settled compact chat.

Original iPhone thread-entry recordings: Before · After. Same Pro, dark mode, demo thread, and uninterrupted recording script. Original private report media was not published.

Model: GPT-6.1 Sol (xhigh reasoning) | Harness: Codex in T3 Code

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 25, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 25, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 9852a23

Macroscope's review found this PR approvable — This is a narrowly scoped iOS navigation and layout correction that prevents workspace tabs from overlapping thread content and preserves the correct tab placement on iPad. The route-transition logic is covered by focused tests, with no schema, deployment, security, billing, or static-analysis changes.

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

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 9852a23 and 4d0eee5.

Files selected for processing: 1
  • apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 3 remain after this review.

Walkthrough

The iOS workspace stack now tracks the route involved in a native return and uses it with the projected detail stack to determine tab visibility. iPad primary-column tabs use updated sidebar overlay and tab bar rendering rules.

Changes: Workspace tab visibility

Layer / File(s) Summary
Report native return source
apps/mobile/src/native/createV5StackNavigator.ios.tsx
V5CardStackView reports the matching pending native-pop source when the root appears. It reports null if no source matches or when the root disappears.
Apply return source to tab visibility
apps/mobile/src/native/workspace-stack-projection.ts, apps/mobile/src/features/layout/createWorkspaceStackNavigator.ios.tsx, apps/mobile/src/native/workspace-stack-projection.test.ts
WorkspaceStackView tracks the return route and uses workspaceDetailHidesTabs to compare it with the last projected detail route. Tests cover tab visibility during navigation, cold-linked details, and cancelled native transitions.

iPad primary-column tabs

Layer / File(s) Summary
Render primary-column tabs
apps/mobile/src/features/workspace/WorkspaceNativeTabs.ios.tsx, apps/mobile/src/features/workspace/WorkspaceRootScreen.tsx
WorkspaceNativeTabs suppresses the sidebar overlay for iPad primary-column tabs. WorkspaceRootScreen renders sidebar tabs for primary-column tabs and applies compact layout and compose-space settings under the specified conditions.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: juliusmarminge

Merge Risk: Minimal · up to 4d0ee

No confirmed issue remains that should block merging this change.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly and concisely describes the primary iOS change: keeping workspace tabs with their native screen.
Description check Passed The description includes complete Problem, Change, Scope and approval, and Verification sections. It explains the fix, scope, test results, limitations, and provides UI evidence plus the agent model a…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description includes complete Problem, Change, Scope and approval, and Verification sections. It explains the fix, scope, test results, limitations, and provides UI evidence plus the agent model and harness.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@PixPMusic
PixPMusic force-pushed the fix/ios-thread-entry-tab-bar branch from 676a714 to 9852a23 Compare October 25, 2026 18:38
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 25, 2026 18:38

Dismissing prior approval to re-evaluate 9852a23

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Oct 25, 2026
@PixPMusic PixPMusic changed the title fix(ios): hide workspace tabs when opening a thread fix(ios): keep workspace tabs with their native screen Oct 25, 2026
@PixPMusic
PixPMusic force-pushed the fix/ios-thread-entry-tab-bar branch from 9852a23 to 4d0eee5 Compare October 25, 2026 18:49
juliusmarminge added a commit that referenced this pull request Oct 25, 2026
`vp run mobile:e2e [--device <id>] [--concurrency <n>]` boots dedicated
simulators, installs the cached dev client, starts a fixture server and
Metro, pairs automatically, then runs home -> open thread -> back. Each
step records video and checks the settled chrome (tab bar, back button,
composer) from accessibility snapshots, and compares video frames to the
settled screenshots to catch chrome that lags a transition, such as the
workspace tabs drawn over an entering thread (#24666). Results land in
artifacts/mobile-e2e/<run>/index.html with screenshots, videos, frame
sheets and the first offending frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 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.

1 participant