fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback - #9828
Merged
juliusmarminge merged 2 commits intoSep 7, 2026
Merged
Conversation
ReviewSheet force-unwrapped resolveNativeReviewDiffView(), which is documented to return null while Expo registers the native view config and forever after a failed requireNativeView (e.g. a binary without the T3ReviewDiffSurface module). Rendering a null component type throws "Element type is invalid", which is fatal in release builds: the app crashes the moment the diff widget appears, and since the thread's review section auto-selects from persisted checkpoints, every reopen crashes again and the chat is burned. Null-check the resolver like ThreadFeed's ReviewCommentCard already does, and fall back to showing the raw patch when the native surface is unavailable. Fixes pingdotgg#7800 ox-alpha via opencode
…diff fallback When the native diff surface is unavailable, the inspector navigator could not scroll or filter the raw patch, and iOS had no refresh affordance. Gate the navigator (and its toolbar toggle) on the native view resolving, and add a RefreshControl to the fallback ScrollView.
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused one-file mobile bug fix that preserves the native diff path while making unavailable-native-view states render safely, hiding unusable navigation controls, and restoring refresh through the existing handler. It introduces no schema, security, deployment, product-default, or static-analysis changes. You can add or adjust custom eligibility rules. Learn more. |
2 tasks
3 tasks
github-actions Bot
added a commit
to omarcresp/t3code-flake
that referenced
this pull request
Sep 7, 2026
## What's Changed * fix(mobile): keep pending messages in the chat timeline by @juliusmarminge in pingdotgg/t3code#10449 * fix(mobile): show connection status in the floating pill instead of a second one by @juliusmarminge in pingdotgg/t3code#10440 * fix: use Pierre icons consistently for attachments by @juliusmarminge in pingdotgg/t3code#10475 * feat(mobile): open the thread screen as soon as a new task is submitted by @juliusmarminge in pingdotgg/t3code#10435 * fix(devcontainer): make repository setup work by @saphid in pingdotgg/t3code#7875 * fix(projects): prevent invalid script IDs from crashing threads by @saphid in pingdotgg/t3code#10019 * fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback by @lnieuwenhuis in pingdotgg/t3code#9828 * fix(ios): scroll short source files from blank space by @juliusmarminge in pingdotgg/t3code#10178 * feat(mobile): start a new thread on an existing branch by @StiensWout in pingdotgg/t3code#10359 * fix(mobile): improve font-size slider performance and prevent maximum update depth errors by @bbernag in pingdotgg/t3code#7138 * fix(web): keep composer toolbar controls anchored during transitions by @juliusmarminge in pingdotgg/t3code#10478 * fix(web): resize the floating preview from any edge by @juliusmarminge in pingdotgg/t3code#10467 * fix(mobile): prevent chat from disappearing when scrolling by @juliusmarminge in pingdotgg/t3code#10479 * fix(mobile): smooth composer status pill resizing by @juliusmarminge in pingdotgg/t3code#10484 * fix(mobile): release initial scroll target after dragging by @juliusmarminge in pingdotgg/t3code#10483 * fix(mobile): animate thread lifecycle transitions consistently by @juliusmarminge in pingdotgg/t3code#10487 * fix(mobile): restore assistant message bottom padding by @juliusmarminge in pingdotgg/t3code#10491 * fix(mobile): preserve chat rows when toggling commands by @juliusmarminge in pingdotgg/t3code#10492 ## New Contributors * @bbernag made their first contribution in pingdotgg/t3code#7138 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260907.1332...v0.0.40-nightly.20260907.1346 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.40-nightly.20260907.1346
Open
2 tasks
raman325
added a commit
to raman325/t3code
that referenced
this pull request
Sep 7, 2026
* origin/main: (675 commits) fix(web): tolerate servers that predate git identity in project import (pingdotgg#10547) chore(mobile): bump app version to 1.1.0 fix(mobile): wait for native thread scroll before reveal (pingdotgg#10486) fix(mobile): match Working status color to desktop fix(web): remove inserted citations on cancel (pingdotgg#10518) feat(web): group onboarding project import by repository (pingdotgg#10493) fix(mobile): preserve chat rows when toggling commands (pingdotgg#10492) fix(mobile): restore assistant message bottom padding (pingdotgg#10491) fix(mobile): animate thread lifecycle transitions consistently (pingdotgg#10487) fix(mobile): release initial scroll target after dragging (pingdotgg#10483) fix(mobile): smooth composer status pill resizing (pingdotgg#10484) fix(mobile): prevent chat from disappearing when scrolling (pingdotgg#10479) fix(web): resize the floating preview from any edge (pingdotgg#10467) fix(web): keep composer toolbar controls anchored during transitions (pingdotgg#10478) fix(mobile): improve font-size slider performance and prevent maximum update depth errors (pingdotgg#7138) feat(mobile): start a new thread on an existing branch (pingdotgg#10359) fix(ios): scroll short source files from blank space (pingdotgg#10178) fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback (pingdotgg#9828) fix(projects): prevent invalid script IDs from crashing threads (pingdotgg#10019) fix(devcontainer): make repository setup work (pingdotgg#7875) ... # Conflicts: # apps/server/src/provider/builtInDrivers.ts # docs/README.md # docs/user/install.md # packages/contracts/src/settings.test.ts # packages/contracts/src/settings.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When the native diff view is unavailable, the changed-files widget falls back to a raw patch ScrollView but keeps a navigator whose scroll targets no-op and offers no way to refresh on iOS.
Hide the navigator and its toggle in fallback mode and add pull-to-refresh to the fallback ScrollView.
Builds on #7867 (null-safe fallback) by addressing its two unresolved review threads.
Built with muse-spark-1.3-contributor via OpenCode in T3 Code.
Note
Low Risk
Review UI fallback and visibility gating only; no changes to auth, networking, or diff data loading.
Overview
When
resolveNativeReviewDiffView()returns null (missing native module or still registering), ReviewSheet no longer assumes a native component exists. The native diff branch runs only when resolution succeeds; otherwiseparsedDiff.kind === "files"degrades to an inline raw patch with a short “native diff view unavailable” message instead of crashing.The changed-files workspace inspector and the sidebar.right header toggle are gated on a resolved native surface, since file navigation depends on
scrollToFileon that view. In raw fallback, opening the pane would show an empty column or non-functional controls, so both are hidden in that case.The fallback ScrollView (raw patch, empty states, and the new files-without-native path) gets
RefreshControlwired to the existinghandlePullToRefresh, restoring pull-to-refresh on iOS where only Android had a “Refresh current diff” menu action.Reviewed by Cursor Bugbot for commit 9b9b859. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Hide changed-files navigator and restore refresh in raw diff fallback for
ReviewSheetnull, with pull-to-refresh viaRefreshControlRefreshControlto the non-native review contentScrollViewfor empty and other fallback statesMacroscope summarized 9b9b859.