Repository navigation
fix(web): cancelling update everything no longer flashes the update button's focus ring and tooltip - #25774
Conversation
…utton's focus ring and tooltip Co-Authored-By: Claude Opus 5.5 <[email protected]>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped focus-management fix: pointer cancellation no longer restores focus to the update button, while Escape still does. The added browser tests cover both dismissal paths, and no broader product behavior or defaults are changed. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Configure focus restoration apps/web/src/components/sidebar/UpdateEverythingDialog.tsx |
The popup restores final focus only when the dialog closes by keyboard. |
Test dismissal focus apps/web/src/components/sidebar/SidebarUpdatePill.browser.test.tsx |
The browser test setup supports configurable update state. New tests check focus after clicking Cancel and pressing Escape. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix
Suggested reviewers: maria-rcks, juliusmarminge
Merge Risk: 
Minimal · up to 5fc32
-
The dialog now preserves focus only for Escape dismissal, while pointer cancellation leaves focus unchanged.
Pre-merge checks: 
3 · 
1
-
Failed checks: 1 warning Passed checks: 3 passed-
Full details: Title check
-
Explanation
The title names the main change: cancelling the "Update everything" dialog no longer returns focus to the sidebar update button, which removes its focus ring and tooltip. It uses a conventional commit prefix and matches the changeset (UpdateEverythingDialog focus behavior plus browser tests).
-
Full details: Description check
-
Explanation
The description states the problem (mouse cancel refocuses the update button, showing a focus ring and tooltip) and the change (refocus only on keyboard close via Escape). It names the new browser tests and says the Cancel test fails on main and passes with the fix. It follows the template's intent, but the Problem and Change sections are not labeled with the template headings, and the Scope and approval section is missing. It has no link to a triaged issue or maintainer approval, and the Verification section gives no UI before/after screenshots, though the change is UI-facing. The reviewer also needs to know the review tool and model used, which the template asks for.
Resolution
Add the required template sections: 1) Problem with expected behavior and reproduction steps. 2) Change, a short explanation of why the fix is limited to the keyboard close path. 3) Scope and approval, with a link to the triaged issue or maintainer approval, or an explanation of why a prior issue is not needed for this small focused fix. 4) Verification, with the test commands run and results, and before/after screenshots or a short recording for the UI change, or a note on what could not be checked. Keep the model and harness note at the end, as the template requests.
-
Finishing Touches
-
📝 Generate docstrings
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- 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.
* feat(web): "failed to start" screen helps users recover and report the crash (pingdotgg#25345) Co-authored-by: Claude Opus 5.5 <[email protected]> * chore(task-cache): name native client downloads so agent-device can install them by URL agent-device install-from-source picks the archive type from the download's filename, and the cache URL has no extension. Device pool workers can now fetch the dev client straight from the cache instead of the caller uploading it through the gateway. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(web): keep large thread counts from shrinking labels (pingdotgg#25355) * fix(task-cache): avoid cross-request admission waiters (pingdotgg#25353) * fix(task-cache): name Android native client downloads .apk Android clients are cached as the bare APK, not a tarball. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(server): select the active iPhone Duo display for screenshots (pingdotgg#24912) Co-authored-by: PR Batch Tester <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: maria-rcks <[email protected]> * fix(server): remove one-child-per-model instruction (pingdotgg#25359) * fix(dev): skip auto-seeding large databases (pingdotgg#25365) * fix(server): preview snapshots preserve blurred backdrops (pingdotgg#24618) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): model picker no longer jumps when switching providers (pingdotgg#25358) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(mobile): run React hooks with the release compiler (pingdotgg#24274) * fix(mobile): pause videos outside visible thread and PR content (pingdotgg#24268) * fix(server): retry stalled MCP registration for resumed Claude turns (pingdotgg#25372) * fix(mobile): avoid crashes opening wrapped source links (pingdotgg#25156) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): disconnect and reconnect delays read a shared deadline instead of effect timers (pingdotgg#25363) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(mobile): run the chrome e2e across poses on the device pool `vp run mobile:e2e` now leases iOS and Android devices from the Simlock pool (SIMLOCK_AGENT_DEVICE_URL + AGENT_DEVICE_DAEMON_AUTH_TOKEN) instead of booting local simulators, and walks each of 12 poses (phone sizes, iPads, a fold, a tablet, dark mode, largest text) through the app: thread list, a thread, scrolling, typing, back, settings, then rotation or folding. Every screen gets generic layout checks that need no per-screen code: app in front, no error screen or launch dialog, no fixed control cut off by the screen edge, no sibling controls stacked, nothing under a system bar, no input under the keyboard. Transitions keep the video check for tabs lagging the screen, now measured against the recording's own first and last frames. Afterwards a headless Claude reviews each pose's screenshots for what the checks cannot see, and the findings land in the same report grid. `mobile:install --session` now has the session's host download the dev client from the shared cache with the read-only key, instead of uploading it through the gateway (13 s instead of 10+ minutes for an APK). Co-Authored-By: Claude Opus 5.5 <[email protected]> * chore(lint): enforce effectFnOpportunity (pingdotgg#25099) * fix(web): composer body ref stops re-attaching on every render (pingdotgg#25409) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): switching threads no longer delays the next thread's visit by up to 10s (pingdotgg#25368) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): mobile:install builds on a cache miss for pooled devices, iOS on EAS (pingdotgg#25390) Co-authored-by: Claude Opus 5.5 <[email protected]> * revert(web): composer body ref goes back to the pingdotgg#25079 ref callback (pingdotgg#25412) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(mobile): thread rows drop the branch and lead with the title (pingdotgg#25415) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): file breadcrumb menus refetch on a new workspace change, not on every open (pingdotgg#25377) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): citations to older responses load their history instead of failing (pingdotgg#25371) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(client): composers share one workspace snapshot refresh per provider and cwd (pingdotgg#25370) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): composer pastes and picks are cancelled by their draft, not by the composer (pingdotgg#25376) Co-authored-by: Claude Opus 5.5 <[email protected]> * chore(mobile): e2e poses for current devices, Duo and landscape fixes Poses now cover iPhone SE, iPhone 18 Pro, iPhone Duo folded and unfolded, iPad Pro 13" in both orientations, Pixel 10 Pro, Pixel 10 Pro Fold folded, unfolded and unfolded landscape, and Pixel Tablet in both orientations. Landscape poses rotate once the app is up (a rotation during launch is lost) and check that the screen really is wider than tall. Taps fall back to the element's centre when agent-device refuses a covered ref, and a gateway whose workers briefly reconnect is retried. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(mobile): select the correct draft after adding a project (pingdotgg#24269) * fix(mobile): mobile:install no longer requires --prepare The --prepare flag from pingdotgg#25390 had no default, so effect/cli made it required and every mobile:install failed with "Missing required flag". Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(mobile): e2e landscape poses rotate for real on tablets and folds agent-device names rotations relative to the device's natural orientation, which is landscape on the Pixel Tablet and an unfolded Fold, so "landscape-left" turned them portrait. The runner now asks for a shape and tries each rotation until the screen has it. It also prepares each platform's dev client before leasing, rides out longer worker drops, and skips the Duo poses by default until agent-device can fold Simlock's simulators. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(server): goals stop the running turn, clear while working, no echoes (pingdotgg#25426) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): pull request list remembers each answer for the next start (pingdotgg#25364) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): HTML previews handle frame messages in one listener (pingdotgg#25456) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): review guide runs are watched from their answers, not from mounted components (pingdotgg#25459) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): resize drags, panel shells and the browser host own their listeners (pingdotgg#25464) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): find shows its match after a thread switch, and the timeline hears scrolling through one viewport signal (pingdotgg#25463) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a new thread's first send no longer sticks on Starting (pingdotgg#25477) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(client): drafts for answered questions are cleared even when their thread is not open (pingdotgg#25457) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): terminal output no longer re-renders the drawer, theme search runs from handlers (pingdotgg#25458) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): stable callbacks refresh before layout effects read them (pingdotgg#25489) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): say why the useStableCallback test renders without a router (pingdotgg#25493) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): queued edits end when their run starts, wherever you are (pingdotgg#25468) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): editing a queued message while a question is open no longer throws (pingdotgg#25503) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): browser viewport resizes work without an open preview panel (pingdotgg#25462) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview omission tests no longer time out on CI (pingdotgg#25515) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): describe when composer view commands can reject (pingdotgg#25516) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): browser history and titles show up again (pingdotgg#25491) * fix(web): switching back to a thread no longer restores its tab's older title (pingdotgg#25521) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): pull request page reacts to turns and sweep Escape without effects (pingdotgg#25523) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): an armed pull request confirm no longer outlives its button (pingdotgg#25530) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep expanding composer text above its toolbar (pingdotgg#25396) * fix(server): release completed PR sync sweep data from the read cache (pingdotgg#25285) * fix(mobile): drop the unused useLayoutEffect import that fails lint on main (pingdotgg#25575) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): provider settings and Codex setup run as explicit flows (pingdotgg#25524) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview omission cases check the prepared document instead of rendering each one (pingdotgg#25562) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): pull request screens use a file-jump store and handler work (pingdotgg#25525) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): label the pull request toast action View (pingdotgg#25581) * refactor(mobile): media previews share file leases and close on blur in one place (pingdotgg#25527) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(shared): pin T3 Connect cloudflared to 2026.10.4, which drops the compromised eMudhra intermediates (pingdotgg#25572) Co-authored-by: Theo Browne <[email protected]> * fix(web): skill chips in chat open the same details popover as the composer (pingdotgg#25432) * refactor(web): chat route shortcuts register once instead of rebuilding on every store change (pingdotgg#25366) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(clients): queued messages can't be edited while a question is open (pingdotgg#25593) Co-authored-by: Claude Opus 5.5 <[email protected]> * docs: add an FAQ that answers what people ask every day (pingdotgg#25451) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): warn before adding a second Claude or Codex account (pingdotgg#25475) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): expire new-model badges after seven days (pingdotgg#25609) * refactor(web): running timers share one clock instead of an interval each (pingdotgg#25616) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): simplify the created pull request success row (pingdotgg#25613) * fix(web): thread jump hints wait for their delay on every hold (pingdotgg#25636) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): open threads from the local cache instead of "Thread unavailable" (pingdotgg#25627) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(infra): task-cache telemetry no longer strands an event queued during a flush (pingdotgg#25653) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): video previews attach listeners on their element and share one visibility observer (pingdotgg#25630) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): voice input session owns recording, metering and keep-awake (pingdotgg#25631) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): screen readers can wrap to the first and last message of a long thread (pingdotgg#23780) Co-authored-by: PR Batch Tester <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: nibarAhmed <[email protected]> Co-authored-by: maria-rcks <[email protected]> * fix(client-runtime): a slow host no longer shows settings as read-only (pingdotgg#25526) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Signed-off-by: Yordis Prieto <[email protected]> * refactor(mobile): thread rows share one clock and cache SVGs instead of per-row effects (pingdotgg#25612) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): a thread whose worktree was deleted recovers on the next message (pingdotgg#18359) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Signed-off-by: Yordis Prieto <[email protected]> * refactor(mobile): pull request list records answers where they land (pingdotgg#25373) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep floating status within the composer width (pingdotgg#25671) * refactor(web): settings group by concern, with General split into focused pages (pingdotgg#25651) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): telemetry keeps a failed batch for 30 minutes, not 1.5 (pingdotgg#25474) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a caret move in one composer no longer moves another draft's insert point (pingdotgg#25681) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview Word and large-text tests no longer flake on CI (pingdotgg#25664) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(evals): shared evals package and an eval for T3 tool-use mistakes (pingdotgg#24635) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): Cmd+O presses the Open in editor button instead of a per-picker listener (pingdotgg#25667) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): queued messages are delivered by an app service, not a render loop (pingdotgg#25678) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): PDF viewer behavior is covered by fast tests (pingdotgg#25699) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): drop the unreachable pending-task editor from new-task drafts (pingdotgg#25684) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): thread state lives at the end of the timeline, not stacked on the composer (pingdotgg#25401) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): drafts promote from the draft store, not from route effects (pingdotgg#25615) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): settings use web's pages and groups (pingdotgg#25686) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): thread inspector mode is derived, not synced (pingdotgg#25682) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): pull request list, filters and viewed files without synchronizing effects (pingdotgg#25614) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): PDF search finds phrases that wrap across lines (pingdotgg#25702) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(server): cut T3's MCP tool schemas by a third and merge 18 tools into action tools (pingdotgg#25423) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): pull request rows refresh their diff stats after a new push (pingdotgg#25713) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(workflows): keep completed workflows reachable (pingdotgg#24587) Co-authored-by: maria-rcks <[email protected]> * fix(web): devices agents open in background threads now show up (pingdotgg#25714) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): optimistic chat messages leave without a timer (pingdotgg#25710) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(acp): ACP session notices show as notices, not reply text (pingdotgg#25704) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): scale and align thread list icons (pingdotgg#25668) * refactor(mobile): new-task branch defaults are derived, not written after render (pingdotgg#25706) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(provider): add Vercel fx as a provider (pingdotgg#18277) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): usage chart bars round at the top instead of the bottom (pingdotgg#21383) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a draft route's branch checkout runs once, even across a reconnect (pingdotgg#25712) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): thread details popover closes when the card moves inline (pingdotgg#25731) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): diff and file reveals are requests, and workspace edits refetch by construction (pingdotgg#25732) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): Add provider leads with first-class providers (pingdotgg#25753) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): app-lifetime services install once, and the usage widget stops re-rendering on every presentation change (pingdotgg#25740) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(client-runtime): searches and refreshes no longer wait on an unreachable environment (pingdotgg#25703) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): command palette state lives in a store, git and branch pickers drop timer and sync effects (pingdotgg#25733) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): restore Android chat content corners (pingdotgg#23989) Co-authored-by: maria-rcks <[email protected]> * fix(server): agents show trends and comparisons as inline charts again (pingdotgg#25766) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): isolate file tree state by workspace (pingdotgg#24270) * fix(mobile): finished subagents stay reachable from the Agents pill (pingdotgg#25759) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep segmented controls readable on cards and screens (pingdotgg#25729) * fix(web): cancelling update everything no longer flashes the update button's focus ring and tooltip (pingdotgg#25774) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): lists end at the search field, and HTML previews start below the header (pingdotgg#25765) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(provider-cursor): bump @cursor/sdk to 1.0.38 so long-context tiers send Max Mode (pingdotgg#21074) Co-authored-by: Julius Marminge <[email protected]> * fix(server): Sonnet also answers trend and comparison data with inline charts (pingdotgg#25776) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): Claude MCP timeouts preserve the native session (pingdotgg#25660) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): preserve settled runs during delegated acknowledgements (pingdotgg#25672) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): align the iPad composer with workspace navigation (pingdotgg#24942) Co-authored-by: maria-rcks <[email protected]> * chore(evals): store eval cases as .ndjson so review tools skip them (pingdotgg#25782) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(server): CI fails when agent context grows past main (pingdotgg#25785) Co-authored-by: Claude Opus 5.5 <[email protected]> --------- Signed-off-by: Yordis Prieto <[email protected]> Co-authored-by: Theo Browne <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Yash Singh <[email protected]> Co-authored-by: shivam <[email protected]> Co-authored-by: PR Batch Tester <[email protected]> Co-authored-by: maria-rcks <[email protected]> Co-authored-by: Alex Southwell <[email protected]> Co-authored-by: Alex <[email protected]> Co-authored-by: project516 <[email protected]> Co-authored-by: oliver <[email protected]> Co-authored-by: nibarAhmed <[email protected]> Co-authored-by: Yordis Prieto <[email protected]> Co-authored-by: Bilal Bakr <[email protected]> Co-authored-by: Andrew Gadzik <[email protected]> Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Aditya Vardhan Sharma <[email protected]> Co-authored-by: gcrft123 <[email protected]>
* refactor(client): composers share one workspace snapshot refresh per provider and cwd (pingdotgg#25370) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): composer pastes and picks are cancelled by their draft, not by the composer (pingdotgg#25376) Co-authored-by: Claude Opus 5.5 <[email protected]> * chore(mobile): e2e poses for current devices, Duo and landscape fixes Poses now cover iPhone SE, iPhone 18 Pro, iPhone Duo folded and unfolded, iPad Pro 13" in both orientations, Pixel 10 Pro, Pixel 10 Pro Fold folded, unfolded and unfolded landscape, and Pixel Tablet in both orientations. Landscape poses rotate once the app is up (a rotation during launch is lost) and check that the screen really is wider than tall. Taps fall back to the element's centre when agent-device refuses a covered ref, and a gateway whose workers briefly reconnect is retried. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(mobile): select the correct draft after adding a project (pingdotgg#24269) * fix(mobile): mobile:install no longer requires --prepare The --prepare flag from pingdotgg#25390 had no default, so effect/cli made it required and every mobile:install failed with "Missing required flag". Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(mobile): e2e landscape poses rotate for real on tablets and folds agent-device names rotations relative to the device's natural orientation, which is landscape on the Pixel Tablet and an unfolded Fold, so "landscape-left" turned them portrait. The runner now asks for a shape and tries each rotation until the screen has it. It also prepares each platform's dev client before leasing, rides out longer worker drops, and skips the Duo poses by default until agent-device can fold Simlock's simulators. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(server): goals stop the running turn, clear while working, no echoes (pingdotgg#25426) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): pull request list remembers each answer for the next start (pingdotgg#25364) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): HTML previews handle frame messages in one listener (pingdotgg#25456) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): review guide runs are watched from their answers, not from mounted components (pingdotgg#25459) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): resize drags, panel shells and the browser host own their listeners (pingdotgg#25464) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): find shows its match after a thread switch, and the timeline hears scrolling through one viewport signal (pingdotgg#25463) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a new thread's first send no longer sticks on Starting (pingdotgg#25477) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(client): drafts for answered questions are cleared even when their thread is not open (pingdotgg#25457) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): terminal output no longer re-renders the drawer, theme search runs from handlers (pingdotgg#25458) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): stable callbacks refresh before layout effects read them (pingdotgg#25489) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): say why the useStableCallback test renders without a router (pingdotgg#25493) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): queued edits end when their run starts, wherever you are (pingdotgg#25468) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): editing a queued message while a question is open no longer throws (pingdotgg#25503) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): browser viewport resizes work without an open preview panel (pingdotgg#25462) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview omission tests no longer time out on CI (pingdotgg#25515) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): describe when composer view commands can reject (pingdotgg#25516) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): browser history and titles show up again (pingdotgg#25491) * fix(web): switching back to a thread no longer restores its tab's older title (pingdotgg#25521) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): pull request page reacts to turns and sweep Escape without effects (pingdotgg#25523) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): an armed pull request confirm no longer outlives its button (pingdotgg#25530) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep expanding composer text above its toolbar (pingdotgg#25396) * fix(server): release completed PR sync sweep data from the read cache (pingdotgg#25285) * fix(mobile): drop the unused useLayoutEffect import that fails lint on main (pingdotgg#25575) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): provider settings and Codex setup run as explicit flows (pingdotgg#25524) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview omission cases check the prepared document instead of rendering each one (pingdotgg#25562) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): pull request screens use a file-jump store and handler work (pingdotgg#25525) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): label the pull request toast action View (pingdotgg#25581) * refactor(mobile): media previews share file leases and close on blur in one place (pingdotgg#25527) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(shared): pin T3 Connect cloudflared to 2026.10.4, which drops the compromised eMudhra intermediates (pingdotgg#25572) Co-authored-by: Theo Browne <[email protected]> * fix(web): skill chips in chat open the same details popover as the composer (pingdotgg#25432) * refactor(web): chat route shortcuts register once instead of rebuilding on every store change (pingdotgg#25366) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(clients): queued messages can't be edited while a question is open (pingdotgg#25593) Co-authored-by: Claude Opus 5.5 <[email protected]> * docs: add an FAQ that answers what people ask every day (pingdotgg#25451) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): warn before adding a second Claude or Codex account (pingdotgg#25475) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): expire new-model badges after seven days (pingdotgg#25609) * refactor(web): running timers share one clock instead of an interval each (pingdotgg#25616) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): simplify the created pull request success row (pingdotgg#25613) * fix(web): thread jump hints wait for their delay on every hold (pingdotgg#25636) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): open threads from the local cache instead of "Thread unavailable" (pingdotgg#25627) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(infra): task-cache telemetry no longer strands an event queued during a flush (pingdotgg#25653) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): video previews attach listeners on their element and share one visibility observer (pingdotgg#25630) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): voice input session owns recording, metering and keep-awake (pingdotgg#25631) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): screen readers can wrap to the first and last message of a long thread (pingdotgg#23780) Co-authored-by: PR Batch Tester <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: nibarAhmed <[email protected]> Co-authored-by: maria-rcks <[email protected]> * fix(client-runtime): a slow host no longer shows settings as read-only (pingdotgg#25526) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Signed-off-by: Yordis Prieto <[email protected]> * refactor(mobile): thread rows share one clock and cache SVGs instead of per-row effects (pingdotgg#25612) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): a thread whose worktree was deleted recovers on the next message (pingdotgg#18359) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Signed-off-by: Yordis Prieto <[email protected]> * refactor(mobile): pull request list records answers where they land (pingdotgg#25373) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep floating status within the composer width (pingdotgg#25671) * refactor(web): settings group by concern, with General split into focused pages (pingdotgg#25651) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): telemetry keeps a failed batch for 30 minutes, not 1.5 (pingdotgg#25474) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a caret move in one composer no longer moves another draft's insert point (pingdotgg#25681) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): attachment preview Word and large-text tests no longer flake on CI (pingdotgg#25664) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(evals): shared evals package and an eval for T3 tool-use mistakes (pingdotgg#24635) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): Cmd+O presses the Open in editor button instead of a per-picker listener (pingdotgg#25667) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): queued messages are delivered by an app service, not a render loop (pingdotgg#25678) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(web): PDF viewer behavior is covered by fast tests (pingdotgg#25699) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): drop the unreachable pending-task editor from new-task drafts (pingdotgg#25684) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): thread state lives at the end of the timeline, not stacked on the composer (pingdotgg#25401) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): drafts promote from the draft store, not from route effects (pingdotgg#25615) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): settings use web's pages and groups (pingdotgg#25686) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): thread inspector mode is derived, not synced (pingdotgg#25682) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): pull request list, filters and viewed files without synchronizing effects (pingdotgg#25614) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): PDF search finds phrases that wrap across lines (pingdotgg#25702) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(server): cut T3's MCP tool schemas by a third and merge 18 tools into action tools (pingdotgg#25423) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): pull request rows refresh their diff stats after a new push (pingdotgg#25713) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(workflows): keep completed workflows reachable (pingdotgg#24587) Co-authored-by: maria-rcks <[email protected]> * fix(web): devices agents open in background threads now show up (pingdotgg#25714) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): optimistic chat messages leave without a timer (pingdotgg#25710) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(acp): ACP session notices show as notices, not reply text (pingdotgg#25704) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): scale and align thread list icons (pingdotgg#25668) * refactor(mobile): new-task branch defaults are derived, not written after render (pingdotgg#25706) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(provider): add Vercel fx as a provider (pingdotgg#18277) Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): usage chart bars round at the top instead of the bottom (pingdotgg#21383) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a draft route's branch checkout runs once, even across a reconnect (pingdotgg#25712) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): thread details popover closes when the card moves inline (pingdotgg#25731) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): diff and file reveals are requests, and workspace edits refetch by construction (pingdotgg#25732) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(web): Add provider leads with first-class providers (pingdotgg#25753) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): app-lifetime services install once, and the usage widget stops re-rendering on every presentation change (pingdotgg#25740) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(client-runtime): searches and refreshes no longer wait on an unreachable environment (pingdotgg#25703) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): command palette state lives in a store, git and branch pickers drop timer and sync effects (pingdotgg#25733) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): restore Android chat content corners (pingdotgg#23989) Co-authored-by: maria-rcks <[email protected]> * fix(server): agents show trends and comparisons as inline charts again (pingdotgg#25766) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): isolate file tree state by workspace (pingdotgg#24270) * fix(mobile): finished subagents stay reachable from the Agents pill (pingdotgg#25759) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): keep segmented controls readable on cards and screens (pingdotgg#25729) * fix(web): cancelling update everything no longer flashes the update button's focus ring and tooltip (pingdotgg#25774) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): lists end at the search field, and HTML previews start below the header (pingdotgg#25765) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(provider-cursor): bump @cursor/sdk to 1.0.38 so long-context tiers send Max Mode (pingdotgg#21074) Co-authored-by: Julius Marminge <[email protected]> * fix(server): Sonnet also answers trend and comparison data with inline charts (pingdotgg#25776) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): Claude MCP timeouts preserve the native session (pingdotgg#25660) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): preserve settled runs during delegated acknowledgements (pingdotgg#25672) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): align the iPad composer with workspace navigation (pingdotgg#24942) Co-authored-by: maria-rcks <[email protected]> * chore(evals): store eval cases as .ndjson so review tools skip them (pingdotgg#25782) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(server): CI fails when agent context grows past main (pingdotgg#25785) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): theme preferences reach the native runtime without a layout effect (pingdotgg#25767) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): the share inbox is a module store, presented from navigation state (pingdotgg#25744) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): drop the unreachable paint-only thread timeline path (pingdotgg#25787) Co-authored-by: Claude Opus 5.5 <[email protected]> * chore(release): prepare v0.1.3 * refactor(mobile): notifications, quick actions and Connect onboarding navigate through the root ref (pingdotgg#25769) Co-authored-by: Claude Opus 5.5 <[email protected]> * test(server): data regression test now fails when recent fetch savings regress (pingdotgg#25795) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): all MCP tools now send compact schemas, cutting tool context by 23% (pingdotgg#25790) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(web): the new design is the only design, with no toggle (pingdotgg#25778) Co-authored-by: Claude Opus 5.5 <[email protected]> * feat(mobile): add a "Use last project" preference for new threads (pingdotgg#24741) Co-authored-by: none23 <[email protected]> Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): round shared Android sheets and Chat settings (pingdotgg#18547) * feat(mobile): split wide Android Settings into two panes (pingdotgg#24298) * fix(web): keep right panel maximize available in narrow windows (pingdotgg#25389) * fix(server): Macs without Android no longer show avdmanager discovery warnings (pingdotgg#25815) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): onboarding import no longer hangs when the project never arrives (pingdotgg#25805) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): Windows image paths and non-ASCII file links open like desktop (pingdotgg#25802) Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: amv146 <[email protected]> * fix(web,mobile): markdown previews no longer show YAML frontmatter as a giant heading (pingdotgg#25804) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): compact toggle shows the token count again (pingdotgg#25818) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(server): preserve interrupted Claude context after revert (pingdotgg#25695) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web,mobile): bot approvals are visible on the PR summary (pingdotgg#25829) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web,mobile): stopped runs no longer look like errors (pingdotgg#25830) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): share imports run outside the new-task screen (pingdotgg#25793) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(build): TEMPORARY workaround so linux-arm64 builds run on 16/64 KiB page kernels (pingdotgg#25825) TEMPORARY workaround for an upstream Node bug: nodejs/node#67048 Node 26.9+ --build-sea writes linux-arm64 executables that 16/64 KiB page kernels cannot load. linux-arm64 now injects with postject, and the archive build rejects incompatible ELF layouts. One-time exception. Revert once Node ships a fix: grep for the Node issue URL and drop postject from scripts/package.json. Fixes pingdotgg#23433. Replaces pingdotgg#23443. Co-authored-by: Lakshmi Tanmay <[email protected]> Co-authored-by: maria-rcks <[email protected]> Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(server): preserve completed runs when accepting child deliveries (pingdotgg#25666) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(client-runtime): iOS resume keeps live sockets and drops dead ones 4x faster (pingdotgg#25824) Co-authored-by: Omar <[email protected]> Co-authored-by: Carlos D. Escobar-Valbuena <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> * feat: model labels show the name you'd say out loud (pingdotgg#24205) Co-authored-by: Claude Opus 5.5 (Claude Code) <[email protected]> Co-authored-by: maria-rcks <[email protected]> Co-authored-by: Julius Marminge <[email protected]> * chore(review): CodeRabbit reviews tests against docs/internals/testing.md (pingdotgg#24204) * refactor(mobile): showcase capture readiness is a tested pure model (pingdotgg#25816) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): a held thread move retires when a snooze wakes, even with no list open (pingdotgg#25809) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): switching a file between markdown and the editor no longer saves a draft twice (pingdotgg#25768) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web,mobile): queued messages get a simpler Send now row, no reordering (pingdotgg#25846) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(mobile): Add project path survives its host dropping out and returning (pingdotgg#25819) Co-authored-by: Claude Opus 5.5 <[email protected]> * refactor(mobile): opening Review or Files shows the inspector in the first commit (pingdotgg#25817) Co-authored-by: Claude Opus 5.5 <[email protected]> * fix(web): Diagnostics keeps its own settings sidebar entry Upstream's settings regrouping made Diagnostics a detail page under Maintenance, dropping the fork's sidebar entry. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Signed-off-by: Yordis Prieto <[email protected]> Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Theo Browne <[email protected]> Co-authored-by: Alex Southwell <[email protected]> Co-authored-by: Alex <[email protected]> Co-authored-by: project516 <[email protected]> Co-authored-by: oliver <[email protected]> Co-authored-by: Yash Singh <[email protected]> Co-authored-by: shivam <[email protected]> Co-authored-by: PR Batch Tester <[email protected]> Co-authored-by: nibarAhmed <[email protected]> Co-authored-by: maria-rcks <[email protected]> Co-authored-by: Yordis Prieto <[email protected]> Co-authored-by: Bilal Bakr <[email protected]> Co-authored-by: Andrew Gadzik <[email protected]> Co-authored-by: Julius Marminge <[email protected]> Co-authored-by: Aditya Vardhan Sharma <[email protected]> Co-authored-by: gcrft123 <[email protected]> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: none23 <[email protected]> Co-authored-by: amv146 <[email protected]> Co-authored-by: Lakshmi Tanmay <[email protected]> Co-authored-by: Omar <[email protected]> Co-authored-by: Carlos D. Escobar-Valbuena <[email protected]>
…utton's focus ring and tooltip (pingdotgg#25774) Co-authored-by: Claude Opus 5.5 <[email protected]> (cherry picked from commit b1619f3)
…utton's focus ring and tooltip (pingdotgg#25774) Co-authored-by: Claude Opus 5.5 <[email protected]> Fork adaptation: The fork's update dialog renders its own activity, skipped-machine and decision-reporting content inline, so the keyboard-only final focus goes on that popup. The fork's pill tests drive the real update hooks instead of mocking them, so the two focus tests use the fork's setup and render helpers and open the dialog from the pill's button. (cherry picked from commit b1619f3) Upstream-PR: 25774 Fork-Feature: desktop-background-updates
Cancelling the "Update everything" dialog with the mouse put focus back on the sidebar update button. That showed a big focus ring and opened the button's hover tooltip. Super jarring.
The button opens the dialog by hand, so Base UI refocused it on every close. Now the dialog refocuses the button only when it closes from the keyboard (Escape), where keyboard users need focus to come back. A mouse cancel leaves focus alone.
Proof: a new browser test clicks Cancel and checks that the button does not get focus. It fails on
mainand passes with the fix. A second test checks that Escape still returns focus.Reviewed with sol-loop: 1 round with GPT-6.1 Sol. Sol verdict: approved
Created with Claude Opus 5.5 in Claude Code (T3 Code).
🤖 Generated with Claude Code