Thread transfer impact
โ ๏ธ The latest CI run did not produce a thread transfer result for 5877d50.
This comment will update automatically after the next completed run.
UIKit floats the iPhone Duo's tab bar 24 pt above the bottom edge, below the 34 pt safe area. The list's search field sat on the safe area, 10 pt higher, and the composer added its 6 pt gutter on top, 16 pt higher, so the three bottoms didn't line up.
The layout metrics observer now also reports UIKit's bar layout region for a 48 pt bar on the bottom edge (iOS 27.1), measured in each column. On the Duo, the search field and the composer pill end on it, level with the tab bar, and the workspace list keeps its last row clear of the field. Other devices keep their safe-area placement.
5b5e9062d3e and head 38a2aba508e (restacked commits), on one development client built from the stack's tip on current main (fingerprint a6c8232e). Both sides run on it, because this layer's native inputs don't change except the bar region the head reads:| Bottom edge (pt) | Before | After | Tab bar |
|---|---|---|---|
| Folded composer | 636 | 652 | 652 |
| Unfolded composer | 627 | 643 | 643 |
| Search field text, folded | 632 | 642 |
Implemented with Claude Opus 5.5 in Claude Code, running in T3 Code.
๐ค Generated with Claude Code
Review completed
โ ๏ธ The latest CI run did not produce a thread transfer result for 5877d50.
This comment will update automatically after the next completed run.
Verdict: Approved at 38a2aba
Macroscope's review found this PR approvable โ This is a narrowly scoped Duo-specific layout fix that reports the iOS floating bottom-bar inset and applies it to existing composer, search, and toolbar positioning. Older iOS versions and non-Duo devices retain their previous behavior, with no schema or configuration changes.
No code changes detected at 5877d50. Prior analysis still applies.
You can add or adjust custom eligibility rules. Learn more.
Important
Review was skipped as selected files did not have any reviewable changes.
c20ecb59-f1d4-40be-a1b1-9830a4f99a36Reviewing files that changed from the base of the PR and between 38a2aba508e3ced919ffea3a72f8dadab980387b and 5877d50a540f0e8d4cc0e6b8d51252a431443901.
You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.
Use the checkbox below for a quick retry:
No actionable comments were generated in the recent review. ๐
d94b303d-3220-4c7f-9ce5-8cb0009fad53Reviewing files that changed from the base of the PR and between 5b5e9062d3ecec8c4a26f94cc1cb8b701bc45122 and 38a2aba508e3ced919ffea3a72f8dadab980387b.
apps/mobile/modules/t3-native-controls/ios/T3LayoutMetricsView.swiftapps/mobile/src/features/threads/ThreadComposer.tsxapps/mobile/src/features/threads/ThreadDetailScreen.tsxapps/mobile/src/features/workspace/WorkspaceRootScreen.tsxapps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsxapps/mobile/src/lib/reserved-regions.tsapps/mobile/src/native/native-layout-metrics.tsxIncluded review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.
The iOS native layout metrics now publish an optional Duo bottom-bar inset. A hook exposes it to thread and workspace screens, which use it in bottom spacing calculations.
Changes: Duo bottom-bar inset
| Layer / File(s) | Summary |
|---|---|
Publish and expose the bottom-bar inset apps/mobile/lib/reserved-regions.ts, apps/mobile/modules/t3-native-controls/ios/T3LayoutMetricsView.swift, apps/mobile/src/native/native-layout-metrics.tsx | The native metrics include an optional bottomBarInset on supported iOS versions. useDuoBottomBarInset returns the value for Duo devices and undefined for other devices. |
Apply the inset to thread composer spacing apps/mobile/src/features/threads/ThreadComposer.tsx, apps/mobile/src/features/threads/ThreadDetailScreen.tsx | The collapsed composer uses the exported six-point gutter. The thread detail screen uses the Duo inset when available and retains its existing fallback and focused or expanded behavior. |
Apply the inset to workspace spacing apps/mobile/src/features/workspace/WorkspaceRootScreen.tsx, apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx | The workspace clearance and bottom search toolbar use the Duo inset when available, with fallback spacing otherwise. |
Priority: โ Normal
Estimated code review effort: 2 (Simple) | ~12 minutes
Change: Bug fix
| 1 | sequenceDiagram |
| 2 | participant UIKit |
| 3 | participant T3LayoutMetricsView |
| 4 | participant useDuoBottomBarInset |
| 5 | participant ThreadDetailScreen |
| 6 | participant WorkspaceRootContent |
| 7 | participant WorkspaceToolbar |
| 8 | UIKit->>T3LayoutMetricsView: provide bottom-edge bar metric |
| 9 | T3LayoutMetricsView->>useDuoBottomBarInset: publish bottomBarInset |
| 10 | useDuoBottomBarInset->>ThreadDetailScreen: return inset for Duo device |
| 11 | useDuoBottomBarInset->>WorkspaceRootContent: return inset for Duo device |
| 12 | useDuoBottomBarInset->>WorkspaceToolbar: return inset for Duo device |
Suggested reviewers: maria-rcks, shivamhwp
38a2aThe optional Duo inset has safe-area fallbacks, and no concrete merge-blocking behavior is established.
| Check name | Status | Explanation |
|---|---|---|
| Title check | Passed | The title clearly and concisely identifies the main change: aligning the iPhone Duo search field and composer with the tab bar. |
| Description check | Passed | The description explains the problem, the implementation, and the observed verification results. It includes UI evidence and identifies the development tooling used. The scope and approval section is โฆ |
| 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. |
Explanation
The description explains the problem, the implementation, and the observed verification results. It includes UI evidence and identifies the development tooling used. The scope and approval section is not explicit, but the description is otherwise sufficiently complete for this focused fix.
Comment @coderabbitai help to get the list of available commands.
Added 1 commit