Skip to content

fix(ios): scroll short source files from blank space - #10178

Merged
juliusmarminge merged 1 commit into
mainfrom
fix/ios-source-file-blank-pan
Sep 7, 2026
Merged

fix(ios): scroll short source files from blank space#10178
juliusmarminge merged 1 commit into
mainfrom
fix/ios-source-file-blank-pan

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 5, 2026

Copy link
Copy Markdown
Member

Horizontal dragging below the last line of a short iOS source file does nothing, even when its lines overflow. Starting the same gesture over a code row works.

Let that trailing blank area target the existing single, expanded, headerless file. Reuse the current pan, overflow and back-navigation guards. The full review screen keeps its existing hit testing because its file headers exclude this fallback. Headerless single-file snippets in inline review-comment cards also gain blank-area scrolling. No new state or row scan.

Related #5157. This reproduces the narrower blank-area failure, not the author's unspecified touch path on iOS 27.

Verification

  • Built baseline 62ed748a and candidate 2d39d4fd independently for the same iPhone 17 Pro Max simulator, iOS 26.5. The mobile source is unchanged on latest main cb9a6942.
  • Same synthetic C# file, unwrapped rows, 440×956 viewport. Two leftward drags from (360,650) to (80,650) do nothing before and reach all three right-hand line endings after. Reverse drags restore the left edge. Row-origin scrolling works in both builds.
  • A nonoverflowing source stays stationary on a leftward blank-area drag. A rightward drag returns to Files. Reopening the overflowing file starts at its left edge.
  • Focused SwiftLint with the existing mobile configuration passes. No JavaScript test was added to mirror a native gesture implementation.
  • Native syntax highlighting fell back to JavaScript in both builds; the native source canvas was separately confirmed through accessibility. Existing test-state storage warnings were dismissed without deleting records. Android, the reporter's iOS 27 device, inline review-comment cards, long-file vertical scrolling, and a full multi-file review gesture matrix were not native-tested. All three callers, full-review header exclusion, and vertical gesture guards were source-reviewed.

Before and after

After the same two blank-area drags:

Before After
Before: long C# lines remain at the left edge after dragging below the file After: dragging below the file reveals all three right-hand line endings

Before recording: blank-area drags ignored, followed by a working row drag

After recording: blank-area drags scroll right and back left

Hold for native-release timing. This native change should be coordinated with the next store build under the repository's fingerprint workflow. Do not automatically close the original report on this narrower reproduction.

Prepared by GPT 6 Astra via Codex in T3 Code.

Note

Fix horizontalPanTarget to scroll short source files from blank space on iOS

Adds a fallback in T3ReviewDiffView.swift for pan points that do not map to a row. When the point is at or below the content end, no file-header rows exist, exactly one file has measured content width, and that file is expanded, the method now returns a code-scrolling target so horizontal pans in the bottom blank area scroll the file.

Macroscope summarized 2d39d4f.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 5, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 2d39d4f

Macroscope's review found this PR approvable — This is a narrowly scoped native iOS bug fix that reuses the existing horizontal scrolling path only for trailing blank space in a single expanded source file. Existing multi-file, collapsed, header, and review-diff interactions are explicitly excluded, with no schema, security, deployment, or default-behavior changes.

You can add or adjust custom eligibility rules. Learn more.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.5 KiB 13.5 KiB +15 B (+0.1%) 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.0 KiB +1 B (+0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.5 KiB 6.5 KiB +14 B (+0.2%) 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 57.0 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 8 8 0 (0.0%) 21
Claude Total thread wire 13.6 KiB 13.6 KiB +24 B (+0.2%) 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.0 KiB −8 B (−0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 6.6 KiB +32 B (+0.5%) 7.8 KiB
Claude Live turn WebSocket decoded 57.8 KiB 57.9 KiB +44 B (+0.1%) 66.4 KiB
Claude Live turn messages 9 10 +1 (+11.1%) 21

Baseline: cb9a694 · PR result: 2d39d4f · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@juliusmarminge
juliusmarminge merged commit e3b644c into main Sep 7, 2026
22 checks passed
@juliusmarminge
juliusmarminge deleted the fix/ios-source-file-blank-pan branch September 7, 2026 07:20
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
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant