Skip to content

fix: Prevent peerDependencies from overwriting concrete dependency specifiers#12004

Merged
anthonyshew merged 1 commit into
mainfrom
shew/fix-issue-12002
Feb 26, 2026
Merged

fix: Prevent peerDependencies from overwriting concrete dependency specifiers#12004
anthonyshew merged 1 commit into
mainfrom
shew/fix-issue-12002

Conversation

@anthonyshew

Copy link
Copy Markdown
Contributor

Summary

Fixes #12002

  • When a workspace package lists the same dependency in both devDependencies (or dependencies) and peerDependencies, the peer's broad specifier (e.g. "*") would overwrite the concrete specifier (e.g. "^11.0.0") in the external dependency map. This caused turbo prune to omit the package resolution from the pruned lockfile, breaking pnpm install --frozen-lockfile.
  • Switches BTreeMap::insert to BTreeMap::entry().or_insert_with() so the first-encountered specifier from dev/optional/regular dependencies is preserved and not clobbered by a later peerDependency entry.

How to test

  1. Use the new pnpm-peer-dev-overlap lockfile test fixture:
    cd lockfile-tests
    npx tsx check-lockfiles.ts --fixture pnpm-peer-dev-overlap --turbo-path ../target/debug/turbo
    
  2. Or manually reproduce the original issue:
    git clone https://github.com/kevva/turbo-prune-pnpm
    cd turbo-prune-pnpm && pnpm install
    turbo prune app-a --docker
    cd out/json && pnpm install --frozen-lockfile  # should succeed
    

…ecifiers

When a workspace package lists the same dependency in both
devDependencies (or dependencies) and peerDependencies, the
peerDependency's broad specifier (e.g. "*") would overwrite the
concrete specifier (e.g. "^11.0.0") in the external dependency map.
This caused turbo prune to omit the package resolution from the pruned
lockfile, breaking pnpm install --frozen-lockfile.

Closes #12002
@anthonyshew anthonyshew requested a review from a team as a code owner February 26, 2026 14:05
@anthonyshew anthonyshew requested review from tknickman and removed request for a team February 26, 2026 14:05
@vercel

vercel Bot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-designsystem-docs Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-gatsby-web Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-kitchensink-blog Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-nonmonorepo Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-svelte-web Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-tailwind-web Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
examples-vite-web Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
turbo-site Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
turborepo-agents Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm
turborepo-test-coverage Building Building Preview, Comment, Open in v0 Feb 26, 2026 2:05pm

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Metric Coverage
Lines 75.06%
Functions 46.83%
Branches 0.00%

View full report

@anthonyshew anthonyshew enabled auto-merge (squash) February 26, 2026 14:26
@anthonyshew anthonyshew merged commit a038409 into main Feb 26, 2026
172 of 177 checks passed
@anthonyshew anthonyshew deleted the shew/fix-issue-12002 branch February 26, 2026 14:34
github-actions Bot added a commit that referenced this pull request Feb 26, 2026
## Release v2.8.12-canary.2

Versioned docs: https://v2-8-12-canary-2.turborepo.dev

### Changes

- release(turborepo): 2.8.12-canary.1 (#12001) (`31529aa`)
- chore: Upgrade axum 0.7 to 0.8, deduplicate tower/tower-http (#12003)
(`282407a`)
- fix: Prevent peerDependencies from overwriting concrete dependency
specifiers (#12004) (`a038409`)
- ci: Trigger prysk integration tests via `cargo nextest` (#11999)
(`2053ede`)

---------

Co-authored-by: Turbobot <turbobot@vercel.com>
github-actions Bot added a commit that referenced this pull request Feb 27, 2026
## Release v2.8.12-canary.3

Versioned docs: https://v2-8-12-canary-3.turborepo.dev

### Changes

- fix: Prevent peerDependencies from overwriting concrete dependency
specifiers (#12004) (`a038409`)
- ci: Trigger prysk integration tests via `cargo nextest` (#11999)
(`2053ede`)
- release(turborepo): 2.8.12-canary.2 (#12005) (`dccfdf0`)
- fix: Resolve correct nested package version in bun lockfile pruning
(#12008) (`95dff45`)
- refactor: Replace shell-based fixture setup with pure Rust (#12006)
(`a743e38`)
- fix: Resolve all lockfile pruning test failures (#12009) (`21dcaed`)
- perf: Extract query module into turborepo-query crate (#12007)
(`0604379`)
- refactor: Migrate dry-json prysk tests to Rust + insta snapshots
(#12010) (`2606f3f`)
- perf: Deduplicate petgraph, fixedbitset, and dashmap (#12011)
(`9b11ef6`)
- refactor: Migrate persistent-dependencies and task-dependencies to
Rust + insta (#12012) (`9aab7b5`)
- test: Add lockfile-tests fixture for issue #12013 (#12014) (`bae81f7`)
- perf: Remove libgit2/git2 dependency, replace with gix-object (#12015)
(`fbf50e5`)
- refactor: Migrate daemon, jsonc, query, edit-turbo-json tests to Rust
(#12016) (`bf730d5`)
- perf: Remove async-graphql from turborepo-lib (#12017) (`7c8a4a0`)
- refactor: Migrate inference and run-logging tests to Rust (#12018)
(`dc4f922`)
- refactor: Migrate run-caching and strict-env-vars tests to Rust
(#12020) (`c07645d`)
- fix: Mark lockfile-aware-caching/bun prysk test as flaky (#12021)
(`c60f0c1`)
- fix: Add nextest retries for flaky tests (#12027) (`9d90270`)
- refactor: Migrate prune and run-summary tests to Rust (#12022)
(`329bdb5`)
- ci: Increase Rust test partitions from 4 to 10 (#12028) (`0c1bd47`)
- fix: Add nextest retries for flaky prysk tests (#12030) (`9b66431`)
- ci: Use larger runners for macOS Rust tests (#12029) (`9479a54`)
- fix: Add nextest retries for flaky
prune_test::test_prune_composable_config (#12032) (`b47e099`)
- fix: Suppress npm upgrade notices in Rust integration tests (#12033)
(`f698b04`)
- ci: Disable flaky Rust unit tests from release pipeline (#12034)
(`829b351`)

---------

Co-authored-by: Turbobot <turbobot@vercel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

turbo prune --docker produces broken pnpm lockfile

1 participant