The lockfile recorded a directory package's children but not the specifiers the resolver read for them, so the frozen-lockfile check derived the children from the directory's manifest again and had to mirror every input axis of the resolver (pnpm/pnpm#17473 last). Each directory package's `packages:` entry now records `specifiers`: the children the resolver walked, as the hooked manifest declares them, before peer shadowing and catalog resolution, grouped as the snapshot groups them. Both CLIs write it through the resolver's own child derivation. The check compares the record with the current hooked manifest and then runs the snapshot checks as before, so a changed specifier is a change even while its locked resolution still satisfies it. An entry without the field is checked by the derived walk alone, and the next resolving install records it. Part of pnpm/tasks#228. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
pnpm v12 (pacquet)
The pnpm v12 CLI is implemented in Rust. pacquet is its
in-repository package name; the published CLI and executable are named pnpm.
pnpm v12 is the target for new feature development. The TypeScript pnpm v11
CLI under ../pnpm11/ is maintained for bug fixes. Bugs present in both
versions are fixed in both implementations. Bugs present in only one version
are fixed in that version. New features are not backported to v11.
See CONTRIBUTING.md for development setup, debugging, testing, and benchmarking.