fix(mobile): use the Android sheet header for Add environment#23452
Problem
Android Add environment uses full-screen safe-area padding inside a sheet, producing an oversized header and square edges.
Change
Use the existing AndroidSheetHeader and rounded ScreenContent composition for Android form sheets, and set ConnectionsNew’s native top-corner radius to the established 28dp value.
Scope and approval
Small, focused visual bug fix requested by the maintainer. It reuses established sheet components and an existing native option. The SettingsScreen content-wrapper branch overlaps #18547; this PR has no dependency on it.
Verification
vp run check:changedpassed on the branch rebased ontoe9d6125.- Native Android 17 emulator, 720×1280 portrait, light theme, isolated backend with synthetic project/thread data. Checked both sheet heights, native top corners, the rounded content join, keyboard dismissal, back/reopen, pairing return, and the pushed Settings form.
- The rebase preserves main’s Settings surface and scroll-inset providers.
- Code-field scrolling in the small sheet remains a pre-existing verification limit. iOS was source-reviewed; this change is Android-only.
Current main before the fix and the final result, at the same collapsed height:
| Before | After |
|---|---|
| Original oversized Android sheet header | Compact header with rounded content and native outer corners |
Model: GPT-6.1 Sol | Harness: Codex in T3 Code
Checks
Added 1 commit
- fix(mobile): use the Android sheet header for Add environment6d8f16e
Approvability
Verdict: Approved at a3d33ec
Macroscope's review found this PR approvable — This is a narrowly scoped Android visual fix that reuses existing sheet-header and content components, with the corner-radius adjustment limited to the Add environment route. It does not alter data, business logic, APIs, or other platform behavior.
You can add or adjust custom eligibility rules. Learn more.
Warning
Review limit reached
Only developers with an assigned seat can use this organization's usage-based review budget, and seats here are assigned manually. Ask an admin to assign a seat, or change the review continuation mode in Billing.
Next included review available in 21 minutes.
View limit details
Limit details: You’ve used all 10 included reviews currently available.
Review configuration:
External image Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: main
- File: .coderabbit.config.ts
- Commit: 220eb73
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
24c1b575-e7f2-44ea-9aa7-3ad855f410ea
External image Commits
Reviewing files that changed from the base of the PR and between 1c815d9d2b3f7643f4e6a076bd80bd4857c2b299 and a3d33ecc013ac478494da6ceaf3ff17e118e4100.
External image Files selected for processing: 2
apps/mobile/src/Stack.tsxapps/mobile/src/features/settings/components/SettingsScreen.tsx
No actionable comments were generated in the recent review.
ℹ️ Recent review info
⚙️ Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: main
- File: .coderabbit.config.ts
- Commit: 96bae54
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
cdd30fdf-ede8-4759-a9d4-2bc5b45b6654
📥 Commits
Reviewing files that changed from the base of the PR and between 6d8f16e86fecaee0b9f90b1990df66d12acf7cb9 and 1c815d9d2b3f7643f4e6a076bd80bd4857c2b299.
📒 Files selected for processing: 1
apps/mobile/src/Stack.tsx
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.
Walkthrough
Android form sheets use
AndroidSheetHeaderand render children insideSettingsScreenContent. TheConnectionsNewsheet route sets its corner radius to 28 points on Android and leaves it undefined on other platforms.Changes: Settings form sheet
Layer / File(s) Summary Android form-sheet rendering
apps/mobile/src/features/settings/components/SettingsScreen.tsx,apps/mobile/src/Stack.tsxWhen the platform is Android and formSheetis true,SettingsScreenrendersAndroidSheetHeaderwith screen props and a back callback. Android form-sheet children render insideSettingsScreenContent. Other cases retainAppBar; non-Android form sheets retain direct child rendering. TheConnectionsNewroute setssheetCornerRadiusto 28 on Android and leaves it undefined on other platforms.Priority: External image Low
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix
Suggested reviewers:
juliusmarminge
Merge Risk: External image Minimal · up to 1c815
The supplied change context shows no unresolved material risk, so the PR is mergeable with normal checks.
Pre-merge checks: Passed 4
Check name Status Explanation Title check Passed The title clearly identifies the Android mobile fix and matches the main changes to use the Android sheet header for Add environment. 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. Description check Passed The description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the Android behavior change, affected components, manual verification, limitations, s… Full details: Description check
Explanation
The description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the Android behavior change, affected components, manual verification, limitations, screenshots, and agent details. It does not link the maintainer approval comment, but it provides a focused-fix rationale, so the description is sufficiently complete.
✨ 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.
Added 2 commits
Note
Written by gpt-6.1-sol on behalf of Maria
thanks @PixPMusic. the existing AndroidSheetHeader, rounded ScreenContent, and android-only 28dp native corners are the right focused fix.
pushed a3d33ecc013ac478494da6ceaf3ff17e118e4100 to this branch. both contributor commits are preserved. merged github/main (220eb73524) and resolved the settings conflict while retaining main's surface, scroll-inset providers, and search prop. no extra feature changes or tests were added. the final diff remains two files, 22 insertions and 10 deletions. back and submit actions, disabled/loading states, the pushed settings route, and ios paths are preserved.
verification passed through blacksmith: vp run check:changed (format, lint, both knip passes, mobile and scripts typechecks), plus 23 existing pairing and android/workspace navigation tests. two independent read-only reviews approved this head without findings.
unverified: current-head native android appearance, detents, keyboard, back/reopen, and submission. this vm has no connected android device; t3 reports "Agent device access is turned off for this environment." chrome cannot render this native sheet. the default dev server was started in the background and stopped; no new before/after captures or interaction video are claimed. the original pr's captures remain historical evidence only. a native device pass is still needed before treating this ui as verified. all 30 current-head checks are now green, git.cafe reports no conflicts and a mergeable verdict, and macroscope approved this sha. coderabbit hit its included-review limit and did not review this push; both independent code reviews approved the exact head. there are no actionable bot findings. native verification remains the outstanding review limit.
Note
Written by gpt-6.1-sol on behalf of Maria
Verified in a real dev environment
no changed app behavior could be verified on this linux vm. this is an unverifiable result, not a passing runtime verification.
inspected the description, discussion, reviews, two-file diff, commit authors, and exact fetched head a3d33ecc013ac478494da6ceaf3ff17e118e4100. the pr is open and its three pr commits are authored by PixPMusic and maria-rcks, with none authored by juliusmarminge or t3dotgg. git.cafe maps it to https://git.cafe/pingdotgg/t3code/pulls/23452.
the affected path is the native android Add environment form sheet: ConnectionsNew sets 28dp native corners, and android SettingsScreen form sheets use AndroidSheetHeader and rounded ScreenContent. a web browser cannot render this native navigation path.
runtime prerequisite transcript:
| 1 | t3 device_list |
| 2 | Agent device access is turned off for this environment. |
| 3 | |
| 4 | adb devices -l |
| 5 | List of devices attached |
| 6 | [no devices] |
Not verified
main reproduction, current-head android appearance at both detents, keyboard dismissal and code-field scrolling, back/reopen, pairing submission and return, pushed Settings behavior, and ios behavior remain unverified. no before/after captures or interaction recording were produced. the mobile verification skill requires stopping when device tools or a selected device are unavailable and prohibits switching automation systems.
no dev server was started, no project/thread/provider data was created, and no Codex turn was run because the required native client was unavailable. no source changes, commits, pushes, labels, merges, rebases, or force-pushes were made. the 30 successful head checks reported by git.cafe are existing CI results, not runtime proof or checks rerun in this pass. enable device access and provide an android emulator/device to complete the main/head comparison and neighboring flows.
Note
Written by gpt-6.1-sol on behalf of Maria
Verified on Android emulator (API 35) against a real dev server
verified head a3d33ecc013ac478494da6ceaf3ff17e118e4100 on the t3 x86_64 emulator, android 15 / api 35, 1080×2400, light theme. the matching native dev client came from the shared cache. metro ran on 8081 and the real isolated backend on 13773, with adb reverse forwarding and fresh server-issued pairing credentials. no mocks, showcase mode, or synthetic conversation data.
reproduced the oversized safe-area header and square native corners on 220eb73524, the main commit merged into this pr. restored the exact pr head and captured the same collapsed sheet with the same project/thread data. the compact header, rounded content join, and rounded native outer corners are visible. both 0.55 and 0.7 heights rendered correctly.
opened Environments, tapped its plus button, expanded Add environment, typed the address and code with the real gboard keyboard, dismissed the keyboard with android back, and submitted an invalid code. the in-form credential error appeared and submit remained available. the header back button closed the sheet; reopening cleared the error. a fresh valid credential then connected and returned to the opener with the environment still shown as Connected. the pushed Settings → Environments → Add environment form also rendered correctly, including its disabled submit for an empty address.
created the real pr23452-android-project through the mobile folder picker. two real Codex gpt-6.1-sol turns ran through the local proxy and streamed back to android: reading README.md returned android verification workspace, then a follow-up returned README.md contains 1 heading. the thread survived app and metro restarts.
no source fix, commit, or push was needed. vp i passed on retry after an initial dependency patch failure. existing head CI reports 30 successful checks; those checks were not rerun in this runtime-only pass.
before: main merge parent, oversized header and square corners
after: exact pr head, compact header and rounded corners
two real Codex gpt-6.1-sol responses in the Android client
neighboring pushed Settings Add environment form
successful pairing returns to the connected environments list
Not verified
ios cannot run on this linux vm. latest github/main was not run; the before capture uses the pr’s actual main merge parent 220eb73524. camera QR scanning, dark theme, landscape/tablet layouts, relay/tunnel connections, and physical devices were not exercised. the video ends at the invalid-code error; back/reopen and valid pairing were checked separately.
media delivery: the uploaded video was played to the end and its uploaded url was tested for playback and seeking. the posted comment was reopened; git.cafe currently renders these external image/video embeds as links, so inline playback inside the forge comment is unverified.