fix(ssh): report remote package installation failures accurately - #10088
Conversation
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused SSH error-handling fix that preserves npm diagnostics and reports remote package-installation failures instead of misclassifying them as missing executables. The production logic is small, existing successful paths remain unchanged, and the relevant failure modes are covered by regression tests. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: 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. |
The new pingdotgg#10088 install-failure tests spawn with extendEnv:false, so $HOME is unset and the remote runner script dies under set -u. Made with grok-4.6
## What's Changed * fix(server): keep Homebrew mise shims manual-only by @juliusmarminge in pingdotgg/t3code#10085 * fix(ssh): report remote package installation failures accurately by @juliusmarminge in pingdotgg/t3code#10088 * fix(web): keep bulk thread deletion going after failures by @m-de-graaff in pingdotgg/t3code#4615 * fix(web): scale agent spawn rows with interface font by @juliusmarminge in pingdotgg/t3code#10092 * fix(web): prevent sidebar tooltip title clipping by @UtkarshUsername in pingdotgg/t3code#10086 * fix(web): keep the composer expanded until the thread can scroll by @t3dotgg in pingdotgg/t3code#9965 * fix(web): preserve original mention text in the composer by @juliusmarminge in pingdotgg/t3code#10100 ## New Contributors * @m-de-graaff made their first contribution in pingdotgg/t3code#4615 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260905.1286...v0.0.39-nightly.20260905.1287 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260905.1287
Related #10084.
When a remote package installation failed with
ETARGET, the SSH runner discarded its exit status and claimed that installation succeeded but needed a C compiler. A failed installer that printed an executable path could even proceed to launch it.Check the installer's exit status before accepting its stdout. Keep npm's original stderr and report installation failure without guessing its cause. The existing zero-exit/no-executable compiler advice remains intact, as do package versions, installer arguments, retries, timeouts, Node overrides and direct CLI execution.
Verification
npxandnpm execpaths cover ETARGET, another nonzero error, failure with a valid path on stdout, zero-exit/no-executable, successful install, an existing CLI and a Node script override. Existing PID, graceful shutdown and restart controls pass.The tests execute the production-generated script through real
/bin/sh, using owned synthetic installer executables and no registry access. They reproduce the diagnostic boundary, not the original package-publication timing, remote Node22/npm11 environment, SSH desktop dialog or successful reconnect. No version fallback or publication change is included. Screenshots do not apply to this shell-only fix. All current-head executed CI, Macroscope correctness, Effect Service Conventions and approvability checks pass. No unresolved review threads remain. Cursor review is paused at the team spending limit; CodeRabbit automatic reviews are disabled. Final merge review is pending.Prepared by GPT 6 Astra via Codex in T3 Code.
Note
Fix
require_installed_t3_clito report package-manager failures in SSH runnerrequire_installed_t3_clishell helper in tunnel.ts now checks the installer command's exit status. When the package-manager command fails, it prints an installation failure message with the package spec and exits with status 1 instead of silently proceeding.Macroscope summarized 4e1843e.