# fix\(mobile\): the iPhone Duo keeps list titles through folds and unfolds with its sidebar · PR \#23146 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/pull/23146)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: merged

Source repository: pingdotgg/t3code

Source branch: duo/sidebar

Target branch: duo/followups

Head commit: b3ac8cde0a0c1db8804d1d45b6f965d0c2f6ac55

[Discussion and reviews](https://git.cafe/pingdotgg/t3code/pull/23146)

[Commits](https://git.cafe/pingdotgg/t3code/pull/23146/commits?format=markdown)

[Files changed](https://git.cafe/pingdotgg/t3code/pull/23146/diffs?format=markdown)

## Description

---

Two iPhone Duo fold regressions:

- **List title after a fold.** If the Duo folded while the other tab still showed a detail, that tab's list came back with an empty title. The navigation item kept its custom title view, but the bar no longer hosted it. Screens 5.0.0-t3.32 sets a detached custom title view again once the screen appears ([fork source](https://github.com/pingdotgg/react-native-screens/tree/t3-v5.0.0-t3.32), in [pingdotgg/react-native-screens#3](https://github.com/pingdotgg/react-native-screens/pull/3)).
- **Sidebar on unfold.** Unfolding first hid the sidebar, then slid it in once JS saw the wider window. UIKit applies the split's preferred display mode while a collapsed split expands, before the new width reaches JS, and the collapsed split asked for `secondaryOnly` whenever a detail was open. A collapsed split now carries the display mode the expanded split will use, so the sidebar arrives with the expansion.

## Verification

- Mobile typecheck passes on this layer.
- Recorded at the pre-restack commits named below, on development clients whose native fingerprint matches each commit (Screens t3.31 for `90514c987ad`, t3.32 for the others). The restack onto main changed only lockfile peer strings in this layer.

**List title after a fold.** Open a pull request, switch to Threads, fold, then return to Pull requests:

| Before (`90514c987ad`, this PR's base) | After (`c818e4b66e7`) |
|---|---|
| ![Before: the folded pull request list has no title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5de48dfde12cc12a/pr23144-title-BEFORE-90514c987ad.png) | ![After: the folded pull request list keeps its T3 Code title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f5f66b9908fd750/pr23144-title-AFTER-c818e4b66e7.png) |

**Sidebar on unfold.** Unfold with a thread open, twice. Before is `b7c15a397b9`, this layer's first commit, so both sides run the same Screens t3.32 client:

![Before: the thread fills the window, then the sidebar slides in](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/856253b6b0bd04e4/pr23144-sidebar-BEFORE-b7c15a397b9.mp4)

![After: the sidebar arrives with the split](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5daeee2448e1ff6b/pr23144-sidebar-AFTER-c818e4b66e7.mp4)

Both recordings also show the thread feed losing its place during the unfold. #23147 fixes that.

Implemented with Claude Opus 5.5 in Claude Code, running in T3 Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

