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