v2.9.15

vercel/turborepov2.9.15May 26, 2026by github-actions[bot]

AI Summary

A major stability-focused release that removes numerous panic and unwrap calls throughout the codebase to prevent crashes. It introduces heap allocation profiling and adds a new Vite module federation example.

Key Highlights

  • Feat: Add heap allocation profiling
  • Fix: Harden OTEL endpoint validation
  • Fix: Include lockfile-changed packages in affected tasks
  • Docs: Add `with-vite-module-federation` example
  • Refactor: Remove `expect()` and `unwrap()` calls for better error handling

New Features

  • Add heap allocation profiling
  • Add `with-vite-module-federation` example

Full Release Notes

<!-- Release notes generated using configuration in .github/release.yml at v2.9.15 -->

## What's Changed
### Changelog
* release(turborepo): 2.9.14 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12805
* fix: Prune package.json workspaces by @anthonyshew in https://github.com/vercel/turborepo/pull/12808
* fix: Wait for process trees before task completion by @anthonyshew in https://github.com/vercel/turborepo/pull/12809
* release(turborepo): 2.9.15-canary.1 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12810
* ci: Sign macOS release binaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12811
* release(turborepo): 2.9.15-canary.2 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12812
* fix: Prevent cache archive symlink reads by @anthonyshew in https://github.com/vercel/turborepo/pull/12813
* release(turborepo): 2.9.15-canary.3 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12814
* fix: Avoid path-racy chmod during directory restore by @anthonyshew in https://github.com/vercel/turborepo/pull/12815
* fix: Prevent cache restore symlink race writes by @anthonyshew in https://github.com/vercel/turborepo/pull/12817
* chore: Deny Rust panic extraction by default by @anthonyshew in https://github.com/vercel/turborepo/pull/12818
* fix: Make structured log symlink defense race-safe by @anthonyshew in https://github.com/vercel/turborepo/pull/12821
* fix: Preserve Bun alias child packages by @anthonyshew in https://github.com/vercel/turborepo/pull/12822
* fix: Avoid UTF-8 panics at boundaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12823
* fix: Preserve non-UTF-8 Git path boundaries by @anthonyshew in https://github.com/vercel/turborepo/pull/12826
* fix: Create daemon dirs with private permissions by @anthonyshew in https://github.com/vercel/turborepo/pull/12827
* fix: Return Berry lockfile errors instead of panicking by @anthonyshew in https://github.com/vercel/turborepo/pull/12828
* fix: Isolate Corepack state in integration tests by @anthonyshew in https://github.com/vercel/turborepo/pull/12831
* ci: Use larger Windows runners for Rust tests by @anthonyshew in https://github.com/vercel/turborepo/pull/12832
* docs: Add `with-vite-module-federation` example by @gioboa in https://github.com/vercel/turborepo/pull/12794
* test: Run Rust tests without partitioning by @anthonyshew in https://github.com/vercel/turborepo/pull/12833
* chore: Remove `TaskHashTracker`-based `expect()` calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12836
* chore: Deduplicate hash canonicalization by @anthonyshew in https://github.com/vercel/turborepo/pull/12837
* fix: Prevent Windows process drain hangs by @anthonyshew in https://github.com/vercel/turborepo/pull/12838
* fix: Refactor execsync to execfilesync for Shell command built from environment values by @bjormgyg in https://github.com/vercel/turborepo/pull/12829
* test: Bound vt100 random quickcheck by @anthonyshew in https://github.com/vercel/turborepo/pull/12839
* fix: Validate daemon discovery responses by @anthonyshew in https://github.com/vercel/turborepo/pull/12840
* fix: Store `PackageGraph` root invariants by @anthonyshew in https://github.com/vercel/turborepo/pull/12841
* chore: Avoid engine graph node expects by @anthonyshew in https://github.com/vercel/turborepo/pull/12842
* test: Make Rust tests parallel-safe by @anthonyshew in https://github.com/vercel/turborepo/pull/12843
* fix: Avoid graph utility node lookup panics by @anthonyshew in https://github.com/vercel/turborepo/pull/12844
* fix: Avoid graph walker `expect()` calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12845
* fix: Remove fs panic extraction lints by @anthonyshew in https://github.com/vercel/turborepo/pull/12846
* fix: Remove fixed map panic extraction calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12847
* fix: Remove devtools WebSocket panics by @anthonyshew in https://github.com/vercel/turborepo/pull/12850
* fix: Remove json rewrite panic lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12848
* fix: Remove turborepo-types panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12849
* chore: Remove turborepo-hash build expect by @anthonyshew in https://github.com/vercel/turborepo/pull/12851
* fix: Remove napi panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12852
* fix: Avoid globwatch expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12853
* fix: Remove LSP expect callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12854
* fix: Remove scope panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12855
* fix: Remove task hash panic lints by @anthonyshew in https://github.com/vercel/turborepo/pull/12856
* fix: Remove frameworks panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12857
* fix: Remove microfrontends proxy expect lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12859
* fix: Avoid API client expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12858
* fix: Avoid task executor expect calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12860
* fix: Remove turbo-trace unwrap callsite by @anthonyshew in https://github.com/vercel/turborepo/pull/12863
* fix: Remove Vercel API mock expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12862
* fix: Remove vt100 expect lint allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12861
* fix: Remove turborepo-shim expect callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12864
* test: Deflake daemon existing process test by @anthonyshew in https://github.com/vercel/turborepo/pull/12865
* fix: Avoid repository NAPI unwrap calls by @anthonyshew in https://github.com/vercel/turborepo/pull/12866
* fix: Remove pidlock panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12867
* fix: Remove telemetry panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12868
* chore: Remove Rust re-export shims by @anthonyshew in https://github.com/vercel/turborepo/pull/12870
* fix: Remove turbo-json panic lint allows by @anthonyshew in https://github.com/vercel/turborepo/pull/12869
* fix: Remove `globwalk`'s `expect()` callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12871
* fix: Remove `turbopath`'s `expect()` callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12872
* test: Deflake Corepack prepare lock on Windows by @anthonyshew in https://github.com/vercel/turborepo/pull/12873
* fix: Remove signals panic callsites by @anthonyshew in https://github.com/vercel/turborepo/pull/12874
* fix: Remove `turbo-trace`'s `expect()` allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12876
* fix: Remove Vercel API mock unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12877
* fix: Remove task executor unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12878
* fix: Remove run summary expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12879
* fix: Remove microfrontends proxy unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12880
* fix: Remove api client unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12881
* fix: Remove globwalk unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12883
* fix: Remove UI `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12882
* fix: Remove microfrontends expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12885
* fix: Remove `boundaries`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12887
* fix: Remove `turborepo-process`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12888
* fix: Remove UI unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12889
* fix: Remove microfrontends unwrap allow by @anthonyshew in https://github.com/vercel/turborepo/pull/12890
* fix: Remove `turborepo-process`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12891
* fix: Remove scm expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12893
* fix: Remove auth unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12886
* fix: Remove `turbopath`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12884
* fix: Remove `auth`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12895
* fix: Remove wax unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12899
* fix: Remove scm unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12897
* fix: Remove `turborepo-boundaries`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12896
* fix: Remove daemon unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12898
* fix: Include lockfile-changed packages in affected tasks by @anthonyshew in https://github.com/vercel/turborepo/pull/12900
* fix: Remove `turborepo-wax`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12901
* fix: Remove `turborepo-filewatch`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12903
* fix: Remove `turborepo-cache`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12902
* fix: Remove `turborepo-daemon`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12904
* fix: Remove `turborepo-engine`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12906
* fix: Remove filewatch unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12907
* fix: Remove engine expect usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12908
* fix: Remove cache unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12909
* fix: Remove `turborepo-lockfiles` `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12910
* chore: Set pnpm minimum release age by @anthonyshew in https://github.com/vercel/turborepo/pull/12912
* fix: Remove `turborepo-lockfiles`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12911
* fix: Remove `turborepo-vt100`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12913
* release(turborepo): 2.9.15-canary.4 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12905
* fix: Remove `turborepo-lib`'s `unwrap()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12915
* fix: Remove `turborepo-lib`'s `expect()` usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12914
* fix: Remove shim test unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12917
* fix: Remove turbo json test unwrap allowance by @anthonyshew in https://github.com/vercel/turborepo/pull/12918
* fix: Remove run summary test unwrap usage by @anthonyshew in https://github.com/vercel/turborepo/pull/12916
* release(turborepo): 2.9.15-canary.5 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12919
* fix: Restore task completion semantics by @anthonyshew in https://github.com/vercel/turborepo/pull/12923
* fix: Preserve nested Bun workspace dependency versions by @anthonyshew in https://github.com/vercel/turborepo/pull/12924
* release(turborepo): 2.9.15-canary.6 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12925
* fix: Restore release PR auto-merge by @anthonyshew in https://github.com/vercel/turborepo/pull/12927
* perf: Index repo gitignore matchers by @anthonyshew in https://github.com/vercel/turborepo/pull/12928
* ci: Disable incremental Rust test builds by @anthonyshew in https://github.com/vercel/turborepo/pull/12929
* perf: Trim OpenTelemetry crate features by @anthonyshew in https://github.com/vercel/turborepo/pull/12930
* perf: Trim microfrontends proxy HTTP features by @anthonyshew in https://github.com/vercel/turborepo/pull/12931
* fix: Accept `experimentalCI` object config by @anthonyshew in https://github.com/vercel/turborepo/pull/12934
* release(turborepo): 2.9.15-canary.7 by @github-actions[bot] in https://github.com/vercel/turborepo/pull/12935
* fix: Restore a few internal invariant checks by @anthonyshew in https://github.com/vercel/turborepo/pull/12933
* fix: Improve profile tracing coverage by @anthonyshew in https://github.com/vercel/turborepo/pull/12936
* fix: Use build-scale OTel duration buckets by @anthonyshew in https://github.com/vercel/turborepo/pull/12939
* fix: Preserve pnpm injected peer package entries by @anthonyshew in https://github.com/vercel/turborepo/pull/12940
* feat: Add heap allocation profiling by @anthonyshew in https://github.com/vercel/turborepo/pull/12943
* release(turborepo): 2.9.15-canary.8 by @anthonyshew in https://github.com/vercel/turborepo/pull/12945
* docs: Correct attribute presence claims in turborepo-otel by @adityasingh2400 in https://github.com/vercel/turborepo/pull/12932
* chore(turbo-codemod): Remove duplicate "in" in transforms path comment by @mvanhorn in https://github.com/vercel/turborepo/pull/12948
* chore: Switch Geist font imports to npm geist package by @christopherkindl in https://github.com/vercel/turborepo/pull/12952
* fix: Respect root gitignore during prune by @anthonyshew in https://github.com/vercel/turborepo/pull/12953
* fix: Harden OTEL endpoint validation by @anthonyshew in https://github.com/vercel/turborepo/pull/12954

## New Contributors
* @gioboa made their first contribution in https://github.com/vercel/turborepo/pull/12794
* @bjormgyg made their first contribution in https://github.com/vercel/turborepo/pull/12829
* @adityasingh2400 made their first contribution in https://github.com/vercel/turborepo/pull/12932
* @mvanhorn made their first contribution in https://github.com/vercel/turborepo/pull/12948
* @christopherkindl made their first contribution in https://github.com/vercel/turborepo/pull/12952

**Full Changelog**: https://github.com/vercel/turborepo/compare/v2.9.14...v2.9.15