Repository navigation
fix(web): keep message navigation visible on touch when there is room - #26806
Conversation
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — Message navigation will appear automatically on touch devices when sufficient gutter space exists. This changes the default presentation for those users and requires human confirmation. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
… (upstream pingdotgg#26806) Cherry-picked from pingdotgg#26806 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
073c03f to
e124ec6
Compare
|
Note Written by Verified in a real dev environmentverified as-is on ran at 1600x1000, chromium's touch emulation changed actual pointer media queries from fine to coarse. main hid the minimap despite a persistent gutter. the pr kept it visible. trusted touch input on the rail navigated to an earlier message. restoring a fine pointer preserved the rail, and mouse navigation still worked. at 600x1000 without a persistent gutter, touch correctly hid the rail; mouse hover revealed it. before and after use the same two completed turns and viewport. current main includes unrelated layout changes, so text lane widths differ. the recording uses the third real turn to provide more scrollable content. inspected the captures and verified uploaded video playback and seeking in the t3 browser. cafe reports 32 successful checks, zero failing or pending checks; no local automated checks were rerun for this verification-only pass. Not verifiedphysical surface keyboard detachment and physical touchscreen hardware; pointer changes and touch input used chromium emulation. packaged electron on linux, macos or windows; native ios/android clients; remote relay/tunnel connections. this pass exercised the local web client and real codex provider through the running server. other providers were outside this css-only change. |
|
I'm the author of the issue. I will test if this works on my surface pro |
Recording.2026-11-01.180838.mp4Pr works on surface pro. YAY!!!!! |
The minimap was hidden for any non-fine pointer, so a Surface Pro dropped it when its keyboard was detached even with a wide gutter. Only hide it on coarse pointers when it would otherwise rely on hover to appear. Fixes #26190 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e124ec6 to
cd9d62f
Compare
**v0.1.8-nightly.20261105.4205** · 28 changes from 3 contributors - **Claude MCP Apps.** Use interactive MCP Apps in Claude Code threads. - **Organized repository clones.** Clone repositories into host, owner, and repository folders, including repositories with the same name. - **Agent browser tabs.** Open new agent browser tabs when idle tabs have filled the shared limit. - **Pending questions.** Answer or dismiss older questions and approval prompts even after their messages leave the loaded conversation. ### Plus 22 more bug fixes. <details> <summary>Full changelog</summary> ## What's Changed * docs: scope managed-policy LAN note to old background services by @b2bvic in pingdotgg/t3code#30900 * feat(server): render MCP Apps from Claude tool calls by @juliusmarminge in pingdotgg/t3code#29803 * build: run Effect rules on mobile and lock in clean suggestion rules by @juliusmarminge in pingdotgg/t3code#31111 * fix(mobile): keep iOS composer empty after sending an autocorrected word by @shivamhwp in pingdotgg/t3code#30308 * fix(server): idle agent tabs free a slot when the server's 32-tab browser limit is full by @shivamhwp in pingdotgg/t3code#24186 * fix(web): keep message navigation visible on touch when there is room by @shivamhwp in pingdotgg/t3code#26806 * fix(mobile): pinch wide images from anywhere in the Android viewer by @shivamhwp in pingdotgg/t3code#30929 * fix(mobile): preserve autocorrect in custom question answers by @shivamhwp in pingdotgg/t3code#30744 * fix(web): show Setting up during worktree setup by @shivamhwp in pingdotgg/t3code#28832 * fix(mobile): keep iOS thread menus short enough for drag selection by @shivamhwp in pingdotgg/t3code#30944 * fix(web): show the comparison base beside Changes totals by @shivamhwp in pingdotgg/t3code#30085 * fix(mobile): use H.264 for iOS previews and keep Close reachable by @shivamhwp in pingdotgg/t3code#28622 * fix(mobile): iOS image previews open without waiting for the gallery by @shivamhwp in pingdotgg/t3code#29044 * feat: optionally clone repos into ghq-style <host>/<owner>/<repo> folders by @shivamhwp in pingdotgg/t3code#24904 * fix(devices): explain Windows SSH host failures by @shivamhwp in pingdotgg/t3code#30941 * fix(web): make styled composer Markdown markers editable by @shivamhwp in pingdotgg/t3code#30421 * fix(mobile): configure another Claude account from Providers by @shivamhwp in pingdotgg/t3code#28928 * fix(web,mobile): save pull request description checkbox changes by @shivamhwp in pingdotgg/t3code#30704 * fix(client): a big server config on a slow link no longer drops the connection in a loop by @shivamhwp in pingdotgg/t3code#23758 * fix(server): restart T3 Connect's tunnel client when Cloudflare drops it by @shivamhwp in pingdotgg/t3code#24946 * fix(mobile): compact stale Claude threads before sending by @shivamhwp in pingdotgg/t3code#27935 * fix(web): show saved service access with Local environment off by @shivamhwp in pingdotgg/t3code#26464 * fix: keep older pending questions answerable by @shivamhwp in pingdotgg/t3code#26435 * fix(web): deleted forks no longer remain in Lineage by @shivamhwp in pingdotgg/t3code#29000 * fix(server): preserve sibling wakeups when interrupting a completion wake by @shivamhwp in pingdotgg/t3code#28204 * fix(server): attribute usage-limit auto-resume to T3 Code by @shivamhwp in pingdotgg/t3code#29838 * fix(acp): time out silent Antigravity prompts by @shivamhwp in pingdotgg/t3code#30377 * fix(codex): sharing usage limits offer the existing recovery options by @shivamhwp in pingdotgg/t3code#25341 ## New Contributors * @b2bvic made their first contribution in pingdotgg/t3code#30900 **Full Changelog**: pingdotgg/t3code@v0.1.8-nightly.20261104.4192...v0.1.8-nightly.20261105.4205 </details> Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.8-nightly.20261105.4205
…pingdotgg#26806) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit c1f91b5)


Unproven: the exact build/commit in the reporter's Surface Pro recording and independently repeated physical keyboard-detachment testing. Our packaged-app recordings use emulated pointer changes and touch input with synthetic conversation projections.
Closes #26190
What's fixed
At a wide conversation width, changing the primary pointer to coarse hid the minimap even though its persistent gutter remained available. The existing 48px gutter measurement now controls persistent visibility; narrow-gutter hover/focus behavior stays the same. This is submitted under CONTRIBUTING.md's focused obvious-bug exception because it restores existing navigation across a pointer change without adding a feature; no prior maintainer approval is claimed.
Evidence
Current head:
cd9d62fc52b3d135b4b2272519d6489232b15f06, rebased onto059804dfdaba54bd6f997355c30e102dae20d3b4. The two-line visibility patch is unchanged. Required checks pass or have accepted skips. A fresh independent Codex source review found no conflicts with upstream minimap highlights, wheel glide, gutter measurement or side-chat keyboard handling. Macroscope requests human review because the rail becomes visible automatically on wide touch screens.Ready-check base review: current main
8b44f42b14c8e273156474a924ccf29680dd7857merges cleanly with this head and retains exactly the same two-line minimap diff. A separate Codex review found no affected minimap behavior, gutter geometry, pointer gating, highlights, wheel handling, shared CSS, resize observation or dependency lockfile changes since the recorded build. Later main changes affect server recovery, diff metadata, footer alignment and native Android panes; release metadata changes 0.1.6 to 0.1.7 while Electron stays 44.10.1. Recordings remain evidence for this exact head and its 0.1.6 packages, not an executed merged-main build.New-head verification on corex:
vp run check:changed origin/mainpassed format, lint, both knip checks, the two affected typechecks and React compiler validation.vp test run apps/web/src/components/chat/timelineMinimapWheel.browser.test.tspassed all four existing cases, including wheel glide interrupted by navigation. Fixture rows decode against this head's contracts.The built-in Browser client at 1600x900 kept the persistent rail visible, navigated from scrollTop 6482 to 291 using its message button, and updated the new pseudo-element highlights to opacity 1 for visible messages. At 600x900, the nonpersistent rail faded to opacity 0 after focus left it. This pass used synthetic projection data and a fine pointer. Browser snapshot calls timed out, but the recording worked and its extracted frame was inspected. It does not establish pointer transitions or touch behavior.
browser-pass.mp4
Packaged Linux at current head
cd9d62fc52b3d135b4b2272519d6489232b15f06: physical corex, Ubuntu 26.04.1 x64, T3 0.1.6, Electron 44.10.1. The original package ran in a private Sway 1.11 native Wayland compositor at fixed 1600x900, with a wlr virtual pointer for fine capability. Actual Chromium touch emulation changed the primary pointer to coarse and back. All 935 samples kept the rail block/opacity 1/persistent true. Trusted touch navigated from scrollTop 6734 to 115; restored mouse navigation and changing scroll highlights worked. Trusted touch stopped an in-progress wheel glide at 982 before its 1700 target, and it stayed at 982 after 300ms.linux-native.mp4
Boat build
j_4th3b23zve5v34ndmyv5completed with exit 0. Archive SHA-256a9c3c39f5e1479986fa7fe672ccd4e7ea3656b67e76d53ab2297522c7e35f9ef; app.asar SHA-256f213d2b45b6bac711d08ba324b1ab8a9411a5654fdc24b5da2ae9f83d0b95c9c. Runtime reports app.isPackaged=true and package commit cd9d62f. Five served HTML/JS/CSS assets match the archive. Native MP4 is 19.23 seconds, 578 frames; full decoding passed and extracted frames were inspected. Isolation used a runtime os.homedir() filesystem shim and --password-store=basic. Package bytes stayed unchanged. Synthetic projections test visual navigation, not backend orchestration; user prompts group together in this fixture. This uses CPU rendering and emulated touch, not a physical touchscreen or keyboard detach. Narrow native states were not exercised because the 860px window minimum retained a 48px persistent gutter. App/compositor/pointer processes and host scratch state were removed.Packaged macOS at current head
cd9d62fc52b3d135b4b2272519d6489232b15f06: physical shiv, macOS 27.0.1 arm64, T3 0.1.6, Electron 44.10.1. At fixed native/CSS 1600x900, actual Chromium touch emulation changed the pointer from fine to coarse and back. All 601 samples kept the rail block/opacity 1/persistent true. Trusted touch navigated from scrollTop 6734 to 115; restored mouse navigation moved 87 to 495. Highlights followed the visible messages. A trusted pointerdown stopped a wheel glide at 993 before its 1495 target, held it there for 300ms, and release navigated to 36.macos-cd9d62f-pointer.mp4
Build, pointer sequence and full video decode exited 0. Native window recording is 32.72 seconds, 642 encoded frames; wrec reported six dropped capture frames. Extracted stage frames and the full contact sheet were inspected. Runtime reports app.isPackaged=true and package commit cd9d62f. All 278 served frontend resources match the original archive. App.asar SHA-256
28074f8edc6cabcb8f7af9c72fef547604c22727d273e98c9011211f1a38ea91; all 176 package entries stayed unchanged. Isolation used --use-mock-keychain, a runtime os.homedir() filesystem shim, and focus/showInactive shims to keep the test window in the background. These recordings do not establish normal Keychain startup, foreground activation or signed distribution. Synthetic projections test visual navigation, not backend orchestration. Native nonpersistent states were unreachable because the 840px window minimum retained a 48px gutter. Test app, backend, monitors, profiles, build and scratch state were cleaned up; shiv was never slept or locked.The packaged recordings below are historical evidence for
e124ec628aedf8d72c1fd8d08a007e5228ab8a53, not the rebased build.The reporter confirms that the PR works on their Surface Pro and supplied this 52-second recording. It shows the Windows app, including a section labeled 'pr' with the minimap visible. The recording does not identify an exact build or commit.
Recording.2026-11-01.180838.mp4
Packaged macOS, physical shiv, macOS 27.0.1 arm64, T3 0.1.5, Electron 44.10.0. At fixed 1600x900, the rail stays visible through fine, coarse and restored fine pointer states. Trusted touch navigation moves scrollTop from 6818 to 127. The native recording is 22.98 seconds. The original package and served frontend bytes match. Isolation used
--use-mock-keychainand a runtimeos.homedir()filesystem shim; archive and executable bytes were unchanged.packaged-macos-pointer.mp4
Packaged Linux, physical corex, Ubuntu 26.04.1 x64, T3 0.1.5, Electron 44.10.0. A private headless Sway 1.11 display records the fullscreen native Wayland app at fixed 1600x900. A standard Wayland virtual pointer supplies initial fine capability; Chromium touch emulation changes it to coarse and back. Trusted touch on the actual rail button moves scrollTop from 6818 to 127. The rail stays visible across all four stages and 202 samples. wf-recorder captured a 20.08-second native compositor video. The original package is unchanged, and served HTML, entry JavaScript and CSS match its app.asar bytes. No CSS, matchMedia or device-metrics overrides were used. This avoids the unavailable GNOME window-capture helper without capturing Shivam's desktop.
packaged-linux-e124ec6.mp4
Independent verification from Maria on this exact head reproduced the baseline failure and the fix in a real web development environment with completed Codex turns. Trusted touch and restored mouse navigation worked; narrow coarse-pointer gating and fine-pointer hover behavior remained correct. That pass explicitly excludes packaged Electron.
Earlier before/after macOS desktop captures, baseline
fe219c4de18f5ee37c28cbd3914a5569b1579156and pre-rebase head073c03f600b465c9aecd0ae7eb5eb3afaaa4aa7a. These demonstrate the same visibility-class patch before the rebase; they are not recordings of the current package.https://github.com/user-attachments/assets/437e78f8-65a1-46b8-8cac-2329b80d82e2
macOS desktop before: the minimap disappears when the pointer becomes coarse.
https://github.com/user-attachments/assets/d19cfde7-7d82-4a8a-b8aa-9aeb9469f3f8
macOS desktop after: the minimap stays visible and supports touch navigation.
Earlier physical POCO F4 Android Chrome touch navigation on
073c03f, before the rebase:touch-rail.mp4
Not independently tested by us: physical Surface keyboard detachment, Windows Electron, GNOME window recording, normal Keychain startup or signed distribution. All test apps, processes and isolated state were cleaned up.
Implemented with Claude Opus 5.5; investigated, tested and reviewed with gpt-6.1-sol through Codex.