revert(mobile): git sheets back to Platform.OS ternaries (un-guarded uniwind variants broke both platforms) - #13169
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped revert that restores explicit Android/iOS styling branches across the Git sheets, fixing layout regressions without changing Git operations, navigation, data contracts, or product defaults. The larger diff is primarily a mechanical replacement of unreliable platform class variants with already-established ternary logic. You can add or adjust custom eligibility rules. Learn more. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: pingdotgg/t3code/.coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review. 📝 WalkthroughWalkthroughChangesGit sheet platform styling
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to The revert restores the mobile Git sheet styling on both platforms, with no merge-blocking risk identified. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. |
|
Integrated device recheck on the reverted head Android — Confirm action, broken variant build then reverted build iOS — Commit changes, broken variant build then reverted build The Android Branches and Commit sheets also render their full bodies on the reverted head. This confirms the specific device regressions that prompted the revert. The underlying Uniwind platform-variant bug is being addressed separately. |
#13169 reverted #13161 on main, but Uniwind 1.11.0 platform variants stay unguarded in the Metro pipeline. Say they must not be used until the pipeline is fixed/upgraded and proved on both devices, and that existing variant usages are unsafe and should not be copied. Co-authored-by: Apex <noreply@callstack.com>
## What's Changed * chore(mobile): drop dead nitro-markdown tgz override and @expo/metro-runtime by @juliusmarminge in pingdotgg/t3code#13148 * feat(web): show settings scope as a sentence at the top of the page by @juliusmarminge in pingdotgg/t3code#13139 * refactor(web): move settings scope pickers into breadcrumbs by @Yash-Singh1 in pingdotgg/t3code#13165 * feat(auth): share provider sign-in flows and credential bindings by @juliusmarminge in pingdotgg/t3code#12983 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in pingdotgg/t3code#13161 * chore(mobile): name the two project favicon caches by their job by @juliusmarminge in pingdotgg/t3code#13160 * revert(mobile): git sheets back to Platform.OS ternaries (un-guarded uniwind variants broke both platforms) by @juliusmarminge in pingdotgg/t3code#13169 * docs(mobile): document the two mobile routes that intentionally skip deep links by @juliusmarminge in pingdotgg/t3code#13164 * refactor(mobile): break module cycles with focused extractions by @juliusmarminge in pingdotgg/t3code#13151 * fix(server): generate PR diffs from branch changes by @Yash-Singh1 in pingdotgg/t3code#13170 * fix(web): preserve nested scroll behavior in chat timeline by @Yash-Singh1 in pingdotgg/t3code#13167 * test(web): cover usage model ordering without static markup by @flamboh in pingdotgg/t3code#13104 * fix(desktop): find linuxbrew node for the WSL backend by @CodyRay in pingdotgg/t3code#7827 * chore(models): use GPT-6 Luna for text generation by @extoci in pingdotgg/t3code#13115 * fix(mobile): keep ordinary offline outbox failures out of console.warn by @juliusmarminge in pingdotgg/t3code#13144 * feat(providers): check remote compatibility ranges by @juliusmarminge in pingdotgg/t3code#13130 * chore(lint): keep mobile theme escape-hatch allowlist honest by @juliusmarminge in pingdotgg/t3code#13146 * fix(web): the pull request badge reads at the meta size again by @juliusmarminge in pingdotgg/t3code#13175 * fix(mobile): uniwind platform variants stay guarded on both platforms by @juliusmarminge in pingdotgg/t3code#13172 * refactor(mobile): git sheets use uniwind platform variants instead of className ternaries by @juliusmarminge in pingdotgg/t3code#13185 * refactor(mobile): remaining className platform ternaries become class variants by @juliusmarminge in pingdotgg/t3code#13188 * fix(web): align provider emails without clipping by @Derpedyea in pingdotgg/t3code#13174 * perf(mobile): recycle the default v2 home list and scope the snooze minute tick by @juliusmarminge in pingdotgg/t3code#13149 * refactor(mobile): retire the legacy grouped thread list by @juliusmarminge in pingdotgg/t3code#13183 * fix(server): background PR checks spend less GitHub quota by @juliusmarminge in pingdotgg/t3code#13189 * fix(server): background PR sync reads summaries in batches by @juliusmarminge in pingdotgg/t3code#13198 * fix(server): GitHub PR lookups stop probing owner-qualified heads by @juliusmarminge in pingdotgg/t3code#13200 * chore(mobile): clear the legacy-list deletion fallout by @juliusmarminge in pingdotgg/t3code#13203 ## New Contributors * @CodyRay made their first contribution in pingdotgg/t3code#7827 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260922.2123...v0.0.43-nightly.20260923.2135 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260923.2135




Problem
#13161 (merged as
ec28eef) converted the mobile git sheets'Platform.OSclassName ternaries to Uniwindios:/android:variants. Both device passes confirmed regressions on the merged head:bed0b4renders content (captures:/tmp/mobile-audit-pr13161-{before,after}-android-git-{branches,commit,confirm}.png)./tmp/mobile-audit-pr13161-{before,after}-ios-git-commit.png).Root cause
ios:/android:variants are not platform-guarded in this repo's uniwind 1.11.0 pipeline. In a production-likeexpo export --platform iosof5c191ec, the iOS bundle's compiled stylesheet contains the Android entries with their platform metadata stripped — e.g."android:p-4": [{ "entries": [["padding", …]], "native": false, "complexity": 0 }](nativeis literallyplatform !== null, soaddMetaToStylesTemplate's exclusion never fires). The runtime store (uniwind/src/core/native/store.ts) has no platform check in its style filter. Net semantics: every platform variant applies on both platforms, and same-property conflicts resolve to the last className token, identically everywhere."android:shrink android:grow-0 ios:flex-1"—ios:flex-1is last, so Android also getsflexBasis: 0%/flexGrow: 1, collapsing content to zero height in thefitToContentssheets; the rootbg-sheet ios:flex-1compounds it.android:p-4leaks (no iOS counterpart forpaddingto overtake it;metro.config.jssetspolyfills: { rem: 14 }, sop-4= 14px), plus the input'sandroid:bg-sheet-solid. Overview/branches/confirm matched only because same-property iOS utilities later in the string masked the leaks.Full analysis: #13161 (comment)
Fix
Straight revert of
ec28eef— the five files are now byte-identical to the pre-regression baselinebed0b4cdad4(git diff bed0b4cdad4 HEAD -- apps/mobile/src/features/threads/gitis empty), i.e. exactly the code the passing "before" device captures rendered.Checks
git diff bed0b4cdad4..HEAD -- apps/mobile/src/features/threads/git→ 0 lines (baseline bytes restored).tsc --noEmitinapps/mobileon identical content: clean.expo export --platform iosof the reverted source: all converted variant classes are gone from the compiled stylesheet ("android:p-4","ios:flex-1","android:shrink","android:bg-sheet-solid","android:min-h-12","android:rounded-[20px]","ios:gap-2","ios:bg-screen"→ no entries), and the original ternaries are present at the call sites.Known follow-up (not in this PR)
Pre-existing
android:usages still ship their values on iOS through the same defect (SettingsControlRowandroid:text-base/android:min-h-14/android:py-3/android:gap-1,SettingsServerControlsRouteScreenandroid:px-4) — masked visually today. The uniwind platform-tagging gap should get its own fix before any further variant-based migration.— Claude (Apex by Callstack, pi harness). Do not merge before the integrated device pass confirms both platforms.
Summary by CodeRabbit