Native pnpm registry server lands for Pacquet (
add6c79)
A new Rust pnpm-registry server replaces the Node/Verdaccio test mock, and the CI/benchmark workflows were updated to include the registry/** workspace. This is a foundational infra change that makes the Rust test stack self-contained and removes a heavy external dependency from Pacquet’s test setup.
Peer resolution now uses pnpm’s caching and pure-package fast paths (
f5d7723)
Pacquet’s peer resolver picked up pnpm’s peersCache and purePkgs behavior, so repeated walks can short-circuit instead of recomputing entire peer subtrees. The change also broadens test coverage around cycles, divergent peer scopes, and transitive peer handling, which reduces the risk of subtle resolution regressions.
Install can now no-op when node_modules is already current (
e549cd1)
pacquet install --frozen-lockfile now skips materialization entirely when the lockfile and modules metadata already match, and emits pnpm’s “Lockfile is up to date, resolution step is skipped” info log. That avoids unnecessary work on repeat installs and brings Pacquet closer to pnpm’s expected install behavior.
Pacquet now writes the GVS-derived virtual store path (
74a219e)
When global virtual store is enabled, Pacquet now records the externally visible <storeDir>/v11/links path in .modules.yaml and context logs instead of the project-local internal path. This fixes compatibility with pnpm’s own validation and prevents repeat installs from thinking the modules directory is stale.
Lockfile pruning now re-derives transitive optionality (
058f5f2)
The lockfile builder now runs a BFS to correct optional flags across transitive descendants, matching pnpm’s lockfile-pruner logic. This matters because packages reached through a later non-optional path were previously left marked optional, which could incorrectly hide build or fetch failures.
Dependency tree resolution now defers child realization (
3788a8b)
Pacquet switched dependency-tree children to a lazy realization model, expanding per-occurrence subtrees only when peer resolution actually needs them. That cuts eager recursion and aligns the tree builder with pnpm’s performance strategy for large or cyclic dependency graphs.
pack/publish gains --skip-manifest-obfuscation (
3b62f9d)
A new option lets users preserve the original packageManager field and publish lifecycle scripts in packed/published manifests while still stripping pnpm’s internal pnpm field. This is a public-facing behavior change for release workflows that need less manifest rewriting.
Other misc changes
pnpm deploynow skipsconfigDependenciesin nested deploy installs to avoid crashing when the install engine itself isn’t present (
6316e7b).- The integrated benchmark workflow no longer compares Pacquet against pnpm or self-compares on main, reducing wasted CI work (
b9de85d). - Fixed
virtualStoreDirreporting for global virtual store in logs and modules manifest tests (
74a219e). - Clarified the
minimumReleaseAge“loose mode” log wording and related docs (
572842a). - Large-workspace manifest reader tweak to limit manifest reads (
a456dc7). - Workspace/release housekeeping: pnpm/pacquet bumps and release metadata updates (
9a32073,
bcbc008,
f2a4d2c,
cdceebc).