Pantry 0.11.55 produces different workspace pantry.lock contents on Linux and macOS because host-specific companion dependencies are lost during workspace lock regeneration. This leaves an otherwise unchanged checkout dirty and prevents a stable cross-platform frozen installation.
Observed with the official 0.11.55 binaries reporting 4fa8b3a and Bun 1.4.1, on stacksjs/stacks at 916b3d2. The Darwin binary SHA-256 was verified against release-manifest.json.
Reproduction:
- Install the Stacks workspace on Linux using Pantry 0.11.55. The generated lock includes nine Linux native records listed below.
- Start a fresh copy of the same revision on macOS arm64, replace pantry.lock with that generated Linux lock, and run the same Pantry version with Bun 1.4.1 selected in PATH.
- The macOS install drops exactly those nine records. Every common package record and workspace entry stays identical; bun.lock remains byte-identical.
- A repeated frozen install accepts that Darwin-generated lock, while the original committed lock fails as out of date. This same-host stability does not provide cross-platform stability.
Removed Linux records: gnome.org/libxml2@2.13.9, gnu.org/binutils@2.46.0, gnu.org/gcc/libstdcxx@14.3.0, gnu.org/gettext@0.21.1, gnu.org/gmp@6.3.0, gnu.org/libiconv@1.19.0, gnu.org/mpc@1.3.1, gnu.org/mpfr@4.2.2, tukaani.org/xz@5.8.2.
Pinned-source investigation: workspace.zig starts a new empty lock. Companion merging then records successful current install results, while pipeline.zig filters OS-prefixed specs against the current host. Foreign-platform pins removed by regeneration cannot be restored by that host-only result set.
Expected: separate the cross-platform dependency graph recorded in the lock from the host-specific installation plan. Add Linux/Darwin regeneration and frozen-install regression coverage while still allowing obsolete dependency pins to be removed. Copying one platform lock over the other, ignoring the file, or resetting it after installation does not fix the problem.
Evidence and downstream tracking: https://github.com/stacksjs/stacks/issues/2533 and https://github.com/stacksjs/stacks/actions/runs/34289135740/artifacts/10080721269 (Linux source patch, 30-day retention). Full local logs, release manifest/hash, generated Linux/Darwin locks, and semantic comparisons are retained in the downstream investigation. The local installer also reports a separate post-database migration error despite exiting zero, so these observations establish lock behavior, not a successful full application setup.