fix: Decouple graceful shutdown tests from the shell commands example - #13799
Merged
Merged
Conversation
The Rust `graceful_shutdown_test` suite copied `examples/with-shell-commands` into a tempdir and ran `turbo run dev` against it. #13791 bumped that example's `packageManager` pin to `pnpm@11.22.0`, which requires Node >= 22.13, while the `rust_test` CI shards pin Node.js 18.20.2. Every `pnpm run dev` in those tests then died with `TypeError: Invalid host defined options`, taking all eight unix tests down on the Ubuntu and macOS shards. Windows stayed green because the module is `#[cfg(unix)]`. Move the suite onto a dedicated `graceful_shutdown` integration fixture. The fixture's package manager pin is now owned by the test suite instead of an example that gets version-bumped on its own cadence, and `turborepo-tests/integration/**` is already a declared input of the Rust test task, so changes to it invalidate the cached task -- `examples/**` never was. Also make a failed task launch diagnosable. Both harnesses now poll the child while waiting for a readiness marker and report turbo's output when the run exits early or the wait times out, instead of a bare "timed out waiting for .../ready" 15 seconds later with the process output discarded. Co-Authored-By: Anthony Shew <35677084+anthonyshew@users.noreply.github.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
github-actions Bot
added a commit
that referenced
this pull request
Aug 25, 2026
## Release v2.10.12 > [!CAUTION] > Versioned docs aliasing FAILED. [View logs](https://github.com/vercel/turborepo/actions/runs/32882264217) ### Changes - chore: Release Turborepo 2.10.11 (#13765) (`1fb1e86`) - feat: Refresh documentation social cards (#13764) (`510777b`) - fix: Preserve showcase logo sizes (#13766) (`b03ec9d`) - fix: Refine mobile homepage interactions (#13767) (`a253dce`) - fix: Align homepage KPIs to the right (#13769) (`373fbd3`) - fix: Prevent homepage KPI overflow (#13770) (`fc02d72`) - chore: Update Geistdocs to 1.20.4 (#13771) (`0689ad9`) - perf: Skip Unused Workspace Config Stats (#13746) (`5503fde`) - chore: Update with-solid example (#13752) (`43c555d`) - chore: Update with-tailwind example (#13762) (`c436362`) - perf: Stream dry-run JSON output (#13760) (`8138ce0`) - chore: Update with-ultracite example (#13772) (`37be819`) - perf: Merge same-prefix tree-wildcard globs into one directory walk (#13763) (`59d4901`) - chore: Update with-svelte example (#13118) (`bebcfc8`) - chore: Add unified agent control plane (#13757) (`695a172`) - fix: Remove incremental task caching (#13773) (`3d69e42`) - chore: Rename agents app to factory (#13774) (`0a01c2d`) - chore: Update oxlint and oxfmt (#13777) (`9088245`) - feat: Add security.txt endpoint (#13778) (`5f9260b`) - feat: Redesign factory control plane (#13775) (`ffd06d4`) - perf: Replace regex captures with hand-written parsers in berry lockfile identifiers (#13776) (`00e9f66`) - chore: Upgrade the factory eve agent to 0.39.3 (#13783) (`c4fc5c8`) - chore: Update with-rsbuild-module-federation example (#13786) (`45b1257`) - perf: Index Berry lockfile resolution overrides by dependency name (#13787) (`e89eddd`) - chore: Update remote cache action to v1.1.0 (#13789) (`56162b8`) - docs: Fix reference links and validation (#13784) (`0423d70`) - feat: Add SSH command affordance for factory sandboxes (#13779) (`0cfccdd`) - fix: Show invalid affected task glob (#13793) (`ef1ef92`) - perf: Skip unused repository indexing for package listings (#13792) (`acd5ae5`) - feat: Rebuild the factory image on every merge to main (#13781) (`1c165b3`) - chore: Add full-page terminal SSH sessions to Factory sandbox inventory (#13780) (`d640c2e`) - chore: Update with-shell-commands example (#13791) (`476e382`) - chore: Allow SSH terminal for completed-run sandboxes in Factory (#13782) (`067dfba`) - fix: Decouple graceful shutdown tests from the shell commands example (#13799) (`72fac33`) - feat: Start ad-hoc factory work from the operator page (#13798) (`b9d13ca`) - chore: Update with-solid example (#13797) (`d412981`) - fix: Rebuild factory images without custom workflows (#13801) (`0c54a80`) - feat: Add factory navigation (#13802) (`092ee6d`) - refactor: Migrate Factory styles to Tailwind (#13803) (`7fe373b`) - feat: Add durable Factory workspaces (#13804) (`ccd79d3`) - feat: Stream Factory sandbox as terminal (#13807) (`33d8b24`) - fix: Restore Factory workspace creation (#13812) (`fd72cca`) - fix: Update Factory session network policy (#13814) (`c579fec`) - fix: Improve Factory terminal line spacing (#13815) (`a88e39b`) - fix: Install Factory publishing skill (#13817) (`7b8cb14`) - chore: Route Factory publishing through Eve (#13816) (`e05b81c`) - feat: Standardize Factory meta titles to Turborepo suffix (#13819) (`fd593b5`) - perf: Skip Factory chat verification (#13820) (`39137a6`) - fix: Restore Factory workspaces (#13823) (`0afd4b2`) - docs: Fix inconsistent Yarn command in basic example (#13825) (`3dd49d1`) - chore: Update non-monorepo example (#13808) (`d2a673f`) - perf: Batch package detail queries (#13809) (`331183e`) - chore: Update basic example (#13824) (`f06836d`) - fix: Include virtual tasks in affected query (#13805) (`89a9b78`) - fix: Add workspace approval controls (#13827) (`02dfd21`) - fix: Prevent chat SSH command overflow (#13828) (`d9eaff5`) - fix: Update Factory pull request branches (#13831) (`b670754`) - chore: Add operator chat model selector (#13833) (`bb2fcb3`) - fix: Move model selector to workspace creation (#13835) (`72805d7`) - chore: Skip redundant Factory PR approval (#13837) (`bbe5406`) - chore: Use geistdocs 1.23.1 (#13834) (`3787c06`) - chore: Handle feedback on Factory pull requests (#13836) (`a76330b`) - fix: Escape ampersands in RSS feed enclosure URLs (#13839) (`7107f26`) - chore: Add automatic issue handling (#13840) (`e1674e4`) - chore: Alert Slack for low-confidence issues (#13841) (`f153cda`) - feat: Require high confidence for issue fixes (#13842) (`c97782b`) - fix: Run pnpm directly on Windows (#13843) (`9d2b03b`) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew
pushed a commit
that referenced
this pull request
Aug 27, 2026
## Release v2.10.13-canary.1 > [!CAUTION] > Versioned docs aliasing FAILED. [View logs](https://github.com/vercel/turborepo/actions/runs/33018929115) ### Changes - chore: Release Turborepo 2.10.11-canary.4 (#13759) (`9f94a7d`) - feat: Expand performance agent toolbox (#13761) (`f924510`) - docs: Redesign Turborepo homepage (#13702) (`09bf969`) - fix: Tolerate transient input files (#13734) (`3226457`) - chore: Release Turborepo 2.10.11 (#13765) (`1fb1e86`) - feat: Refresh documentation social cards (#13764) (`510777b`) - fix: Preserve showcase logo sizes (#13766) (`b03ec9d`) - fix: Refine mobile homepage interactions (#13767) (`a253dce`) - fix: Align homepage KPIs to the right (#13769) (`373fbd3`) - fix: Prevent homepage KPI overflow (#13770) (`fc02d72`) - chore: Update Geistdocs to 1.20.4 (#13771) (`0689ad9`) - perf: Skip Unused Workspace Config Stats (#13746) (`5503fde`) - chore: Update with-solid example (#13752) (`43c555d`) - chore: Update with-tailwind example (#13762) (`c436362`) - perf: Stream dry-run JSON output (#13760) (`8138ce0`) - chore: Update with-ultracite example (#13772) (`37be819`) - perf: Merge same-prefix tree-wildcard globs into one directory walk (#13763) (`59d4901`) - chore: Update with-svelte example (#13118) (`bebcfc8`) - chore: Add unified agent control plane (#13757) (`695a172`) - fix: Remove incremental task caching (#13773) (`3d69e42`) - chore: Rename agents app to factory (#13774) (`0a01c2d`) - chore: Update oxlint and oxfmt (#13777) (`9088245`) - feat: Add security.txt endpoint (#13778) (`5f9260b`) - feat: Redesign factory control plane (#13775) (`ffd06d4`) - perf: Replace regex captures with hand-written parsers in berry lockfile identifiers (#13776) (`00e9f66`) - chore: Upgrade the factory eve agent to 0.39.3 (#13783) (`c4fc5c8`) - chore: Update with-rsbuild-module-federation example (#13786) (`45b1257`) - perf: Index Berry lockfile resolution overrides by dependency name (#13787) (`e89eddd`) - chore: Update remote cache action to v1.1.0 (#13789) (`56162b8`) - docs: Fix reference links and validation (#13784) (`0423d70`) - feat: Add SSH command affordance for factory sandboxes (#13779) (`0cfccdd`) - fix: Show invalid affected task glob (#13793) (`ef1ef92`) - perf: Skip unused repository indexing for package listings (#13792) (`acd5ae5`) - feat: Rebuild the factory image on every merge to main (#13781) (`1c165b3`) - chore: Add full-page terminal SSH sessions to Factory sandbox inventory (#13780) (`d640c2e`) - chore: Update with-shell-commands example (#13791) (`476e382`) - chore: Allow SSH terminal for completed-run sandboxes in Factory (#13782) (`067dfba`) - fix: Decouple graceful shutdown tests from the shell commands example (#13799) (`72fac33`) - feat: Start ad-hoc factory work from the operator page (#13798) (`b9d13ca`) - chore: Update with-solid example (#13797) (`d412981`) - fix: Rebuild factory images without custom workflows (#13801) (`0c54a80`) - feat: Add factory navigation (#13802) (`092ee6d`) - refactor: Migrate Factory styles to Tailwind (#13803) (`7fe373b`) - feat: Add durable Factory workspaces (#13804) (`ccd79d3`) - feat: Stream Factory sandbox as terminal (#13807) (`33d8b24`) - fix: Restore Factory workspace creation (#13812) (`fd72cca`) - fix: Update Factory session network policy (#13814) (`c579fec`) - fix: Improve Factory terminal line spacing (#13815) (`a88e39b`) - fix: Install Factory publishing skill (#13817) (`7b8cb14`) - chore: Route Factory publishing through Eve (#13816) (`e05b81c`) - feat: Standardize Factory meta titles to Turborepo suffix (#13819) (`fd593b5`) - perf: Skip Factory chat verification (#13820) (`39137a6`) - fix: Restore Factory workspaces (#13823) (`0afd4b2`) - docs: Fix inconsistent Yarn command in basic example (#13825) (`3dd49d1`) - chore: Update non-monorepo example (#13808) (`d2a673f`) - perf: Batch package detail queries (#13809) (`331183e`) - chore: Update basic example (#13824) (`f06836d`) - fix: Include virtual tasks in affected query (#13805) (`89a9b78`) - fix: Add workspace approval controls (#13827) (`02dfd21`) - fix: Prevent chat SSH command overflow (#13828) (`d9eaff5`) - fix: Update Factory pull request branches (#13831) (`b670754`) - chore: Add operator chat model selector (#13833) (`bb2fcb3`) - fix: Move model selector to workspace creation (#13835) (`72805d7`) - chore: Skip redundant Factory PR approval (#13837) (`bbe5406`) - chore: Use geistdocs 1.23.1 (#13834) (`3787c06`) - chore: Handle feedback on Factory pull requests (#13836) (`a76330b`) - fix: Escape ampersands in RSS feed enclosure URLs (#13839) (`7107f26`) - chore: Add automatic issue handling (#13840) (`e1674e4`) - chore: Alert Slack for low-confidence issues (#13841) (`f153cda`) - feat: Require high confidence for issue fixes (#13842) (`c97782b`) - fix: Run pnpm directly on Windows (#13843) (`9d2b03b`) - chore: Release Turborepo 2.10.12 (#13844) (`32748f5`) - fix: Remove unsupported remote cache environment variable (#13845) (`b4c2eed`) - fix: Copy TUI selections locally over SSH (#13847) (`03df632`) - feat: Use uv workspace metadata (#13848) (`fa1ca7d`) - feat: Support Python virtual environments (#13849) (`7f66dbd`) - fix: Scope uv lockfile affectedness (#13850) (`1e074f3`) - test: Isolate uv prune configuration (#13851) (`9f2fd33`) - fix: Explain disabled uv task caching (#13852) (`0f59d11`) - fix: Explain uv identity probe failures (#13853) (`eabe73a`) - fix: Explain uncached Cargo library builds (#13855) (`35ce2fa`) - fix: Explain disabled Cargo task caching (#13854) (`39821f6`) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rust tests have been red on
mainsince #13791. All eight#[cfg(unix)]tests incrates/turborepo/tests/graceful_shutdown_test.rsfail on the Ubuntu and macOS shards; Windows stays green because the module is Unix-only.Root cause. The suite copied
examples/with-shell-commandsinto a tempdir and ranturbo run devagainst it. #13791 bumped that example's pin topackageManager: pnpm@11.22.0, and pnpm 11 declaresengines.node: >=22.13— but therust_testjob pins Node.js 18.20.2 (a "pin it for now" workaround from #8236, back in 2024). Every task launch died before writing its readiness marker:Seven of the eight tests then reported only
timed out waiting for /tmp/.tmpXXXX/apps/app-a/ready, with turbo's output thrown away.Changes
graceful_shutdownintegration fixture. The suite is the only Rust test that reached intoexamples/, and it was the wrong place to reach: examples are version-bumped on their own cadence, andexamples/**is not a declared input of theturborepo-crates#testtask, so an example bump could also leave a stale cached test result.turborepo-tests/integration/**already is a declared input, and the fixture'spackageManagerpin (pnpm@10.28.0, matching the existingtuifixture) is now owned by the test suite.ChildGuardandPtyTurbonow poll the child while waiting for a readiness marker. If turbo exits early, or the wait times out, the panic carries turbo's captured output/pty transcript. On the simulated failure this turns a 15s opaque timeout into a sub-second failure that names the cause.AGENTS.md: record the Node 18.20.2 floor for fixture package-manager pins, and that Rust tests read fixtures, not examples.I left the Node 18.20.2 pin alone deliberately. Other fixtures pin
pnpm@7.25.1,yarn@3.3.0, andnpm@8.0.0; raising the shards' Node version to unpin one fixture would put all of those at risk in the same change.Validation
cargo test -p turbo --test graceful_shutdown_test— 8 passed (was 8 failing before the change, reproduced locally).turbo exited before .../ready was createdplus theELIFECYCLEoutput, for the piped and pty harnesses alike.cargo fmt --check,cargo clippy -p turbo --features rustls-tls --all-targets -- -D warnings,turbo run format check:toml— clean.🤖 Generated with Claude Code