Skip to content

perf(server): run Git for Windows' real git.exe, not its launcher - #17707

Merged
juliusmarminge merged 3 commits into
pingdotgg:mainfrom
SunkenInTime:t3/windows-real-git
Oct 10, 2026
Merged

juliusmarminge merged 3 commits into
pingdotgg:mainfrom
SunkenInTime:t3/windows-real-git

Conversation

@SunkenInTime

@SunkenInTime SunkenInTime commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

On Windows, the server now runs Git for Windows' real git.exe instead of the cmd\git.exe launcher in front of it. Measured on a dev server seeded from a real install (60 threads), 8 minutes each, main and this branch alternated twice:

main this PR
Processes started 3,776 2,712 (−28%)
CPU, server and children 118.8 s 100.1 s (−16%)
Launcher (cmd\git.exe) runs seen 441, 395 0
Kernel tokens leaked per 100 git launches 105 to 109 1 to 5 (idle: 3 to 4)

Problem

Git for Windows' installer puts only <Git>\cmd\git.exe on PATH. That file is a 46 KB launcher. It sets MSYSTEM, HOME and PATH, then starts the real git.exe as a second process. So every git command T3 runs costs an extra process.

The launcher also leaks. Each run leaves about one kernel token reference behind that Windows never frees until reboot. The seeded server above runs about 9,800 git commands an hour, so the count reaches millions within a week or two. On this PC at 3 million leaked tokens, process creation slowed from 2.9 ms to 9.4 ms at the median, and 2 to 11% of launches took over 100 ms. Node's spawn() creates the process on the main thread, so every slow launch is also a stall in the server's event loop. A reboot clears it.

#11221 reported the launcher. #12600 fixed the PATH-scan half of that issue and left the launcher alone.

Change

preferGitForWindowsBinary in packages/shared/src/shell.ts runs inside resolveSpawnCommand. When the resolved path is Git for Windows' launcher (<Git>\cmd\git.exe, or <Git>\bin\git.exe in the portable build), it returns <Git>\<build>\bin\git.exe, checking ucrt64, clangarm64, mingw64, then mingw32. Anything else, including Scoop and Chocolatey shims, comes back unchanged.

  • It keeps the launcher when MSYSTEM is set. The real binary adds its own folders to PATH only when MSYSTEM is unset. With MSYSTEM set and Git's folders off PATH, a #!/bin/sh hook can't start. develdeco/jig hit exactly this in perf(gitx): run git's own binary, not a launcher in front of it develdeco/jig#19. A desktop-launched server has no MSYSTEM; one started from Git Bash keeps today's behavior.
  • The swap is cached with the PATH scan, keyed on whether MSYSTEM is set. Its file checks cost about 0.28 ms of synchronous stat calls on this machine, so uncached they would make every cached lookup about 8x slower (288 µs vs 35 µs). The cost: a Git upgrade that moves the real binary can fail git commands for up to the cache's 30 seconds.
  • Git for Windows supports running the real binary directly (git-wrapper, aimed at callers that run git "tens of thousands of times"). Its location isn't stable, though: 2.56 moved x64 builds from mingw64 to ucrt64. If none of the folders exist, T3 runs the launcher as before.

GitVcsDriverCore.executeRaw, which runs most of the server's git commands, spawned the bare name git through Node's own PATH lookup and never reached resolveSpawnCommand. It now resolves through it too. If git resolves to a .cmd or .bat wrapper, the driver keeps Node's lookup, because running it through cmd.exe would cut multi-line commit messages at the first newline.

What git's own child processes see is unchanged. On Git 2.55 and portable 2.56, I compared the environment and the resolved sh, ssh, gpg, git-lfs, git-credential-manager, perl and curl under each launch path. They were the same binaries with the same MSYSTEM, HOME and PLINK_PROTOCOL. Two small differences remain:

  • The real binary puts %USERPROFILE%\bin ahead of Git's folders instead of after them, which is the order Git Bash uses.
  • It doesn't read MSYS= from etc\git-bash.config. None of the installer, portable or MinGit layouts ship that file.

macOS and Linux are untouched, because resolveSpawnCommand returns before any of this off Windows.

Scope and approval

Bug: #11221, the launcher half. This is a performance fix with no change in what git does.

Verification

All on Windows 11, Ryzen 5800X, Git 2.55.0.windows.1, plus portable and MinGit 2.56.0.windows.2.

Per command, through Effect's spawner the way T3 runs git. 200 commands per round, 3 rounds, alternating launcher and real binary:

Command Launcher p50 / p90 Real p50 / p90 Processes
git config --get (exit 0) 42.6 / 58.4 ms 31.4 / 46.4 ms 3 → 2
git config --get (exit 1) 247 / 321 ms 241 / 314 ms 7 → 6
git status --porcelain=v2 175 / 194 ms 177 / 194 ms 3 → 2

Failing commands barely move because Effect's two taskkills dominate them; #16850 covers that. git status is dominated by git's own work.

Leak. Live kernel token count around 15 alternating batches of 100 launches each (medians):

Launcher Real git.exe Idle
Git 2.55 109 1 3
Git 2.56 105 5 4

Live server. The table at the top comes from the seeded dev server, with GitHub's PR list stubbed to "no PR" so the runs didn't spend API quota. I sampled the image paths of the server's child processes from its job object:

  • main started cmd\git.exe and then the real binary for each command;
  • this branch started only mingw64\bin\git.exe;
  • both ran the same 1,514 git commands per run.

A last 2-minute run on the final code ran 376 git commands through the driver, all on the real binary, with no spawn errors.

Tests.

  • packages/shared/src/shell.test.ts: 39 pass, including the new preferGitForWindowsBinary cases.
  • apps/server/src/vcs/GitVcsDriverCore.test.ts, run with a desktop-like environment so the real binary is used: 128 pass, including the #!/bin/sh pre-commit and pre-push hook tests. The same 8 fail on unmodified main on this machine: the five ssh error-classification tests, the missing-repository and non-repository cases, and the pathspec-magic filename.

Not checked.

  • ARM64 on hardware. I only confirmed the clangarm64 layout from the MinGit ARM64 zip.
  • Git for Windows older than 2.26, where the real binary doesn't set up PATH itself. T3 already needs 2.35 or later for ls-files --sparse.
  • Git that agents run from their own shells. It still uses whatever their PATH finds.

Model: Claude Opus 5.5. Harness: Claude Code, running inside T3 Code.

🤖 Generated with Claude Code

SunkenInTime and others added 2 commits October 9, 2026 23:03
Git for Windows puts only cmd\git.exe on PATH. That launcher starts the real
git.exe as a second process on every command, and each launch leaks a kernel
token reference that slows process creation machine-wide until reboot.
resolveSpawnCommand now swaps the launcher for the git.exe beside it
(ucrt64, clangarm64, mingw64 or mingw32), keeping the launcher when MSYSTEM
is set because the real binary only adds its folders to PATH when it is
unset. The git driver now resolves git through the same function.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Git upgrade moves the real git.exe but never the launcher, so a cached
real path could fail every git command for up to 30 seconds. The swap now
runs after the cache. The driver also keeps Node's own lookup when git
resolves to a .cmd wrapper, since cmd.exe would cut multi-line commit
messages at the first newline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Oct 10, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 10, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR changes how all server-side Git operations run on affected Windows installations, replacing the launcher process with version- and environment-sensitive executable selection. Although the implementation is focused and tested, the existing production execution path and process behavior change materially enough for human review.

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

@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Review in Change Stack →Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 5163300f-9675-478e-8fbe-1a788b3ae838


📥 Commits

Reviewing files that changed from the base of the PR and between ea61922 and 6484eee.



📒 Files selected for processing (2)
  • packages/shared/src/shell.test.ts
  • packages/shared/src/shell.ts


Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.




📝 Walkthrough
📝 Walkthrough

Walkthrough

Git executable resolution can select an eligible Git for Windows binary. The VCS driver uses the resolved command and assembled environment when spawning Git.

Changes

Git spawn resolution

Layer / File(s) Summary
Select Git for Windows binary
packages/shared/src/shell.ts, packages/shared/src/shell.test.ts
resolveSpawnCommand selects the first existing architecture-specific git.exe for eligible Git for Windows launchers. It includes MSYSTEM in the cache key. Tests cover selection, unchanged launcher cases, and cache separation.
Spawn Git with resolved command
apps/server/src/vcs/GitVcsDriverCore.ts
Git spawning resolves the executable using the assembled environment and passes that environment to the child process. It uses "git" when resolution requires a shell wrapper.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~12 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant GitVcsDriverCore
  participant resolveSpawnCommand
  participant GitProcess
  GitVcsDriverCore->>resolveSpawnCommand: Resolve git using the assembled environment
  resolveSpawnCommand-->>GitVcsDriverCore: Return resolved executable
  GitVcsDriverCore->>GitProcess: Spawn selected command with environment
Loading

Suggested reviewers: juliusmarminge



Merge Risk: ⚪ Minimal · up to 6484e

No PR-introduced issue requiring a fix before merge was established.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 6484e

The change preserves argument-array spawning and does not introduce a new command shell. Remaining uncertainty concerns whether bypassing the Windows launcher preserves hook and credential-helper resolution in all supported environments; cached binary paths can also briefly become stale during Git upgrades.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The execution surface is server Git operations and existing resolver consumers whenever their command selects an eligible launcher. The changed code introduces no explicit elevation mechanism; executable and downstream-helper trust remain relevant to the launching process's authority.

Security Findings and Attack Paths

  • observed — The suspected shell-wrapper mismatch does not introduce a new attack path in this VCS caller: both base and head spawn literal git without enabling shell mode when the head resolver selects a shell-required wrapper.

Trust Boundaries and Controls

  • inferred — Binary selection remains syntactically anchored beneath the selected launcher's installation root, rather than choosing an unrelated executable location. This does not prove equivalent downstream helper trust: PATH and HOME setup after launcher bypass is delegated to Git for Windows and is not established by the inspected repository implementation.

Hardening Proposals

  • proposed — Validate launcher versus direct-binary equivalence for hook, SSH, GPG, and credential-helper selection under controlled PATH, HOME, and MSYSTEM variations. This would resolve the remaining helper-trust uncertainty rather than address a demonstrated vulnerability.

Pre-merge checks | Passed 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description check Passed The description includes the problem, change, scope justification, detailed verification results, limitations, and agent metadata.
Linked Issues check Passed The description identifies bug #11221 and explains that this PR addresses its launcher-related performance problem.
Out of Scope Changes check Passed The changes match the stated objective. They update Windows Git command resolution, add focused tests, and leave non-Windows behavior unchanged.
Title check Passed The title clearly and concisely describes the main change: using Git for Windows' real executable instead of its launcher.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • 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.

The swap's file checks ran before every git launch, about 0.28 ms of
synchronous stat calls each on Windows, so a cached resolveSpawnCommand
took ~288 us instead of ~35 us. It now runs on a cache miss and is stored
with the scan, keyed on whether MSYSTEM is set. A Git upgrade that moves the
real binary can fail git for up to the 30 second cache lifetime.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 10, 2026 05:42

Dismissing prior approval to re-evaluate 6484eee

@juliusmarminge
juliusmarminge merged commit 9cc5768 into pingdotgg:main Oct 10, 2026
29 of 30 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 10, 2026
## What's Changed
* feat(web): draft screen project picker is searchable by @juliusmarminge in pingdotgg/t3code#17664
* fix(server): report incomplete transcript usage scans by @maria-rcks in pingdotgg/t3code#15661
* fix(web): every resize-driven layout commits in the same frame by @maria-rcks in pingdotgg/t3code#17656
* fix(web): right panel and terminal drawer follow the pointer while dragging by @maria-rcks in pingdotgg/t3code#17657
* fix(web): terminal drawer keeps its height after the window shrinks by @maria-rcks in pingdotgg/t3code#17658
* perf(web): sidebar drags restyle only the sidebar by @maria-rcks in pingdotgg/t3code#17659
* fix(web): server browser page resizes while the panel is dragged by @maria-rcks in pingdotgg/t3code#17660
* fix(storage): make worktree cleanup work and show why it skipped by @maria-rcks in pingdotgg/t3code#17563
* test(usage): usage service tests keep their state directory until cache writes land by @tris203 in pingdotgg/t3code#17636
* fix(checkpoint): pulls and rebases no longer flood a turn's changed files by @t3dotgg in pingdotgg/t3code#17161
* fix(web): place notification icons after titles by @voltcrash in pingdotgg/t3code#12209
* fix(web): attachments on an open question are visible again by @tiliakoos in pingdotgg/t3code#15537
* fix(web): scale Files tree with interface font size by @Umais-Adeed in pingdotgg/t3code#8011
* fix(server): probe only owned preview listeners by @maria-rcks in pingdotgg/t3code#16687
* fix(chat): surface pending subagent questions on parents by @maria-rcks in pingdotgg/t3code#16634
* fix(web): section header chevrons point up when collapsed by @ZenderGoD in pingdotgg/t3code#14273
* fix(web): timeline divider pill shows a pointer, visible hover and focus ring by @jonesfionn101-dotcom in pingdotgg/t3code#15188
* fix(git): allow creating prs from dirty worktrees by @maria-rcks in pingdotgg/t3code#15625
* docs(install): polish binary install destination phrasing by @ege-arhan in pingdotgg/t3code#15732
* perf(server): keep passive terminal output flowing by @StiensWout in pingdotgg/t3code#17178
* fix(web): stop button icon no longer shifts on hover by @NK-Works in pingdotgg/t3code#16012
* fix(web): add bottom padding to expanded tool panels by @12ya in pingdotgg/t3code#16525
* fix(web): keep incremental highlighter return type portable by @luke2x in pingdotgg/t3code#17259
* fix(web): sidebar "Code" label no longer clips its letter tops by @akbarakma in pingdotgg/t3code#16134
* fix(tests): use POSIX paths for the simulated macOS device host by @Quicksaver in pingdotgg/t3code#17241
* fix(mobile): Android composer keeps the caret in view on AOSP-based keyboards by @bitmvk in pingdotgg/t3code#17492
* test(web): allow cold timeline imports on CI by @lastobelus in pingdotgg/t3code#16608
* fix(mobile): pinch zooms chat images on Android by @AKolenda in pingdotgg/t3code#15047
* fix(web): selected provider ring no longer clipped during panel resize by @jfortez in pingdotgg/t3code#17534
* docs(usage): OpenCode Go limits need a Go API key by @nexxeln in pingdotgg/t3code#15664
* fix(web): improve usage scanning indicator alignment by @AksharP5 in pingdotgg/t3code#15498
* fix(server): print pairing credential expiry as ISO timestamp by @kvnloo in pingdotgg/t3code#14128
* chore(ci): use GPT 6.1 Sol Max for check agents by @ishaanko in pingdotgg/t3code#14312
* fix(mobile): honor requested terminal native architectures by @bompus in pingdotgg/t3code#10709
* fix(server): keep preview browser connected after operation timeouts by @juliusmarminge in pingdotgg/t3code#17693
* fix(web): timeline divider focus ring stays inside the pill by @t3dotgg in pingdotgg/t3code#17702
* perf(desktop): reuse the prepared shell environment in the local backend by @Yash-Singh1 in pingdotgg/t3code#17384
* fix(web): align settings page widths by @diegoarff in pingdotgg/t3code#12158
* test(server): resolve the temp dir before matching the symlinked entrypoint by @ylcn91 in pingdotgg/t3code#9400
* fix(web): keep inline code pills intact when they wrap by @satyalyadav in pingdotgg/t3code#12038
* Revert "chore(ci): use GPT 6.1 Sol Max for check agents" by @maria-rcks in pingdotgg/t3code#17698
* fix(web): show the correct new thread shortcut in command palette by @vaishnavsm in pingdotgg/t3code#8513
* fix(desktop): declare macOS local network usage by @jsilets in pingdotgg/t3code#11922
* docs: add Scoop as Windows installation method by @Mostafa-Ben-Git in pingdotgg/t3code#10509
* fix(server): agents run in their own systemd scopes so an OOM kill spares the server by @t3dotgg in pingdotgg/t3code#17662
* fix(web): welcome wizard says where imported projects come from by @UzEE in pingdotgg/t3code#14584
* fix(web): cite works on responses that end before a tool call by @maria-rcks in pingdotgg/t3code#17713
* fix(desktop): sign Windows native addons by @Lumbreras2306 in pingdotgg/t3code#8206
* fix(server): track resumed subagent follow-ups as separate tasks by @Yash-Singh1 in pingdotgg/t3code#17696
* fix(web): nested corners follow their container's radius by @maria-rcks in pingdotgg/t3code#17695
* feat(web): pr panel actions confirm in place by @maria-rcks in pingdotgg/t3code#17710
* feat(web): reorder right panel tabs by dragging by @eimexdev in pingdotgg/t3code#17730
* fix(azure-devops): list pull requests with token sign-in and check out into worktrees by @maria-rcks in pingdotgg/t3code#17725
* fix(usage): keep one email in two workspaces as two accounts by @maria-rcks in pingdotgg/t3code#17711
* feat(pull-requests): hosts can report edit and resolve permissions per item by @juliusmarminge in pingdotgg/t3code#17667
* perf(server): run Git for Windows' real git.exe, not its launcher by @SunkenInTime in pingdotgg/t3code#17707
* fix(clients): restart continuations show as a T3 Code notice, not another agent's message by @juliusmarminge in pingdotgg/t3code#17723
* fix(mobile): browser picture in picture opens from the header button by @juliusmarminge in pingdotgg/t3code#17731
* feat(source-control): GitCafe lives in @t3tools/source-control-gitcafe by @juliusmarminge in pingdotgg/t3code#17681
* fix(web): add provider wizard no longer shifts sideways while it grows by @flamboh in pingdotgg/t3code#17292
* fix(web): PR search keeps the caret where you type by @flamboh in pingdotgg/t3code#17675
* fix(server): thread PR badges catch up when another environment reads the PR by @flamboh in pingdotgg/t3code#17729
* fix(server): refuse editor paths with line breaks or quotes when the editor is a Windows command shim by @juliusmarminge in pingdotgg/t3code#17749

## New Contributors
* @tiliakoos made their first contribution in pingdotgg/t3code#15537
* @Umais-Adeed made their first contribution in pingdotgg/t3code#8011
* @ZenderGoD made their first contribution in pingdotgg/t3code#14273
* @jonesfionn101-dotcom made their first contribution in pingdotgg/t3code#15188
* @ege-arhan made their first contribution in pingdotgg/t3code#15732
* @NK-Works made their first contribution in pingdotgg/t3code#16012
* @12ya made their first contribution in pingdotgg/t3code#16525
* @luke2x made their first contribution in pingdotgg/t3code#17259
* @akbarakma made their first contribution in pingdotgg/t3code#16134
* @Quicksaver made their first contribution in pingdotgg/t3code#17241
* @bitmvk made their first contribution in pingdotgg/t3code#17492
* @lastobelus made their first contribution in pingdotgg/t3code#16608
* @jfortez made their first contribution in pingdotgg/t3code#17534
* @diegoarff made their first contribution in pingdotgg/t3code#12158
* @ylcn91 made their first contribution in pingdotgg/t3code#9400
* @satyalyadav made their first contribution in pingdotgg/t3code#12038
* @vaishnavsm made their first contribution in pingdotgg/t3code#8513
* @jsilets made their first contribution in pingdotgg/t3code#11922
* @Mostafa-Ben-Git made their first contribution in pingdotgg/t3code#10509
* @UzEE made their first contribution in pingdotgg/t3code#14584
* @Lumbreras2306 made their first contribution in pingdotgg/t3code#8206

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261010.2908...v0.0.46-nightly.20261010.2922

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2922
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 10, 2026
## What's Changed
* feat(web): draft screen project picker is searchable by @juliusmarminge in pingdotgg/t3code#17664
* fix(server): report incomplete transcript usage scans by @maria-rcks in pingdotgg/t3code#15661
* fix(web): every resize-driven layout commits in the same frame by @maria-rcks in pingdotgg/t3code#17656
* fix(web): right panel and terminal drawer follow the pointer while dragging by @maria-rcks in pingdotgg/t3code#17657
* fix(web): terminal drawer keeps its height after the window shrinks by @maria-rcks in pingdotgg/t3code#17658
* perf(web): sidebar drags restyle only the sidebar by @maria-rcks in pingdotgg/t3code#17659
* fix(web): server browser page resizes while the panel is dragged by @maria-rcks in pingdotgg/t3code#17660
* fix(storage): make worktree cleanup work and show why it skipped by @maria-rcks in pingdotgg/t3code#17563
* test(usage): usage service tests keep their state directory until cache writes land by @tris203 in pingdotgg/t3code#17636
* fix(checkpoint): pulls and rebases no longer flood a turn's changed files by @t3dotgg in pingdotgg/t3code#17161
* fix(web): place notification icons after titles by @voltcrash in pingdotgg/t3code#12209
* fix(web): attachments on an open question are visible again by @tiliakoos in pingdotgg/t3code#15537
* fix(web): scale Files tree with interface font size by @Umais-Adeed in pingdotgg/t3code#8011
* fix(server): probe only owned preview listeners by @maria-rcks in pingdotgg/t3code#16687
* fix(chat): surface pending subagent questions on parents by @maria-rcks in pingdotgg/t3code#16634
* fix(web): section header chevrons point up when collapsed by @ZenderGoD in pingdotgg/t3code#14273
* fix(web): timeline divider pill shows a pointer, visible hover and focus ring by @jonesfionn101-dotcom in pingdotgg/t3code#15188
* fix(git): allow creating prs from dirty worktrees by @maria-rcks in pingdotgg/t3code#15625
* docs(install): polish binary install destination phrasing by @ege-arhan in pingdotgg/t3code#15732
* perf(server): keep passive terminal output flowing by @StiensWout in pingdotgg/t3code#17178
* fix(web): stop button icon no longer shifts on hover by @NK-Works in pingdotgg/t3code#16012
* fix(web): add bottom padding to expanded tool panels by @12ya in pingdotgg/t3code#16525
* fix(web): keep incremental highlighter return type portable by @luke2x in pingdotgg/t3code#17259
* fix(web): sidebar "Code" label no longer clips its letter tops by @akbarakma in pingdotgg/t3code#16134
* fix(tests): use POSIX paths for the simulated macOS device host by @Quicksaver in pingdotgg/t3code#17241
* fix(mobile): Android composer keeps the caret in view on AOSP-based keyboards by @bitmvk in pingdotgg/t3code#17492
* test(web): allow cold timeline imports on CI by @lastobelus in pingdotgg/t3code#16608
* fix(mobile): pinch zooms chat images on Android by @AKolenda in pingdotgg/t3code#15047
* fix(web): selected provider ring no longer clipped during panel resize by @jfortez in pingdotgg/t3code#17534
* docs(usage): OpenCode Go limits need a Go API key by @nexxeln in pingdotgg/t3code#15664
* fix(web): improve usage scanning indicator alignment by @AksharP5 in pingdotgg/t3code#15498
* fix(server): print pairing credential expiry as ISO timestamp by @kvnloo in pingdotgg/t3code#14128
* chore(ci): use GPT 6.1 Sol Max for check agents by @ishaanko in pingdotgg/t3code#14312
* fix(mobile): honor requested terminal native architectures by @bompus in pingdotgg/t3code#10709
* fix(server): keep preview browser connected after operation timeouts by @juliusmarminge in pingdotgg/t3code#17693
* fix(web): timeline divider focus ring stays inside the pill by @t3dotgg in pingdotgg/t3code#17702
* perf(desktop): reuse the prepared shell environment in the local backend by @Yash-Singh1 in pingdotgg/t3code#17384
* fix(web): align settings page widths by @diegoarff in pingdotgg/t3code#12158
* test(server): resolve the temp dir before matching the symlinked entrypoint by @ylcn91 in pingdotgg/t3code#9400
* fix(web): keep inline code pills intact when they wrap by @satyalyadav in pingdotgg/t3code#12038
* Revert "chore(ci): use GPT 6.1 Sol Max for check agents" by @maria-rcks in pingdotgg/t3code#17698
* fix(web): show the correct new thread shortcut in command palette by @vaishnavsm in pingdotgg/t3code#8513
* fix(desktop): declare macOS local network usage by @jsilets in pingdotgg/t3code#11922
* docs: add Scoop as Windows installation method by @Mostafa-Ben-Git in pingdotgg/t3code#10509
* fix(server): agents run in their own systemd scopes so an OOM kill spares the server by @t3dotgg in pingdotgg/t3code#17662
* fix(web): welcome wizard says where imported projects come from by @UzEE in pingdotgg/t3code#14584
* fix(web): cite works on responses that end before a tool call by @maria-rcks in pingdotgg/t3code#17713
* fix(desktop): sign Windows native addons by @Lumbreras2306 in pingdotgg/t3code#8206
* fix(server): track resumed subagent follow-ups as separate tasks by @Yash-Singh1 in pingdotgg/t3code#17696
* fix(web): nested corners follow their container's radius by @maria-rcks in pingdotgg/t3code#17695
* feat(web): pr panel actions confirm in place by @maria-rcks in pingdotgg/t3code#17710
* feat(web): reorder right panel tabs by dragging by @eimexdev in pingdotgg/t3code#17730
* fix(azure-devops): list pull requests with token sign-in and check out into worktrees by @maria-rcks in pingdotgg/t3code#17725
* fix(usage): keep one email in two workspaces as two accounts by @maria-rcks in pingdotgg/t3code#17711
* feat(pull-requests): hosts can report edit and resolve permissions per item by @juliusmarminge in pingdotgg/t3code#17667
* perf(server): run Git for Windows' real git.exe, not its launcher by @SunkenInTime in pingdotgg/t3code#17707
* fix(clients): restart continuations show as a T3 Code notice, not another agent's message by @juliusmarminge in pingdotgg/t3code#17723
* fix(mobile): browser picture in picture opens from the header button by @juliusmarminge in pingdotgg/t3code#17731
* feat(source-control): GitCafe lives in @t3tools/source-control-gitcafe by @juliusmarminge in pingdotgg/t3code#17681
* fix(web): add provider wizard no longer shifts sideways while it grows by @flamboh in pingdotgg/t3code#17292
* fix(web): PR search keeps the caret where you type by @flamboh in pingdotgg/t3code#17675
* fix(server): thread PR badges catch up when another environment reads the PR by @flamboh in pingdotgg/t3code#17729
* fix(server): refuse editor paths with line breaks or quotes when the editor is a Windows command shim by @juliusmarminge in pingdotgg/t3code#17749

## New Contributors
* @tiliakoos made their first contribution in pingdotgg/t3code#15537
* @Umais-Adeed made their first contribution in pingdotgg/t3code#8011
* @ZenderGoD made their first contribution in pingdotgg/t3code#14273
* @jonesfionn101-dotcom made their first contribution in pingdotgg/t3code#15188
* @ege-arhan made their first contribution in pingdotgg/t3code#15732
* @NK-Works made their first contribution in pingdotgg/t3code#16012
* @12ya made their first contribution in pingdotgg/t3code#16525
* @luke2x made their first contribution in pingdotgg/t3code#17259
* @akbarakma made their first contribution in pingdotgg/t3code#16134
* @Quicksaver made their first contribution in pingdotgg/t3code#17241
* @bitmvk made their first contribution in pingdotgg/t3code#17492
* @lastobelus made their first contribution in pingdotgg/t3code#16608
* @jfortez made their first contribution in pingdotgg/t3code#17534
* @diegoarff made their first contribution in pingdotgg/t3code#12158
* @ylcn91 made their first contribution in pingdotgg/t3code#9400
* @satyalyadav made their first contribution in pingdotgg/t3code#12038
* @vaishnavsm made their first contribution in pingdotgg/t3code#8513
* @jsilets made their first contribution in pingdotgg/t3code#11922
* @Mostafa-Ben-Git made their first contribution in pingdotgg/t3code#10509
* @UzEE made their first contribution in pingdotgg/t3code#14584
* @Lumbreras2306 made their first contribution in pingdotgg/t3code#8206

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261010.2908...v0.0.46-nightly.20261010.2922

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2922
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants