Repository navigation
fix(server): a directory no longer resolves as the resource monitor binary - #16838
Yash-Singh1 merged 3 commits into
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — The PR is a small, self-contained bug fix that rejects directory paths before native telemetry spawning and adds a regression test for Windows. Valid resource-monitor binaries and existing runtime paths retain their behavior. You can add or adjust custom eligibility rules. Learn more. |
|
This one is ready and I cannot move it further from the outside — flagging for a maintainer:
Scope stays as described: Happy to rebase onto |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
gh pr view 16838 --repo pingdotgg/t3code --json mergeable,mergeStateStatus,reviewDecision,reviews,statusCheckRollup,headRefOid
ast-grep outline apps/server/src/resourceTelemetry/ResourceMonitorBinary.ts
ast-grep outline apps/server/src/resourceTelemetry/ResourceMonitorBinary.test.ts
rg -n -C 12 'Directory|ResourceMonitorBinaryNotExecutable|rejects a directory' apps/server/src/resourceTelemetry/ResourceMonitorBinary.ts apps/server/src/resourceTelemetry/ResourceMonitorBinary.test.tsLength of output: 29797
One qualification: You are interacting with an AI system. |
|
Note Written by Hi! We are cleaning up open PRs, and this one does not say which model or harness was used to create it. If this change is really important, we recommend rebuilding the PR with a newer model and noting the model and harness in the PR description. |
|
Note Written by Reopening, this was closed by mistake. Sorry for the noise! |
Dismissing prior approval to re-evaluate 0f2a80f
Dismissing prior approval to re-evaluate dddc218
## What's Changed * perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842 * perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179 * perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183 * perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911 * perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254 * perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638 * fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962 * feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530 * fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838 * fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867 * fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706 * fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766 * feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538 * docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783 * fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143 * perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784 * fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240 * fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475 * fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019 * fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065 * fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499 * fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772 * fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934 * fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598 * fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005 * fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078 * fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697 * fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644 * fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894 * fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658 * feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598 * fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925 * fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938 * fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744 * fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752 * fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723 * fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859 * fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178 * fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556 * fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869 * fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838 * fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394 * fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528 * fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389 * fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325 * fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655 * test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080 * fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121 * fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816 * chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309 * fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543 * fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127 * fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480 ## New Contributors * @Maseeek made their first contribution in pingdotgg/t3code#17530 * @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706 * @fixfon made their first contribution in pingdotgg/t3code#17766 * @id0Sch made their first contribution in pingdotgg/t3code#16143 * @raphaelpra made their first contribution in pingdotgg/t3code#15240 * @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475 * @arhammahajan made their first contribution in pingdotgg/t3code#16019 * @connwalk made their first contribution in pingdotgg/t3code#17499 * @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005 * @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938 * @wellorbetter made their first contribution in pingdotgg/t3code#14178 * @freddy-d made their first contribution in pingdotgg/t3code#16869 * @Furox-Art made their first contribution in pingdotgg/t3code#16838 * @RustedAperture made their first contribution in pingdotgg/t3code#16325 * @sheehanmunim made their first contribution in pingdotgg/t3code#17080 * @realhasanshoaib made their first contribution in pingdotgg/t3code#14543 * @whoisaldo made their first contribution in pingdotgg/t3code#16480 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
## What's Changed * perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842 * perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179 * perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183 * perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911 * perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254 * perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638 * fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962 * feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530 * fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838 * fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867 * fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706 * fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766 * feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538 * docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783 * fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143 * perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784 * fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240 * fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475 * fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019 * fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065 * fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499 * fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772 * fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934 * fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598 * fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005 * fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078 * fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697 * fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644 * fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894 * fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658 * feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598 * fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925 * fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938 * fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744 * fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752 * fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723 * fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859 * fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178 * fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556 * fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869 * fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838 * fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394 * fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528 * fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389 * fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325 * fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655 * test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080 * fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121 * fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816 * chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309 * fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543 * fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127 * fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480 ## New Contributors * @Maseeek made their first contribution in pingdotgg/t3code#17530 * @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706 * @fixfon made their first contribution in pingdotgg/t3code#17766 * @id0Sch made their first contribution in pingdotgg/t3code#16143 * @raphaelpra made their first contribution in pingdotgg/t3code#15240 * @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475 * @arhammahajan made their first contribution in pingdotgg/t3code#16019 * @connwalk made their first contribution in pingdotgg/t3code#17499 * @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005 * @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938 * @wellorbetter made their first contribution in pingdotgg/t3code#14178 * @freddy-d made their first contribution in pingdotgg/t3code#16869 * @Furox-Art made their first contribution in pingdotgg/t3code#16838 * @RustedAperture made their first contribution in pingdotgg/t3code#16325 * @sheehanmunim made their first contribution in pingdotgg/t3code#17080 * @realhasanshoaib made their first contribution in pingdotgg/t3code#14543 * @whoisaldo made their first contribution in pingdotgg/t3code#16480 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
Problem
T3CODE_RESOURCE_MONITOR_PATH(and the desktop bootstrap'sresourceMonitorPath) is accepted as soon as the path exists. A directory satisfies that, and on Windows it also clears the POSIX exec-bit check because Node reports permissive synthetic modes (0o666/0o777). Pointing the override at the folder that contains the binary — an easy mistake — therefore resolves successfully, and the failure only surfaces later as an opaque spawn error from the telemetry client instead of naming the configured path.Expected behavior: an override that is not a file is rejected where it is validated, with the path in the error.
Change
resolvenow rejects a directory candidate next to the existing non-executable check and reports it through the sameResourceMonitorBinaryNotExecutableerror, which already carriespathandmode. The directory check runs on every platform; the exec-bit test stays POSIX-only for the same reason it was before.No startup policy changes.
resolveis only called when the telemetry client starts an attempt, and its failures map todegraded/unavailabletelemetry status, so the server keeps running. This PR only makes the bad path get named at resolution time instead of at spawn time.Scope and approval
Small, focused fix of an obvious validation bug in an already-shipped optional override, so it qualifies without a prior issue. Rebuilt against orchestrator V2 as asked in #12612 (comment).
The old PR also added an
envValidation.tsmodule, startup rejection for invalid values, and CLI plumbing forT3CODE_CODEX_LAUNCH_ARGS. V2 makes most of that unnecessary:tokenizeCliArgsnever throws, launch args are filtered through a whitelist before spawn, and the resource-monitor candidate chain already falls back instead of aborting. This PR keeps only the one defect that survives the rewrite, and touches no product policy.Verification
corepack pnpm exec vp test run src/resourceTelemetry/ResourceMonitorBinary.test.tsinapps/server:Tests 5 passed | 2 skipped (7). The two skips are the existingskipIf(windowsHost)POSIX chmod cases; the host here is Windows.ResourceMonitorBinary.ts(new test kept) fails exactly the new case and nothing else —resolvereturned the directory as the binary path.tsc --noEmitinapps/server: exit 0.vp fmt --checkon both changed files: clean.Agent harness: Qoder, driving the Furox-Art checkout.