fix(server): refresh file search outside checkpoint processing - #12308
juliusmarminge merged 2 commits into
Conversation
5c8b788 to
2591351
Compare
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: 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. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This focused server bug fix asynchronously refreshes the existing file-search index so checkpoint processing is not blocked, while coalescing duplicate workspace scans and draining pending work during shutdown. A regression test covers blocked refreshes, multiple workspaces, checkpoint completion, and coalescing. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 10 included reviews per hour; 2 remain after this review. 📝 WalkthroughWalkthroughCheckpoint capture and revert now queue coalesced workspace-entry refreshes. Reactor draining waits for queued refreshes. Tests cover blocked refreshes across two workspaces. ChangesWorkspace refresh coordination
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix Sequence Diagram(s)sequenceDiagram
participant CheckpointReactor
participant WorkspaceRefreshWorker
participant WorkspaceEntries
CheckpointReactor->>WorkspaceRefreshWorker: Queue workspace refresh
CheckpointReactor->>WorkspaceRefreshWorker: Drain queued refreshes
WorkspaceRefreshWorker->>WorkspaceEntries: Execute coalesced refresh
WorkspaceEntries-->>WorkspaceRefreshWorker: Complete or interrupt
WorkspaceRefreshWorker-->>CheckpointReactor: Report drain completion
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The asynchronous refresh path preserves checkpoint completion and coalesces later workspace updates without a concrete unresolved merge risk. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
2591351 to
9f6df7a
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Dismissing prior approval to re-evaluate 7a863a3
ba04a6b to
73f8a1f
Compare
73f8a1f to
38dc191
Compare
## What's Changed * fix(web): keep PR panel actions in the current thread by @Bil0000 in pingdotgg/t3code#12320 * fix(web): keep browser pages aligned during panel animations by @juliusmarminge in pingdotgg/t3code#12329 * fix(server): bound provider event log records before serialization by @juliusmarminge in pingdotgg/t3code#12305 * fix(server): reject file rewind in shared workspaces by @juliusmarminge in pingdotgg/t3code#12306 * fix(server): capture checkpoints when baseline lookup fails by @juliusmarminge in pingdotgg/t3code#12307 * fix(server): refresh file search outside checkpoint processing by @juliusmarminge in pingdotgg/t3code#12308 * fix(web): keep chat from jumping when the scroll-to-end pill mounts by @Yash-Singh1 in pingdotgg/t3code#12317 * fix(server): checkpoint workspaces with empty nested repositories by @saphid in pingdotgg/t3code#12181 * chore(review): keep review bots out of the vendored .repos references by @juliusmarminge in pingdotgg/t3code#12333 * fix(server): pass Codex image attachments by path to avoid oversized requests by @saphid in pingdotgg/t3code#11050 * feat(web): filter sidebar from thread menu by @saphid in pingdotgg/t3code#8719 * feat(web): open diff files from a right-click context menu by @saphid in pingdotgg/t3code#11842 * fix(web): keep numbered jumps from stealing browser tabs by @Yash-Singh1 in pingdotgg/t3code#12315 * fix(mobile): define Clerk colors in every Uniwind theme by @juliusmarminge in pingdotgg/t3code#12344 * refactor(web): reuse searchable picker inputs by @juliusmarminge in pingdotgg/t3code#12353 * fix(web): share touch-visible pull request edit actions by @juliusmarminge in pingdotgg/t3code#12370 * fix(mobile): share accessible connection trace controls by @juliusmarminge in pingdotgg/t3code#12371 * fix(mobile): share settings control row layout by @juliusmarminge in pingdotgg/t3code#12356 * refactor(web): share diagnostic process actions by @juliusmarminge in pingdotgg/t3code#12358 * refactor(mobile): share Android toolbar search fields by @juliusmarminge in pingdotgg/t3code#12359 * refactor(web): share settings group surfaces by @juliusmarminge in pingdotgg/t3code#12360 * refactor(web): reuse inline settings actions by @juliusmarminge in pingdotgg/t3code#12362 * refactor(mobile): share thread list section controls by @juliusmarminge in pingdotgg/t3code#12363 * refactor(mobile): share connection form fields by @juliusmarminge in pingdotgg/t3code#12364 * refactor(mobile): share local environment lists by @juliusmarminge in pingdotgg/t3code#12365 * refactor(mobile): share file preview feedback by @juliusmarminge in pingdotgg/t3code#12368 * refactor(web): share standalone page layout by @juliusmarminge in pingdotgg/t3code#12354 * fix(mobile): share settings action row defaults by @juliusmarminge in pingdotgg/t3code#12369 * fix(mobile): share request action button defaults by @juliusmarminge in pingdotgg/t3code#12366 * fix(web): share accessible color picker controls by @juliusmarminge in pingdotgg/t3code#12355 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260917.1880...v0.0.43-nightly.20260918.1895 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260918.1895
Merges `pingdotgg/t3code` `6d1d549441..9946541` (50 commits) into the fork. Landed 304 files against 303 in the upstream range — the extra one is `docs/fork/inventory.json`. Fork delta is 777 files, unchanged from the last merge. Everything upstream changed landed. Six conflicts, each resolved with the verdict `preflight.mjs` printed; five were a single hunk. Details and reasoning are in [the merge tracker](docs/fork/upstream-merge-log.md). The two worth reading here: - **`ChatView.tsx`** — pingdotgg#12306 added `activeWorktreePath !== null` to the "Revert files too" button, on the line the fork gates with `FEATURES.checkpointFileRestore`. Kept both as a conjunction: upstream's condition is about a shared workspace, the fork's is about what Moatless serves, and they answer different questions. - **`FilePreviewPanel.tsx`** (the one `decide`) — pingdotgg#10909 restructured the file read so a folder is knowable as a folder, adding `isDirectory` / `previewPath`. Took that whole and re-stated the fork's `onRetargetFile` effect on top. `apps/web/src/routeTree.gen.ts` was regenerated rather than hand-resolved. One judgement call: pingdotgg#11598's new `/settings/storage` page is deliberately **not** given a `FEATURES` gate. It self-gates on two new capability booleans Moatless does not report and renders an explanatory notice, so a fork flag would duplicate a decision the wire already makes — and would have to be deleted again the day the capability is reported. ## Usable as-is - Diff files open from a right-click context menu (pingdotgg#11842). - Sidebar filtering from the thread menu (pingdotgg#8719). - Command palette matches thread IDs (pingdotgg#11185). - Mobile settings are easier to navigate and scope (pingdotgg#12272); favorites in the mobile model picker (pingdotgg#12231). - Thoughts collapse within tool groups (pingdotgg#12302); thoughts and failed tool calls stay in one activity row (pingdotgg#12270). - Folder links from chat open the file tree instead of a broken preview (pingdotgg#10909). - Chat no longer jumps when the scroll-to-end pill mounts (pingdotgg#12317); numbered jumps no longer steal browser tabs (pingdotgg#12315); composer banners stay compact (pingdotgg#12166). - A large batch of shared-component refactors across web and mobile (pingdotgg#12353–pingdotgg#12371). ## Unsupported in Moatless / needs implementation - **Pull request files marked as viewed** (pingdotgg#7721) — adds `pullRequests.filesViewed` and `pullRequests.setFilesViewed`, which record which files a reviewer has checked off, persisted server-side. Both declare `PullRequestRpcError` and so arrived already refusing; `unsupported-methods.mjs` reported ADD 0 / DROP 0 as a result. Closes with the rest of the `pullRequests.*` group, not separately. - **Multi-model threads in separate worktrees** (pingdotgg#12179) — one prompt starts a thread per selected model, each in its own worktree. The model picker is the same `worktree` send-mode control `FEATURES.worktreeSelection` already gates, so the fan-out is simply not offered. The same commit adds a `requiredWorktreeBootstrap` capability the backend does not report. - **Automatic storage cleanup settings** (pingdotgg#11598) — the `/settings/storage` page, gated by the backend's absent `storageCleanup` and `projectWorktreeCleanup` capabilities. Needs the sweeper below before the page means anything. - **Command palette entries for the pull requests and usage pages** (pingdotgg#12211) — the PR half is covered by `FEATURES.pullRequestSurface`. ## Backend behavior to consider reproducing in Moatless Eight items, recorded in full in [the gaps register](docs/fork/gaps.md) under _Runtime fixes upstream made to its own server_. Five are on the checkpoint and usage paths the previous merge already opened: - **Reject a file rewind on a shared or nested-owner cwd** (pingdotgg#12306, `CheckpointReactor.ts`) — a checkpoint holds the whole checkout, so restoring one erases a sibling's uncommitted work. Moatless isolates by sandbox, but a workspace with nested repositories has the same overlap inside one task. - **Capture a checkpoint when the baseline lookup fails** (pingdotgg#12307) — the case that silently leaves a turn with no restore point. - **Move the file-search refresh off the checkpoint path** (pingdotgg#12308) — it extended every capture by an index walk. - **Survive an empty nested repository, and clear a stale index lock** (pingdotgg#12181, `GitVcsDriver.ts`) — git cannot stage an embedded repository until it has a commit. The lock half matters most here: forced termination is the normal end of a sandboxed task. - **Bound the provider event log before serialization** (pingdotgg#12305, `EventNdjsonLogger.ts`) — otherwise it grows proportionally to tokens streamed. - **Keep usage totals across transcript cleanup** (pingdotgg#12304, `UsageService.ts`) and **resolve a contested fingerprint to the newest scan** (pingdotgg#10315, `usageMerge.ts`). Moatless serves `server.getUsageSummary` itself. - **Pass provider image attachments by path** (pingdotgg#11050, `CodexAdapter.ts`) — the turn/start request stops scaling with attachment size. A sandbox adds a hop, so an oversized request costs more there. - **Sweep stale worktrees and transcripts against retention rules** (pingdotgg#11598, `storageCleanup.ts`, with a workspace lease so two servers cannot sweep the same directory). A sandbox per task bounds the worktree half; transcripts outlive the sandbox. ## Verification `verify.mjs` — all 9 checks green on the first full pass, tests included (333 test files, 5071 tests). No flaky retries and no caveats. Contract drift: ADD 0 / DROP 0, so `packages/contracts/src/rpc.ts` needed no change. The `orchestration-decode-boilerplate` duplicate-add exception went stale — the colliding line is gone — and was deleted from `inventory.json` in this merge. Owned-concern sweep: the three new `apps/mobile/src/features/connection/` files are false positives, all upstream extracting shared mobile components out of files it already owned, with no fork delta in any of them. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Moatless task: https://moatless.soaplabstest.com/tasks/c83db5aa-7c47-47c6-93f4-fe2f6f9f548e
* fix(web): show tooltips for composer environment and workspace controls (pingdotgg#11787) * fix(chat): group thoughts into the changing tool activity line (pingdotgg#12147) * fix(web): keep tool timestamps before disclosure chevrons (pingdotgg#12152) * fix(web): default diff panel to working tree (pingdotgg#12139) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * design(mobile): unify Android Material layouts and native controls (pingdotgg#11841) Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(web): choose themes from chat with color previews (pingdotgg#12143) * fix(web): align follow-up and license settings controls (pingdotgg#12167) * fix(web): align composer task rows (pingdotgg#12165) * fix(mobile): prevent Android compose FAB animation jitter (pingdotgg#12169) * fix(server): keep large sparse checkouts on the fast checkpoint path (pingdotgg#12154) * feat(web): make pull request comments easier to scan (pingdotgg#12150) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(server): propagate linked pr changes and settle threads immediately (pingdotgg#12161) * fix(web): reuse cached GitHub PR details across entry points (pingdotgg#12168) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * Remove `new` badge from Fable 5.1 (pingdotgg#12173) * fix(web): show author avatars in pull request previews (pingdotgg#12125) * fix(server): settle cancelled worktree setup before rollback (pingdotgg#12176) * feat(mobile): port worktree setup progress and agent handoff (pingdotgg#12177) * fix(server): flush checkpoint objects and refs before publishing them (pingdotgg#10944) * chore(mobile): bump app version to 1.2.1 Co-authored-by: codex <codex@users.noreply.github.com> * fix(server): keep ready checkpoints when a later placeholder arrives (pingdotgg#8432) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(server): keep VCS waits from blocking turn completion (pingdotgg#11970) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(web): keep header spacing stable when sidebar drawer opens (pingdotgg#12162) * fix(web): fall back when pull request avatars fail (pingdotgg#11728) * feat(web): enable rich text composer by default (pingdotgg#12160) Co-authored-by: maria-rcks <maria@kuuro.net> * feat(web): make keybindings searchable from settings search (pingdotgg#12175) * fix(web): preserve thread reading positions (pingdotgg#12144) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(diff): collapse files by default (pingdotgg#12190) * fix(web): folder links from chat open the file tree instead of a broken preview (pingdotgg#10909) Co-authored-by: exe.dev user <exedev@ropeway-swimming.exe.xyz> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> * feat(web): command palette search matches thread IDs (pingdotgg#11185) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(web): align notification icons with titles (pingdotgg#12202) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(skills): support unicode currency symbols as skill aliases (pingdotgg#12098) Co-authored-by: maria-rcks <maria@kuuro.net> * feat(settings): add automatic storage cleanup per machine and project (pingdotgg#11598) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * feat(web): command palette finds the pull requests and usage pages (pingdotgg#12211) * feat(web): start new threads with multiple models in separate worktrees (pingdotgg#12179) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(mobile): keep screen awake during dictation (pingdotgg#12227) * feat(mobile): add favorites to model picker (pingdotgg#12231) * fix(desktop): keep preview picking active across subframe navigation (pingdotgg#9741) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(shared): keep the newest shared usage scan (pingdotgg#10315) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): keep thoughts and failed tool calls in one activity row (pingdotgg#12270) * fix(web): avoid reopening settled threads when adding projects (pingdotgg#11804) * feat(mobile): make Settings easier to navigate and scope (pingdotgg#12272) * fix(mobile): prevent overlapping text and UI on Android chat messages (pingdotgg#11611) Co-authored-by: Julius Marminge <julius0216@outlook.com> * feat(web): pull request files can be marked as viewed (pingdotgg#7721) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: maria <maria@kuuro.net> * fix(web): keep composer banners compact and readable (pingdotgg#12166) * fix(web): collapse thoughts within tool groups (pingdotgg#12302) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(usage): preserve saved totals after transcript cleanup (pingdotgg#12304) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> * fix(mobile): show Agent behavior icon on Android (pingdotgg#12316) * fix(web): keep PR panel actions in the current thread (pingdotgg#12320) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep browser pages aligned during panel animations (pingdotgg#12329) * fix(server): bound provider event log records before serialization (pingdotgg#12305) * fix(server): reject file rewind in shared workspaces (pingdotgg#12306) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): capture checkpoints when baseline lookup fails (pingdotgg#12307) * fix(server): refresh file search outside checkpoint processing (pingdotgg#12308) * fix(web): keep chat from jumping when the scroll-to-end pill mounts (pingdotgg#12317) * fix(server): checkpoint workspaces with empty nested repositories (pingdotgg#12181) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * chore(review): keep review bots out of the vendored .repos references (pingdotgg#12333) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): pass Codex image attachments by path to avoid oversized requests (pingdotgg#11050) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * feat(web): filter sidebar from thread menu (pingdotgg#8719) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> * feat(web): open diff files from a right-click context menu (pingdotgg#11842) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(web): keep numbered jumps from stealing browser tabs (pingdotgg#12315) Co-authored-by: Cursor <cursoragent@cursor.com> * fix(mobile): define Clerk colors in every Uniwind theme (pingdotgg#12344) * refactor(web): reuse searchable picker inputs (pingdotgg#12353) * fix(web): share touch-visible pull request edit actions (pingdotgg#12370) * fix(mobile): share accessible connection trace controls (pingdotgg#12371) * fix(mobile): share settings control row layout (pingdotgg#12356) * refactor(web): share diagnostic process actions (pingdotgg#12358) * refactor(mobile): share Android toolbar search fields (pingdotgg#12359) * refactor(web): share settings group surfaces (pingdotgg#12360) * refactor(web): reuse inline settings actions (pingdotgg#12362) * refactor(mobile): share thread list section controls (pingdotgg#12363) * refactor(mobile): share connection form fields (pingdotgg#12364) * refactor(mobile): share local environment lists (pingdotgg#12365) * refactor(mobile): share file preview feedback (pingdotgg#12368) * refactor(web): share standalone page layout (pingdotgg#12354) * fix(mobile): share settings action row defaults (pingdotgg#12369) * fix(mobile): share request action button defaults (pingdotgg#12366) * fix(web): share accessible color picker controls (pingdotgg#12355) * fix(mobile): use singular label for one settings environment (pingdotgg#12282) * feat(mobile): add copy thread ID to thread list actions (pingdotgg#12228) * fix(mobile): remove Android input underline backgrounds (pingdotgg#12394) * chore(deps): upgrade Effect to rc.115 and Alchemy to beta.78 (pingdotgg#12326) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(refs): sync Effect and Alchemy references to rc.115 and beta.78 (pingdotgg#12327) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(relay): deploy with the Alchemy CLI and publish client config through an Action (pingdotgg#12401) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates (pingdotgg#12411) Signed-off-by: dependabot[bot] <support@github.com> * fix(git): prevent stale branch selections from restoring files (pingdotgg#10574) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * chore(deps): bump parents that carry vulnerable transitive dependencies (pingdotgg#12417) * fix(web): keep a file-to-symlink type change from crashing the diff view (pingdotgg#11075) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * Use T3 Device panel for mobile testing (pingdotgg#12414) * fix(web): client spans reach the trace proxy again (pingdotgg#12332) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(bitbucket): preserve rate limits from optional PR reads (pingdotgg#12486) * fix(mobile): synchronize native permission registry access (pingdotgg#12482) * fix(build): retain multiple license notices for one package (pingdotgg#12489) * fix(build): parse executable imports without matching source strings (pingdotgg#12488) * fix(mobile): synchronize native notification delegates (pingdotgg#12483) * fix(relay): accept delegated thread IDs in activity routes (pingdotgg#12484) * fix(git): explain fetch failures without exposing remote output (pingdotgg#12485) * fix(web): sidebar search matches message content (pingdotgg#11761) * fix(server): restore secrets when settings persistence fails (pingdotgg#12487) * fix(ci): accept V2 transfer reports without cross-scenario comparisons (pingdotgg#12492) * fix(web): speed up PR previews with fewer GitHub requests (pingdotgg#11825) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): retry transient git failures during checkpoint capture (pingdotgg#11665) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(mobile): keep archived threads visible during iOS search (pingdotgg#12420) * perf(mobile): isolate Material You conversion on Android (pingdotgg#12379) * perf(mobile): isolate iOS Live Activity imports (pingdotgg#12380) * refactor(mobile): split home headers by platform (pingdotgg#12381) * refactor(mobile): split native menus by platform (pingdotgg#12382) * refactor(mobile): isolate thread row appearance by platform (pingdotgg#12383) * refactor(mobile): split settings selection rows by platform (pingdotgg#12384) * refactor(mobile): centralize platform header rendering (pingdotgg#12388) * refactor(mobile): configure thread headers through the shared core (pingdotgg#12389) * refactor(mobile): share file header actions and search configuration (pingdotgg#12390) * refactor(mobile): share terminal header and menu configuration (pingdotgg#12391) * refactor(mobile): share archived thread header configuration (pingdotgg#12399) * refactor(mobile): compose review menus through the shared header (pingdotgg#12400) * feat(mobile): search projects when starting a task (pingdotgg#12496) * fix(mobile): preserve multiple model favorites (pingdotgg#12505) * feat(server): export log records over OTLP (pingdotgg#12493) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(mobile): use native settings and snooze controls (pingdotgg#12512) * feat(web): sort pull requests by what is blocked on me (pingdotgg#12508) * fix(mobile): prefer pull-to-refresh on list screens (pingdotgg#12515) * fix(acp): accept SDK elicitation requests (pingdotgg#11294) * fix(release): read relay configuration without loading deployment providers (pingdotgg#12518) * fix(ci): reconcile native change labels against pinned commits (pingdotgg#12517) * fix(release): strip Alchemy progress before parsing relay state (pingdotgg#12519) * refactor: remove obsolete code (pingdotgg#9917) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): release oversized pull request diff cache entries (pingdotgg#12523) * feat(mobile): view and control agent devices (pingdotgg#12531) * fix(preview): recover host registration after request timeouts (pingdotgg#12535) * fix(mobile): align built-in theme colors with desktop (pingdotgg#12534) * feat(desktop): export main process telemetry over OTLP (pingdotgg#12520) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(codex): surface app permission requests as approvable (pingdotgg#7861) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * chore(desktop): leave main process metrics export off until a metric exists (pingdotgg#12540) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(release): drop placeholder allowBuilds entry that broke desktop builds (pingdotgg#12544) * fix(mobile): adapt workspace navigation and expand controls (pingdotgg#12551) * chore(mobile): add dev client script with preview environment (pingdotgg#12558) * fix: detect installed editors outside PATH (pingdotgg#12439) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): show plain text in collapsed thought previews (pingdotgg#12377) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): wrap long titles in confirmation dialogs (pingdotgg#12571) * fix(mobile): keep the Android composer placeholder on one line (pingdotgg#12605) * fix(web): restore providers settings heading (pingdotgg#12552) * Add new GitHub user 'yordis' to VOUCHED.td (pingdotgg#12546) * chore: vouch cestercian (pingdotgg#12638) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep desktop annotation screenshots under CSP (pingdotgg#12636) * fix(web): keep typed text when a question option is clicked (pingdotgg#12577) * fix(server): empty Claude homePath shares continuation with ~/.claude (pingdotgg#12624) * fix(desktop): include SnapShot app text for Flatpak and GTK4 (pingdotgg#12635) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): surface ACP stderr when cursor-agent exits at session start (pingdotgg#12625) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align pull request state glyph to top of row (pingdotgg#11268) * fix(web): align menu item icons in pull request detail panel (pingdotgg#11263) * fix(web): honor whitespace settings in pull request diffs (pingdotgg#12438) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): keep citation comment when popover is dismissed (pingdotgg#10831) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(web): keep narrow chat headers readable and aligned (pingdotgg#12453) * refactor(observability): hold OTLP export settings per signal (pingdotgg#12657) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(web): explain what enabling network access means in its confirmation (pingdotgg#10098) Co-authored-by: shivamhwp <91240327+shivamhwp@users.noreply.github.com> * fix(web): reuse current PR status in the sidebar (pingdotgg#12545) * fix(web): stabilize pull request loading layout (pingdotgg#12721) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(desktop): align preview recording cursors and show input feedback (pingdotgg#12779) * fix(web): the Run on / Workspace menu closes after a pick (pingdotgg#12685) * fix(web): keep portaled menus clickable over Electron drag regions (pingdotgg#12527) * fix(web): render citations in queued messages (pingdotgg#12403) * fix(web): keep the timeline still when the resting composer expands (pingdotgg#12771) * fix: composer hero reads project name to screen readers (pingdotgg#12397) * fix(mobile): respect word wrap in diffs (pingdotgg#12590) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): allow full contrast in assistant replies (pingdotgg#12405) * fix(web): pull request chips share the link hover preview (pingdotgg#12719) * fix(web): compact the worktree setup glass popover (pingdotgg#12802) * fix(web): route keyboard submit through the primary worktree action (pingdotgg#12526) * fix(web): skip image inline chip when composer is empty (pingdotgg#12528) * fix(web): only show notice details when text is clipped (pingdotgg#12760) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com> * fix(devices): recover simulator streams after failures (pingdotgg#12639) * chore(server): bump device tooling versions (pingdotgg#12809) * fix: allow more attachments without raising the image payload budget (pingdotgg#12620) * fix(web): device Reconnect starts one stream instead of two (pingdotgg#12808) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): tolerate shutting down an iOS simulator that is already off (pingdotgg#12807) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(web): use the linked pull request row layout on the pull requests page (pingdotgg#12536) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(clients): keep backslashes in copied Codex citations (pingdotgg#12243) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> * feat(web): truncate branch names and paths in the middle (pingdotgg#12805) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(web): paste markdown with inline code inside bold, italic, or strikethrough (pingdotgg#12290) * feat(web): show the pull request refresh spinning in the detail header (pingdotgg#12833) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(web): dismiss composer suggestions with Escape (pingdotgg#12836) * fix(mobile): keep the source worktree when starting a thread on a branch (pingdotgg#12623) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): keep composer controls visible while they fit (pingdotgg#12837) * feat(devices): show installed and running tool versions per host (pingdotgg#12816) * feat(devices): show automatic update progress and host retry (pingdotgg#12817) * feat(devices): add read-only update discovery and remote ownership (pingdotgg#12818) * fix(devices): safely reclaim obsolete managed tool versions (pingdotgg#12819) * fix(web): match thread notification icons to sidebar status (pingdotgg#12806) * fix(web): move sidebar shelves as one block (pingdotgg#11772) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix(web): offer undo after unpinning a thread (pingdotgg#10744) * feat(web): undo settle, snooze and archive, with a mod+z shortcut (pingdotgg#12848) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(mobile): use a proper pull request icon on iOS (pingdotgg#12855) * test(web): remove redundant favicon test (pingdotgg#12856) * feat(devices): offer manual updates in tool version details (pingdotgg#12877) * feat(web): answer pull request actions on the row at once (pingdotgg#12843) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(mobile): stop iOS autocorrect from rewriting search queries (pingdotgg#12949) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): pull request embed chip shows the state icon (pingdotgg#12951) * fix(web): dismiss selection actions when pressing buttons (pingdotgg#12950) * fix(web): name message copy actions accurately (pingdotgg#12865) * fix(contracts): old message-sent events without turnId no longer stop the server from starting (pingdotgg#12763) * fix(web): the custom snooze calendar starts the week where the locale does (pingdotgg#12745) * chore(mobile): bump app version to 1.3.0 Co-authored-by: codex <codex@users.noreply.github.com> * feat(server): let t3.json limit or disable submodule init in new worktrees (pingdotgg#12953) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(settings): resolve t3.json inside the project settings resolver (pingdotgg#12954) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(settings): choose how new worktrees initialize submodules (pingdotgg#12955) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): show thread undo notice in the sidebar (pingdotgg#12972) * feat(web): merge the comment and review buttons into one composer (pingdotgg#12945) Co-authored-by: maria-rcks <maria@kuuro.net> * fix(web): allow text selection when renaming threads (pingdotgg#12935) * chore(lint): report className restyling of components/ui exports (pingdotgg#12982) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): drop className overrides that repeat the base styles (pingdotgg#12984) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): close menus when clicking into the browser tab (pingdotgg#11148) * refactor(web): give Spinner and RefreshIcon a size prop (pingdotgg#12985) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): retry failed attachment uploads after reconnect (pingdotgg#10338) * fix(web): respect panel motion in composer transitions (pingdotgg#11064) * fix(web): read panel animation settings in the composer (pingdotgg#13098) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat(models): add opus 5.5 without changing existing aliases (pingdotgg#13094) Co-authored-by: Anco <anco@bluebarry.ai> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * Update model manifest with new timestamps and models * refactor(web): use ghost-muted where ghost buttons restyled to muted (pingdotgg#13020) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): fold repeated overrides into ui defaults (pingdotgg#13021) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): mark the current menu value with MenuRadioGroup (pingdotgg#13022) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): add an active prop to CommandItem (pingdotgg#13023) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore(lint): exempt CollapsibleTrigger from no-restyle (pingdotgg#13024) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): use icon-xs where icon buttons were forced to size-6 (pingdotgg#13025) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): add radius="none" to ScrollArea (pingdotgg#13026) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): add font="mono" to Input (pingdotgg#13027) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): add SidebarInput (pingdotgg#13028) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): add a label variant to Badge (pingdotgg#13029) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): give Skeleton three shapes (pingdotgg#13030) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): one wrap width for tooltips, plus a code variant (pingdotgg#13031) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): one vertical rhythm for dialog bodies (pingdotgg#13032) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): ghost-muted icons follow the text; add ghost-destructive (pingdotgg#13033) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): InlineButton underlines on hover and takes a tone (pingdotgg#13034) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): one minimum width for menus, three widths for popovers (pingdotgg#13035) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): every textarea caps its growth; the diff comment box is a Textarea (pingdotgg#13036) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): stacked sidebar groups share one inset (pingdotgg#13037) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): Collapsible stays a plain container (pingdotgg#13038) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): show more / show less are ordinary sidebar sub-rows (pingdotgg#13039) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): Empty has three sizes (pingdotgg#13040) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): one row height for select, combobox and radio items (pingdotgg#13041) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): render menu and popover triggers through Button (pingdotgg#13042) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * refactor(web): sidebar alerts use the standard variants; one keycap (pingdotgg#13043) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(server): bypass owned caches on explicit provider refresh (pingdotgg#13109) * chore(devices): bump agent-device to 0.21.12 (pingdotgg#13124) * fix(mobile): restore command palette import after upstream sync * fix: align packaging and branded preflight tests with upstream * chore: normalize lockfile after full workspace install * fix: reconcile mobile screens and tests after upstream sync * fix: complete bootstrap worktree handoff after sync * chore: set Ditto UI override baseline after upstream sync * fix: restore project filter action in thread menu --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Ved Pandey <33724654+vedprakash2302@users.noreply.github.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com> Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Adolanium <94890352+Adolanium@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Patrik Votoček <patrik@votocek.cz> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Harshith Goka <harshith9399@gmail.com> Co-authored-by: pcstyle <134572227+pc-style@users.noreply.github.com> Co-authored-by: exe.dev user <exedev@ropeway-swimming.exe.xyz> Co-authored-by: Alex Southwell <saphid@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Wilgot <wilgot10@yahoo.com> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Co-authored-by: Dominic Roy <dominic@sdko.org> Co-authored-by: James C <134711311+Exotic209093@users.noreply.github.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Koushik_xd <122906171+koushikxd@users.noreply.github.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Co-authored-by: Cestercian <yashafaid@gmail.com> Co-authored-by: Akash Moradiya <64416825+akash3444@users.noreply.github.com> Co-authored-by: Khai Shern, Toh <55418374+Leos-Khai@users.noreply.github.com> Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Carter Smith <51297686+carterwsmith@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com> Co-authored-by: Anco <anco@bluebarry.ai> Co-authored-by: Peyton Spencer <peyton@peyton-mac-mini.local>
Workspace file-search refresh runs inside the checkpoint worker. A blocked native scan delays completion receipts and other workspaces even after their checkpoint Git ref is saved.
Run search refresh in a separate scoped, drainable worker after capture/restore. Coalesce queued requests by workspace, allowing one follow-up while that workspace's scan is running. Refresh failures are logged without failing checkpoint processing, and shutdown/drain still waits for the refresh worker.
Verification: a Deferred-controlled scan remains blocked while turns in two real Git repositories finish and their latest checkpoint contents are verified. Repeated requests for the busy workspace yield only one queued follow-up; releasing the scan and draining produces three refresh calls across both workspaces. Integrated reactor suite: 45 tests passed; targeted lint and server-only typecheck passed.
Depends on #12307. The fifth dependent fix is #12181, retained on its author's fork and based on this branch. GitHub excludes fork PRs from native stack grouping.
Prepared with Codex.
Summary by CodeRabbit