Skip to content

perf: close the warm-resolve, symlink-churn, and download-concurrency gaps#12329

Merged
zkochan merged 5 commits into
mainfrom
reg-met-opt
Jun 11, 2026
Merged

perf: close the warm-resolve, symlink-churn, and download-concurrency gaps#12329
zkochan merged 5 commits into
mainfrom
reg-met-opt

Conversation

@zkochan

@zkochan zkochan commented Jun 11, 2026

Copy link
Copy Markdown
Member

Motivation

The vlt.sh benchmarks (2026-06-11 run, pacquet 0.11.3) show pacquet several times slower than the fastest package managers in the warm-metadata fresh-resolve cells (cache: 3.9–8.1x), the cold-cache frozen-install cells (lockfile: up to 10x on vue), and clean. Profiling the babylon and vue fixtures locally (macOS time profiles of the warm fresh resolve and the install tail) surfaced three independent causes, fixed here.

Changes

1. Deprecation probing without manifest hydration (pacquet)

With minimumReleaseAge active (the default), every range pick runs filter_pkg_metadata_by_publish_date, and any dist-tag pointing outside the maturity cutoff (next, beta, canary, a too-fresh latest) repopulates by scanning all candidates and reading each candidate's deprecated flag. Each read hydrated the full version manifest — a complete serde_json parse including the flattened catch-all map. On babylon's warm fresh resolve this was the single largest CPU consumer (~10 thread-seconds, all on the resolve task's critical path).

PackageVersions::is_deprecated now answers from the raw fragment (substring pre-check, then a single-field deserialize with the same normalization as PackageVersion::deprecated), the tag-repopulation loop parses candidate versions once per filter call (mirroring the parsedSemverCache in pnpm's filterPkgMetadataByPublishDate), and the deprecated-pick fallback uses the probe instead of hydrating every version.

babylon warm fresh resolve: resolve_workspace 7.5s → 2.6s.

2. Relative-symlink up-to-date check (pacquet)

force_symlink_dir joined an existing link's relative contents onto the link parent and compared the result verbatim against the wanted target. Virtual-store links contain .. segments (../../<pkg>/node_modules/<name>), so the joined path never compared equal and every up-to-date symlink was unlinked and recreated. Node's path.relative — which upstream symlink-dir's isExistingSymlinkUpToDate builds on — resolves its arguments, so pnpm treats those links as current. Both sides now pass through lexical_normalize. The babylon install tail was dominated by exactly this unlink+symlink churn.

babylon warm install: 6.8s → 4.7s; warm frozen install: 4.2s → 2.3s.

3. Default network concurrency floor 16 → 64 (pnpm + pacquet)

The default was min(64, max(workers * 3, 16)). Downloads are I/O-bound, not CPU-bound: on a 4-vCPU CI runner the formula yields 16 concurrent requests, so a low-latency registry drains 600–1300-tarball installs 16 at a time while staying unsaturated — a large share of the cold-cell (lockfile/clean) gap on the benchmark runners. The default is now min(96, max(workers * 3, 64)); the networkConcurrency setting still overrides it. Applied to @pnpm/installing.package-requester, the lockfile-resolution verifier fan-out that mirrors its floor, and the same two spots in pacquet. Changeset included (minor). This is a user-visible defaults change on both stacks — flagging it explicitly for review.

Local results (M-series macOS, vlt fixtures, isolated store/cache)

cell before after
vue cache 1159 ms 479 ms
vue cache+lockfile 621 ms 392 ms
vue no-op install 48 ms 41 ms
babylon cache ~8.8 s 4.75 s
babylon cache+lockfile ~4.2 s 2.27 s

vue's warm cells are now ahead of every competitor measured locally; babylon's cache cell closed from ~2.5x behind the leader to ~1.35x (the remainder is the per-file store-integrity verify and per-file linking that the pnpm store contract requires).

Validation

  • cargo nextest: registry, resolving-npm-resolver, resolving-deps-resolver, lockfile-verification, network, fs, tarball, package-manager, cli — 1300+ tests, all green; new unit tests cover the deprecation probe (string/bool/empty/corrupt shapes, nested-key false positives) and cross-parent relative-symlink reuse (fails without the fix).
  • Lockfile stability: --lockfile-only output is byte-identical before/after on vue; on babylon the resolved package-version sets are identical across 6 runs (3 per binary). The babylon lockfile does flap between runs in the peer-suffix shape of webpack-dev-server@5.2.2 ((bufferutil@4.1.0)(utf-8-validate@5.0.10) appearing/disappearing) — this is pre-existing nondeterminism reproducible with the unmodified binary against itself, in the optional-peer area; worth a separate issue.
  • Pre-push checks (fmt, taplo, cargo doc -D warnings, dylint) pass; eslint (root config) and tsgo --build pass for the two touched TS packages.

Written by an agent (Claude Code, claude-fable-5).

Summary by CodeRabbit

  • New Features

    • Added a lazy package deprecation probe and public method to detect deprecated versions during resolution.
  • Performance

    • Increased default network request concurrency (new floor/cap: 64–96) for faster installs.
    • Raised lockfile verification concurrency limits.
  • Improvements

    • Improved symlink handling to correctly normalize relative paths.
  • Tests

    • Added tests for deprecation probing, dist-tag selection, symlink reuse, and concurrency bounds.
  • Chores

    • CI: free up runner disk space before tests to reduce build failures.

Also in this PR: CI disk-space fix

The Lint and Test (ubuntu-latest) job was failing on main and on PR branches with the linker dying mid-build (No space left on device, or ld terminated with signal 7 [Bus error] — a SIGBUS on the linker's mmap'd output when the disk fills). The job builds the workspace twice over (clippy --all-targets + the nextest build) and the combined debug artifacts no longer fit on the hosted runner. Added a Linux-only step that removes the preinstalled .NET/Android/GHC/CodeQL toolchains (~25 GB) before compiling. The TypeScript test workflow hit the same wall on this PR (the runner worker itself died with ENOSPC mid-sweep — touching package-requester makes the affected-packages scope near-total, on top of the pnpr Rust build), so test.yml got the same cleanup step.

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Socket cap below concurrency 🐞 Bug ➹ Performance
Description
When opts.networkConcurrency is unset, createPackageRequester() now defaults to 64–96 concurrent
requests, but the undici dispatcher still uses its default 50-connection limit because maxSockets
is only derived when networkConcurrency is explicitly provided. This silently caps effective
parallelism below the new floor and adds unnecessary queuing (especially noticeable on cold
installs).
Code

installing/package-requester/src/packageRequester.ts[R97-104]

+  // Downloads are I/O-bound, not CPU-bound: a low-latency registry only
+  // saturates with enough requests in flight, so the floor matters more
+  // than the per-core scaling — a CPU-derived floor left 4-core CI
+  // runners draining multi-hundred-tarball installs 16 at a time.
+  const networkConcurrency = opts.networkConcurrency ?? Math.min(96, Math.max(calcMaxWorkers() * 3, 64))
 const requestsQueue = new PQueue({
   concurrency: networkConcurrency,
 })
Evidence
The requester now defaults to Math.min(96, Math.max(calcMaxWorkers() * 3, 64)) when
opts.networkConcurrency is undefined, but maxSockets remains undefined in the common case, so
undici’s global dispatcher uses DEFAULT_MAX_SOCKETS = 50, limiting actual concurrent connections
below the new default concurrency floor.

installing/package-requester/src/packageRequester.ts[97-104]
store/connection-manager/src/createNewStoreController.ts[109-114]
network/fetch/src/dispatcher.ts[12-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`createPackageRequester()` now computes a higher default `networkConcurrency` (floor 64) when the option is unset, but the fetch layer’s undici dispatcher still defaults to `DEFAULT_MAX_SOCKETS = 50` unless `maxSockets` is explicitly configured. This means the higher default concurrency often cannot be realized.
### Issue Context
- `createPackageRequester()` computes `networkConcurrency` locally when `opts.networkConcurrency` is `undefined`.
- `createNewStoreController()` only derives `maxSockets` from `opts.networkConcurrency` when it’s explicitly set.
- `network/fetch`’s global dispatcher uses 50 connections by default.
### Fix Focus Areas
- store/connection-manager/src/createNewStoreController.ts[110-114]
- installing/package-requester/src/packageRequester.ts[97-104]
- network/fetch/src/dispatcher.ts[12-25]
### Implementation guidance
- Compute the *effective* default `networkConcurrency` once (shared helper or config-level defaulting) and pass it through so both:
- `createPackageRequester({ networkConcurrency })` and
- `createClient({ maxSockets })`
use consistent values.
- Ensure `maxSockets` is at least the effective `networkConcurrency` (or whatever multiplier is intended, currently `* 3`) even when the user does not set `networkConcurrency` explicitly.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Cached parse masks deprecation 🐞 Bug ≡ Correctness
Description
PackageVersions::is_deprecated() returns false whenever the slot has any cached hydration
result, including Some(None) from a prior decode failure, so it never probes the raw fragment for
a deprecated field. This can misclassify a version as non-deprecated in publish-date dist-tag
repopulation / deprecated-fallback when the full manifest decode failed earlier but the raw fragment
still contains a valid deprecated value.
Code

pacquet/crates/registry/src/package_versions.rs[R168-172]

+    pub fn is_deprecated(&self, version: &str) -> bool {
+        let Some(slot) = self.slots.get(version) else { return false };
+        if let Some(parsed) = slot.parsed.get() {
+            return parsed.as_ref().is_some_and(|manifest| manifest.deprecated.is_some());
+        }
Evidence
hydrate() caches decode failures as Some(None), and is_deprecated() currently treats any
cached value (including Some(None)) as definitive and returns false without inspecting the raw
JSON. The publish-date filter relies on is_deprecated() while intentionally avoiding hydration, so
this cached-failure short-circuit can change candidate deprecation classification compared to
raw-fragment probing.

pacquet/crates/registry/src/package_versions.rs[44-49]
pacquet/crates/registry/src/package_versions.rs[117-135]
pacquet/crates/registry/src/package_versions.rs[168-181]
pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs[418-457]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`PackageVersions::is_deprecated()` short-circuits on `slot.parsed.get()` for both success and failure. Because `VersionSlot::hydrate()` caches decode failures as `Some(None)`, a single failed hydration attempt permanently prevents `is_deprecated()` from reading `deprecated` from the raw JSON fragment.
This breaks the intended behavior of the new “no hydration” deprecation checks used in picker tie-breaks: a version entry may be non-decodable as a full `PackageVersion` but still contain a meaningful `deprecated` field that should be honored.
### Issue Context
- Hydration failures are cached in `parsed: OnceLock<Option<Arc<PackageVersion>>>`.
- The publish-date filter and deprecated-fallback paths rely on `is_deprecated()` specifically to avoid full-manifest hydration.
### Fix Focus Areas
- pacquet/crates/registry/src/package_versions.rs[44-49]
- pacquet/crates/registry/src/package_versions.rs[117-135]
- pacquet/crates/registry/src/package_versions.rs[168-181]
### Suggested fix
Change the short-circuit to only return early when a successfully hydrated manifest is cached:
- If `slot.parsed.get()` is `Some(Some(manifest))`, return based on `manifest.deprecated`.
- If it is `Some(None)`, **do not** return immediately; fall through to the raw-fragment probe (same behavior as when `parsed` is unset).
Concretely:

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Verifier bypasses concurrency setting 🐞 Bug ☼ Reliability
Description
The lockfile verification fan-out now defaults to 64 concurrent tasks, but the main call sites don’t
pass any configured network concurrency into the verifier, so it can issue up to 64 parallel HTTP
probes even when the install is configured for lower concurrency (increasing rate-limit/timeout
risk).
Code

installing/deps-installer/src/install/verifyLockfileResolutions.ts[R30-33]

+// 64 mirrors the floor of pnpm's package-requester network-concurrency
+// (Math.min(96, Math.max(workers*3, 64))); keep them aligned so the
// verification pass doesn't push past what the rest of the install respects.
-const DEFAULT_CONCURRENCY = 16
+const DEFAULT_CONCURRENCY = 64
Evidence
The verifier uses DEFAULT_CONCURRENCY when options.concurrency is not provided, and the JS
install path calls it without any concurrency value even though the code comments state the verifier
is an HTTP probe per lockfile entry in strict mode. Pacquet’s install path similarly passes
concurrency: None, despite having a user-configurable network_concurrency setting.

installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
installing/deps-installer/src/install/index.ts[357-370]
installing/deps-installer/src/install/index.ts[395-399]
installing/package-requester/src/packageRequester.ts[73-104]
pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs[37-49]
pacquet/crates/package-manager/src/install.rs[656-666]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`verifyLockfileResolutions()` (and pacquet’s `verify_lockfile_resolutions()`) now default to 64 concurrent verifier tasks. However, the install wiring does not pass any configured network concurrency to the verifier, so the lockfile policy gate can exceed the user’s intended concurrency and create bursts of HTTP probes (notably for `minimumReleaseAge` strict mode).
## Issue Context
- The verifier phase is explicitly described as doing HTTP probing per lockfile entry under `minimumReleaseAge` strict mode.
- The download/request side supports an explicit `networkConcurrency` override, but that value is not propagated to verification.
## Fix Focus Areas
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
- installing/deps-installer/src/install/index.ts[396-399]
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
- pacquet/crates/package-manager/src/install.rs[659-666]
### Implementation notes
- JS: plumb the effective install `networkConcurrency` (or an equivalent “effective request concurrency” setting available at this layer) into `verifyLockfileResolutions(..., { concurrency: <value>, ... })`. If the value is not available in `deps-installer`, add it to the options passed into this module.
- Rust (pacquet): set `VerifyLockfileResolutionsOptions.concurrency` to `Some(config.network_concurrency)` (or `Some(min(config.network_concurrency, DEFAULT_CONCURRENCY))` if you intentionally want an upper bound) instead of `None`.
- If the verifier is intentionally meant to ignore user settings, update the in-code comments to avoid claiming it won’t exceed what the install respects.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

4. Stale concurrency formula docs 🐞 Bug ⚙ Maintainability
Description
pacquet’s Config.network_concurrency doc comment still describes the old default formula (min 64 /
floor 16) even though default_network_concurrency() now clamps to 64..96, which will mislead
maintainers/readers.
Code

pacquet/crates/network/src/lib.rs[R612-615]

pub fn default_network_concurrency() -> usize {
 let available_parallelism = std::thread::available_parallelism().map_or(1, NonZeroUsize::get);
 let max_workers = available_parallelism.saturating_sub(1).max(1);
-    max_workers.saturating_mul(3).clamp(16, 64)
+    max_workers.saturating_mul(3).clamp(64, 96)
Evidence
The implementation and its docs now describe a 64..96 clamp / min(96, max(..., 64)), while the
config field documentation still cites the old min(64, max(..., 16)) formula.

pacquet/crates/network/src/lib.rs[586-616]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pacquet_config::Config.network_concurrency`’s docstring still references the previous pnpm formula (`Math.min(64, Math.max(..., 16))`) but the implementation now uses the updated 64..96 bounds.
## Issue Context
This PR updates `pacquet_network::default_network_concurrency()` and its docs, but the config-field documentation was not updated, creating drift.
## Fix Focus Areas
- pacquet/crates/config/src/lib.rs[898-904]
- pacquet/crates/network/src/lib.rs[586-616]
### Implementation notes
Update the `Config.network_concurrency` comment to match the new formula (`Math.min(96, Math.max(calcMaxWorkers() * 3, 64))`) and/or describe the new clamp bounds (64..96).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit 28e8cee

Results up to commit f86db31


🐞 Bugs (4) 📘 Rule violations (0)


Remediation recommended
1. Socket cap below concurrency 🐞 Bug ➹ Performance ⭐ New
Description
When opts.networkConcurrency is unset, createPackageRequester() now defaults to 64–96 concurrent
requests, but the undici dispatcher still uses its default 50-connection limit because maxSockets
is only derived when networkConcurrency is explicitly provided. This silently caps effective
parallelism below the new floor and adds unnecessary queuing (especially noticeable on cold
installs).
Code

installing/package-requester/src/packageRequester.ts[R97-104]

+  // Downloads are I/O-bound, not CPU-bound: a low-latency registry only
+  // saturates with enough requests in flight, so the floor matters more
+  // than the per-core scaling — a CPU-derived floor left 4-core CI
+  // runners draining multi-hundred-tarball installs 16 at a time.
+  const networkConcurrency = opts.networkConcurrency ?? Math.min(96, Math.max(calcMaxWorkers() * 3, 64))
  const requestsQueue = new PQueue({
    concurrency: networkConcurrency,
  })
Evidence
The requester now defaults to Math.min(96, Math.max(calcMaxWorkers() * 3, 64)) when
opts.networkConcurrency is undefined, but maxSockets remains undefined in the common case, so
undici’s global dispatcher uses DEFAULT_MAX_SOCKETS = 50, limiting actual concurrent connections
below the new default concurrency floor.

installing/package-requester/src/packageRequester.ts[97-104]
store/connection-manager/src/createNewStoreController.ts[109-114]
network/fetch/src/dispatcher.ts[12-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`createPackageRequester()` now computes a higher default `networkConcurrency` (floor 64) when the option is unset, but the fetch layer’s undici dispatcher still defaults to `DEFAULT_MAX_SOCKETS = 50` unless `maxSockets` is explicitly configured. This means the higher default concurrency often cannot be realized.

### Issue Context
- `createPackageRequester()` computes `networkConcurrency` locally when `opts.networkConcurrency` is `undefined`.
- `createNewStoreController()` only derives `maxSockets` from `opts.networkConcurrency` when it’s explicitly set.
- `network/fetch`’s global dispatcher uses 50 connections by default.

### Fix Focus Areas
- store/connection-manager/src/createNewStoreController.ts[110-114]
- installing/package-requester/src/packageRequester.ts[97-104]
- network/fetch/src/dispatcher.ts[12-25]

### Implementation guidance
- Compute the *effective* default `networkConcurrency` once (shared helper or config-level defaulting) and pass it through so both:
 - `createPackageRequester({ networkConcurrency })` and
 - `createClient({ maxSockets })`
 use consistent values.
- Ensure `maxSockets` is at least the effective `networkConcurrency` (or whatever multiplier is intended, currently `* 3`) even when the user does not set `networkConcurrency` explicitly.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Cached parse masks deprecation 🐞 Bug ≡ Correctness
Description
PackageVersions::is_deprecated() returns false whenever the slot has any cached hydration
result, including Some(None) from a prior decode failure, so it never probes the raw fragment for
a deprecated field. This can misclassify a version as non-deprecated in publish-date dist-tag
repopulation / deprecated-fallback when the full manifest decode failed earlier but the raw fragment
still contains a valid deprecated value.
Code

pacquet/crates/registry/src/package_versions.rs[R168-172]

+    pub fn is_deprecated(&self, version: &str) -> bool {
+        let Some(slot) = self.slots.get(version) else { return false };
+        if let Some(parsed) = slot.parsed.get() {
+            return parsed.as_ref().is_some_and(|manifest| manifest.deprecated.is_some());
+        }
Evidence
hydrate() caches decode failures as Some(None), and is_deprecated() currently treats any
cached value (including Some(None)) as definitive and returns false without inspecting the raw
JSON. The publish-date filter relies on is_deprecated() while intentionally avoiding hydration, so
this cached-failure short-circuit can change candidate deprecation classification compared to
raw-fragment probing.

pacquet/crates/registry/src/package_versions.rs[44-49]
pacquet/crates/registry/src/package_versions.rs[117-135]
pacquet/crates/registry/src/package_versions.rs[168-181]
pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs[418-457]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`PackageVersions::is_deprecated()` short-circuits on `slot.parsed.get()` for both success and failure. Because `VersionSlot::hydrate()` caches decode failures as `Some(None)`, a single failed hydration attempt permanently prevents `is_deprecated()` from reading `deprecated` from the raw JSON fragment.
This breaks the intended behavior of the new “no hydration” deprecation checks used in picker tie-breaks: a version entry may be non-decodable as a full `PackageVersion` but still contain a meaningful `deprecated` field that should be honored.
### Issue Context
- Hydration failures are cached in `parsed: OnceLock<Option<Arc<PackageVersion>>>`.
- The publish-date filter and deprecated-fallback paths rely on `is_deprecated()` specifically to avoid full-manifest hydration.
### Fix Focus Areas
- pacquet/crates/registry/src/package_versions.rs[44-49]
- pacquet/crates/registry/src/package_versions.rs[117-135]
- pacquet/crates/registry/src/package_versions.rs[168-181]
### Suggested fix
Change the short-circuit to only return early when a successfully hydrated manifest is cached:
- If `slot.parsed.get()` is `Some(Some(manifest))`, return based on `manifest.deprecated`.
- If it is `Some(None)`, **do not** return immediately; fall through to the raw-fragment probe (same behavior as when `parsed` is unset).
Concretely:

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Verifier bypasses concurrency setting 🐞 Bug ☼ Reliability
Description
The lockfile verification fan-out now defaults to 64 concurrent tasks, but the main call sites don’t
pass any configured network concurrency into the verifier, so it can issue up to 64 parallel HTTP
probes even when the install is configured for lower concurrency (increasing rate-limit/timeout
risk).
Code

installing/deps-installer/src/install/verifyLockfileResolutions.ts[R30-33]

+// 64 mirrors the floor of pnpm's package-requester network-concurrency
+// (Math.min(96, Math.max(workers*3, 64))); keep them aligned so the
// verification pass doesn't push past what the rest of the install respects.
-const DEFAULT_CONCURRENCY = 16
+const DEFAULT_CONCURRENCY = 64
Evidence
The verifier uses DEFAULT_CONCURRENCY when options.concurrency is not provided, and the JS
install path calls it without any concurrency value even though the code comments state the verifier
is an HTTP probe per lockfile entry in strict mode. Pacquet’s install path similarly passes
concurrency: None, despite having a user-configurable network_concurrency setting.

installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
installing/deps-installer/src/install/index.ts[357-370]
installing/deps-installer/src/install/index.ts[395-399]
installing/package-requester/src/packageRequester.ts[73-104]
pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs[37-49]
pacquet/crates/package-manager/src/install.rs[656-666]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`verifyLockfileResolutions()` (and pacquet’s `verify_lockfile_resolutions()`) now default to 64 concurrent verifier tasks. However, the install wiring does not pass any configured network concurrency to the verifier, so the lockfile policy gate can exceed the user’s intended concurrency and create bursts of HTTP probes (notably for `minimumReleaseAge` strict mode).
## Issue Context
- The verifier phase is explicitly described as doing HTTP probing per lockfile entry under `minimumReleaseAge` strict mode.
- The download/request side supports an explicit `networkConcurrency` override, but that value is not propagated to verification.
## Fix Focus Areas
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
- installing/deps-installer/src/install/index.ts[396-399]
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
- pacquet/crates/package-manager/src/install.rs[659-666]
### Implementation notes
- JS: plumb the effective install `networkConcurrency` (or an equivalent “effective request concurrency” setting available at this layer) into `verifyLockfileResolutions(..., { concurrency: <value>, ... })`. If the value is not available in `deps-installer`, add it to the options passed into this module.
- Rust (pacquet): set `VerifyLockfileResolutionsOptions.concurrency` to `Some(config.network_concurrency)` (or `Some(min(config.network_concurrency, DEFAULT_CONCURRENCY))` if you intentionally want an upper bound) instead of `None`.
- If the verifier is intentionally meant to ignore user settings, update the in-code comments to avoid claiming it won’t exceed what the install respects.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational
4. Stale concurrency formula docs 🐞 Bug ⚙ Maintainability
Description
pacquet’s Config.network_concurrency doc comment still describes the old default formula (min 64 /
floor 16) even though default_network_concurrency() now clamps to 64..96, which will mislead
maintainers/readers.
Code

pacquet/crates/network/src/lib.rs[R612-615]

pub fn default_network_concurrency() -> usize {
  let available_parallelism = std::thread::available_parallelism().map_or(1, NonZeroUsize::get);
  let max_workers = available_parallelism.saturating_sub(1).max(1);
-    max_workers.saturating_mul(3).clamp(16, 64)
+    max_workers.saturating_mul(3).clamp(64, 96)
Evidence
The implementation and its docs now describe a 64..96 clamp / min(96, max(..., 64)), while the
config field documentation still cites the old min(64, max(..., 16)) formula.

pacquet/crates/network/src/lib.rs[586-616]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pacquet_config::Config.network_concurrency`’s docstring still references the previous pnpm formula (`Math.min(64, Math.max(..., 16))`) but the implementation now uses the updated 64..96 bounds.
## Issue Context
This PR updates `pacquet_network::default_network_concurrency()` and its docs, but the config-field documentation was not updated, creating drift.
## Fix Focus Areas
- pacquet/crates/config/src/lib.rs[898-904]
- pacquet/crates/network/src/lib.rs[586-616]
### Implementation notes
Update the `Config.network_concurrency` comment to match the new formula (`Math.min(96, Math.max(calcMaxWorkers() * 3, 64))`) and/or describe the new clamp bounds (64..96).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit c99510c


🐞 Bugs (3) 📘 Rule violations (0)


Remediation recommended
1. Cached parse masks deprecation 🐞 Bug ≡ Correctness ⭐ New
Description
PackageVersions::is_deprecated() returns false whenever the slot has any cached hydration
result, including Some(None) from a prior decode failure, so it never probes the raw fragment for
a deprecated field. This can misclassify a version as non-deprecated in publish-date dist-tag
repopulation / deprecated-fallback when the full manifest decode failed earlier but the raw fragment
still contains a valid deprecated value.
Code

pacquet/crates/registry/src/package_versions.rs[R168-172]

+    pub fn is_deprecated(&self, version: &str) -> bool {
+        let Some(slot) = self.slots.get(version) else { return false };
+        if let Some(parsed) = slot.parsed.get() {
+            return parsed.as_ref().is_some_and(|manifest| manifest.deprecated.is_some());
+        }
Evidence
hydrate() caches decode failures as Some(None), and is_deprecated() currently treats any
cached value (including Some(None)) as definitive and returns false without inspecting the raw
JSON. The publish-date filter relies on is_deprecated() while intentionally avoiding hydration, so
this cached-failure short-circuit can change candidate deprecation classification compared to
raw-fragment probing.

pacquet/crates/registry/src/package_versions.rs[44-49]
pacquet/crates/registry/src/package_versions.rs[117-135]
pacquet/crates/registry/src/package_versions.rs[168-181]
pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs[418-457]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`PackageVersions::is_deprecated()` short-circuits on `slot.parsed.get()` for both success and failure. Because `VersionSlot::hydrate()` caches decode failures as `Some(None)`, a single failed hydration attempt permanently prevents `is_deprecated()` from reading `deprecated` from the raw JSON fragment.

This breaks the intended behavior of the new “no hydration” deprecation checks used in picker tie-breaks: a version entry may be non-decodable as a full `PackageVersion` but still contain a meaningful `deprecated` field that should be honored.

### Issue Context
- Hydration failures are cached in `parsed: OnceLock<Option<Arc<PackageVersion>>>`.
- The publish-date filter and deprecated-fallback paths rely on `is_deprecated()` specifically to avoid full-manifest hydration.

### Fix Focus Areas
- pacquet/crates/registry/src/package_versions.rs[44-49]
- pacquet/crates/registry/src/package_versions.rs[117-135]
- pacquet/crates/registry/src/package_versions.rs[168-181]

### Suggested fix
Change the short-circuit to only return early when a successfully hydrated manifest is cached:

- If `slot.parsed.get()` is `Some(Some(manifest))`, return based on `manifest.deprecated`.
- If it is `Some(None)`, **do not** return immediately; fall through to the raw-fragment probe (same behavior as when `parsed` is unset).

Concretely:
```rust
if let Some(Some(parsed)) = slot.parsed.get() {
   return parsed.deprecated.is_some();
}
// else: probe raw fragment as today
```

(Optionally update the doc comment to clarify that “undecodable” refers to the probe decode, not full-manifest hydration.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Verifier bypasses concurrency setting 🐞 Bug ☼ Reliability
Description
The lockfile verification fan-out now defaults to 64 concurrent tasks, but the main call sites don’t
pass any configured network concurrency into the verifier, so it can issue up to 64 parallel HTTP
probes even when the install is configured for lower concurrency (increasing rate-limit/timeout
risk).
Code

installing/deps-installer/src/install/verifyLockfileResolutions.ts[R30-33]

+// 64 mirrors the floor of pnpm's package-requester network-concurrency
+// (Math.min(96, Math.max(workers*3, 64))); keep them aligned so the
// verification pass doesn't push past what the rest of the install respects.
-const DEFAULT_CONCURRENCY = 16
+const DEFAULT_CONCURRENCY = 64
Evidence
The verifier uses DEFAULT_CONCURRENCY when options.concurrency is not provided, and the JS
install path calls it without any concurrency value even though the code comments state the verifier
is an HTTP probe per lockfile entry in strict mode. Pacquet’s install path similarly passes
concurrency: None, despite having a user-configurable network_concurrency setting.

installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
installing/deps-installer/src/install/index.ts[357-370]
installing/deps-installer/src/install/index.ts[395-399]
installing/package-requester/src/packageRequester.ts[73-104]
pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs[37-49]
pacquet/crates/package-manager/src/install.rs[656-666]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`verifyLockfileResolutions()` (and pacquet’s `verify_lockfile_resolutions()`) now default to 64 concurrent verifier tasks. However, the install wiring does not pass any configured network concurrency to the verifier, so the lockfile policy gate can exceed the user’s intended concurrency and create bursts of HTTP probes (notably for `minimumReleaseAge` strict mode).
## Issue Context
- The verifier phase is explicitly described as doing HTTP probing per lockfile entry under `minimumReleaseAge` strict mode.
- The download/request side supports an explicit `networkConcurrency` override, but that value is not propagated to verification.
## Fix Focus Areas
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
- installing/deps-installer/src/install/index.ts[396-399]
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
- pacquet/crates/package-manager/src/install.rs[659-666]
### Implementation notes
- JS: plumb the effective install `networkConcurrency` (or an equivalent “effective request concurrency” setting available at this layer) into `verifyLockfileResolutions(..., { concurrency: <value>, ... })`. If the value is not available in `deps-installer`, add it to the options passed into this module.
- Rust (pacquet): set `VerifyLockfileResolutionsOptions.concurrency` to `Some(config.network_concurrency)` (or `Some(min(config.network_concurrency, DEFAULT_CONCURRENCY))` if you intentionally want an upper bound) instead of `None`.
- If the verifier is intentionally meant to ignore user settings, update the in-code comments to avoid claiming it won’t exceed what the install respects.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational
3. Stale concurrency formula docs 🐞 Bug ⚙ Maintainability
Description
pacquet’s Config.network_concurrency doc comment still describes the old default formula (min 64 /
floor 16) even though default_network_concurrency() now clamps to 64..96, which will mislead
maintainers/readers.
Code

pacquet/crates/network/src/lib.rs[R612-615]

pub fn default_network_concurrency() -> usize {
   let available_parallelism = std::thread::available_parallelism().map_or(1, NonZeroUsize::get);
   let max_workers = available_parallelism.saturating_sub(1).max(1);
-    max_workers.saturating_mul(3).clamp(16, 64)
+    max_workers.saturating_mul(3).clamp(64, 96)
Evidence
The implementation and its docs now describe a 64..96 clamp / min(96, max(..., 64)), while the
config field documentation still cites the old min(64, max(..., 16)) formula.

pacquet/crates/network/src/lib.rs[586-616]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pacquet_config::Config.network_concurrency`’s docstring still references the previous pnpm formula (`Math.min(64, Math.max(..., 16))`) but the implementation now uses the updated 64..96 bounds.
## Issue Context
This PR updates `pacquet_network::default_network_concurrency()` and its docs, but the config-field documentation was not updated, creating drift.
## Fix Focus Areas
- pacquet/crates/config/src/lib.rs[898-904]
- pacquet/crates/network/src/lib.rs[586-616]
### Implementation notes
Update the `Config.network_concurrency` comment to match the new formula (`Math.min(96, Math.max(calcMaxWorkers() * 3, 64))`) and/or describe the new clamp bounds (64..96).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit 1b14a25


🐞 Bugs (2) 📘 Rule violations (0)


Remediation recommended
1. Verifier bypasses concurrency setting 🐞 Bug ☼ Reliability
Description
The lockfile verification fan-out now defaults to 64 concurrent tasks, but the main call sites don’t
pass any configured network concurrency into the verifier, so it can issue up to 64 parallel HTTP
probes even when the install is configured for lower concurrency (increasing rate-limit/timeout
risk).
Code

installing/deps-installer/src/install/verifyLockfileResolutions.ts[R30-33]

+// 64 mirrors the floor of pnpm's package-requester network-concurrency
+// (Math.min(96, Math.max(workers*3, 64))); keep them aligned so the
// verification pass doesn't push past what the rest of the install respects.
-const DEFAULT_CONCURRENCY = 16
+const DEFAULT_CONCURRENCY = 64
Evidence
The verifier uses DEFAULT_CONCURRENCY when options.concurrency is not provided, and the JS
install path calls it without any concurrency value even though the code comments state the verifier
is an HTTP probe per lockfile entry in strict mode. Pacquet’s install path similarly passes
concurrency: None, despite having a user-configurable network_concurrency setting.

installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
installing/deps-installer/src/install/index.ts[357-370]
installing/deps-installer/src/install/index.ts[395-399]
installing/package-requester/src/packageRequester.ts[73-104]
pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs[37-49]
pacquet/crates/package-manager/src/install.rs[656-666]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`verifyLockfileResolutions()` (and pacquet’s `verify_lockfile_resolutions()`) now default to 64 concurrent verifier tasks. However, the install wiring does not pass any configured network concurrency to the verifier, so the lockfile policy gate can exceed the user’s intended concurrency and create bursts of HTTP probes (notably for `minimumReleaseAge` strict mode).

## Issue Context
- The verifier phase is explicitly described as doing HTTP probing per lockfile entry under `minimumReleaseAge` strict mode.
- The download/request side supports an explicit `networkConcurrency` override, but that value is not propagated to verification.

## Fix Focus Areas
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[30-33]
- installing/deps-installer/src/install/index.ts[396-399]
- installing/deps-installer/src/install/verifyLockfileResolutions.ts[349-356]
- pacquet/crates/package-manager/src/install.rs[659-666]

### Implementation notes
- JS: plumb the effective install `networkConcurrency` (or an equivalent “effective request concurrency” setting available at this layer) into `verifyLockfileResolutions(..., { concurrency: <value>, ... })`. If the value is not available in `deps-installer`, add it to the options passed into this module.
- Rust (pacquet): set `VerifyLockfileResolutionsOptions.concurrency` to `Some(config.network_concurrency)` (or `Some(min(config.network_concurrency, DEFAULT_CONCURRENCY))` if you intentionally want an upper bound) instead of `None`.
- If the verifier is intentionally meant to ignore user settings, update the in-code comments to avoid claiming it won’t exceed what the install respects.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational
2. Stale concurrency formula docs 🐞 Bug ⚙ Maintainability
Description
pacquet’s Config.network_concurrency doc comment still describes the old default formula (min 64 /
floor 16) even though default_network_concurrency() now clamps to 64..96, which will mislead
maintainers/readers.
Code

pacquet/crates/network/src/lib.rs[R612-615]

pub fn default_network_concurrency() -> usize {
    let available_parallelism = std::thread::available_parallelism().map_or(1, NonZeroUsize::get);
    let max_workers = available_parallelism.saturating_sub(1).max(1);
-    max_workers.saturating_mul(3).clamp(16, 64)
+    max_workers.saturating_mul(3).clamp(64, 96)
Evidence
The implementation and its docs now describe a 64..96 clamp / min(96, max(..., 64)), while the
config field documentation still cites the old min(64, max(..., 16)) formula.

pacquet/crates/network/src/lib.rs[586-616]
pacquet/crates/config/src/lib.rs[898-904]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pacquet_config::Config.network_concurrency`’s docstring still references the previous pnpm formula (`Math.min(64, Math.max(..., 16))`) but the implementation now uses the updated 64..96 bounds.

## Issue Context
This PR updates `pacquet_network::default_network_concurrency()` and its docs, but the config-field documentation was not updated, creating drift.

## Fix Focus Areas
- pacquet/crates/config/src/lib.rs[898-904]
- pacquet/crates/network/src/lib.rs[586-616]

### Implementation notes
Update the `Config.network_concurrency` comment to match the new formula (`Math.min(96, Math.max(calcMaxWorkers() * 3, 64))`) and/or describe the new clamp bounds (64..96).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Results up to commit N/A


New Review Started


This review has been superseded by a new analysis


Qodo Logo

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 82b5d855-c363-45cd-a520-4a6cb03fb971

📥 Commits

Reviewing files that changed from the base of the PR and between f86db31 and 28e8cee.

📒 Files selected for processing (1)
  • .github/workflows/test.yml
📜 Recent review details
🔇 Additional comments (1)
.github/workflows/test.yml (1)

33-41: LGTM!


📝 Walkthrough

Walkthrough

Increases default network and lockfile verification concurrency bounds from 16–64 to 64–96 across pnpm and pacquet, implements a lazy non-hydrating PackageVersions::is_deprecated() probe used during version picking, normalizes symlink target comparisons to handle relative .. segments, and adds a CI runner disk cleanup step.

Changes

Default Network and Verification Concurrency Scaling

Layer / File(s) Summary
pnpm concurrency defaults and version bumps
.changeset/raise-default-network-concurrency.md, installing/package-requester/src/packageRequester.ts, installing/deps-installer/src/install/verifyLockfileResolutions.ts
Changeset declares minor bumps; package-requester and deps-installer update computed networkConcurrency and DEFAULT_CONCURRENCY bounds from min(64, max(cpuCores * 3, 16)) / 16 floor to min(96, max(cpuCores * 3, 64)) / 64 floor.
Pacquet network and lockfile verification defaults
pacquet/crates/network/src/lib.rs, pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs, pacquet/crates/network/src/tests.rs
Network docs and default_network_concurrency() now clamp to 64..=96; lockfile verification default concurrency raised to 64; added test asserts the returned default remains within 64..=96.
CI runner cleanup step
.github/workflows/pacquet-ci.yml, .github/workflows/test.yml
Adds a Linux-only test job step that removes large preinstalled directories to free runner disk space before Rust/tooling install steps.

Symlink Normalization and Deprecation Detection

Layer / File(s) Summary
Symlink path normalization
pacquet/crates/fs/src/symlink_dir.rs, pacquet/crates/fs/src/symlink_dir/tests.rs
existing_symlink_up_to_date() now resolves existing link contents and compares crate::lexical_normalize of both paths instead of direct equality; new regression test force_symlink_dir_reuses_relative_link_across_parents verifies reuse of relative symlinks with ...
Deprecation detection infrastructure
pacquet/crates/registry/src/package_version.rs, pacquet/crates/registry/src/package_versions.rs, pacquet/crates/registry/src/package_versions/tests.rs
Made deserialize_deprecated_field pub(crate); added DeprecatedProbe and PackageVersions::is_deprecated(version) which returns cached hydrated values when present, otherwise scans fragment text for "deprecated" before performing a single-field partial deserialization; tests validate absent/undecodable/false-positive cases.
Deprecation detection integration in version picker
pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs, pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta/tests.rs
Imported OnceCell for per-candidate lazy caching; pick_version_by_version_range uses is_deprecated() for deprecated fallback; filter_pkg_metadata_by_publish_date pre-parses candidates and lazily probes deprecation per candidate while selecting replacement dist-tag targets; tests added for tie-breaking and raw-fragment deprecation reads.

Sequence Diagram(s)

sequenceDiagram
  participant Picker as pick_package_from_meta
  participant Versions as PackageVersions::is_deprecated
  participant Store as package version fragments/cache
  Picker->>Versions: query is_deprecated(version)
  Versions->>Store: read hydrated cache or raw fragment text
  Versions->>Versions: early-scan for "deprecated" substring
  Versions->>Store: partial deserialize DeprecatedProbe (if needed)
  Versions-->>Picker: boolean deprecated?
  Picker-->>Picker: choose best candidate using deprecation flags
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

Possibly related PRs

  • pnpm/pnpm#12322: Related PackageVersions/resolver infrastructure that this PR builds on.
  • pnpm/pnpm#11684: Overlapping edits to symlink_dir.rs idempotency/up-to-date logic.
  • pnpm/pnpm#11931: Related lexical normalization functionality used by symlink handling.

Poem

🐰 I hopped through code with nimble paws,

Raised the lanes for network laws.
Symlinks fold their .. just right,
Deprecation peeks without a fight.
A tiny hop toward faster nights!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the three main performance improvements: deprecation probing optimization (warm-resolve), symlink normalization (symlink-churn), and network concurrency increase (download-concurrency).
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch reg-met-opt

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

PR Summary by Qodo

Perf: reduce warm-resolve CPU, avoid symlink churn, and raise download concurrency
✨ Enhancement 🐞 Bug fix 🧪 Tests ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

Walkthroughs

Description
• Probe deprecated flags without hydrating full version manifests during resolve.
• Reuse up-to-date relative symlinks by normalizing .. segments before comparing.
• Raise default download/verification concurrency floors to better saturate fast registries.
Diagram
graph TD
  A["Resolver: publish-date filter"] --> B["Registry: PackageVersions"] --> C["Deprecated probe"]
  D["FS: symlink reuse check"] --> E["lexical_normalize"]
  F["pnpm: package-requester"] --> H["Default concurrency 64..96"]
  G["pacquet: network client"] --> H
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Precompute deprecation flags at packument ingest time
  • ➕ Avoids even the single-field deserialize at pick time
  • ➕ Enables O(1) deprecated checks with no JSON parsing
  • ➖ Increases ingest-time CPU and memory for all versions, even when deprecation is never queried
  • ➖ Requires additional storage in PackageVersions slots and careful invalid-fragment handling
2. Canonicalize symlink targets via filesystem resolution
  • ➕ Guarantees correctness across path edge-cases, symlink chains, and platform quirks
  • ➖ Adds I/O to the hot install/linking path (stat/canonicalize), likely negating perf wins
  • ➖ More failure modes (permissions, missing paths) compared to lexical normalization only
3. Adaptive network concurrency based on observed latency/errors
  • ➕ Can maximize throughput while responding to rate limits / congestion dynamically
  • ➕ Potentially safer than a single global default across diverse environments
  • ➖ More complexity and harder-to-predict behavior for users and CI
  • ➖ Requires new telemetry/feedback loop and tuning surface

Recommendation: Current approach is the best tradeoff for this PR’s goals: it removes known hot-path CPU (deprecation checks) and filesystem churn (relative symlink comparisons) without adding new I/O, and it raises concurrency in a simple, user-overridable way that aligns pnpm and pacquet defaults. Consider adaptive concurrency only if the higher floor triggers rate-limit complaints in the wild.

Grey Divider

File Changes

Enhancement (2)
package_versions.rs Add 'is_deprecated()' probe to avoid full manifest hydration +40/-1

Add 'is_deprecated()' probe to avoid full manifest hydration

• Introduces a single-field 'DeprecatedProbe' and 'PackageVersions::is_deprecated()' that checks deprecation from raw JSON fragments. Avoids hydrating full manifests (including catch-all maps) when only the deprecated flag is needed.

pacquet/crates/registry/src/package_versions.rs


pick_package_from_meta.rs Cache parsed candidates and use deprecation probe during dist-tag repopulation +37/-23

Cache parsed candidates and use deprecation probe during dist-tag repopulation

• Switches deprecated fallback selection to call 'PackageVersions::is_deprecated()' rather than hydrating manifests. Adds a per-call cache of parsed semver candidates (plus lazy deprecated checks) so tag repopulation doesn’t re-parse versions repeatedly.

pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs


Bug fix (1)
symlink_dir.rs Normalize relative symlink targets before up-to-date comparison +8/-4

Normalize relative symlink targets before up-to-date comparison

• Fixes 'existing_symlink_up_to_date' to compare normalized absolute paths rather than verbatim joined paths. Prevents unnecessary unlink+recreate when stored relative link contents include '..' segments (virtual-store layout).

pacquet/crates/fs/src/symlink_dir.rs


Refactor (1)
package_version.rs Expose deprecated-field deserializer for reuse in probes +1/-1

Expose deprecated-field deserializer for reuse in probes

• Makes the 'deprecated' field deserializer visible within the crate so other modules can deserialize the field consistently. Enables 'PackageVersions' to normalize boolean/string 'deprecated' values without importing full manifest types.

pacquet/crates/registry/src/package_version.rs


Tests (2)
tests.rs Test: reuse relative symlink across different parent directories +33/-0

Test: reuse relative symlink across different parent directories

• Adds a regression test ensuring 'force_symlink_dir' reuses an existing relative symlink whose contents include '..' segments. Validates the up-to-date check works for pnpm-style virtual-store link layouts.

pacquet/crates/fs/src/symlink_dir/tests.rs


tests.rs Tests: deprecation probe correctness and false-positive avoidance +57/-0

Tests: deprecation probe correctness and false-positive avoidance

• Adds coverage for string/bool/empty/corrupt 'deprecated' shapes and absent versions. Includes a regression test ensuring a nested key named 'deprecated' (e.g., dependency name) does not report the version as deprecated.

pacquet/crates/registry/src/package_versions/tests.rs


Other (5)
raise-default-network-concurrency.md Changeset: bump packages for higher default network concurrency +7/-0

Changeset: bump packages for higher default network concurrency

• Adds a changeset marking minor bumps for pnpm packages affected by the user-visible default change. Documents the new concurrency formula and rationale for CI/low-core runners.

.changeset/raise-default-network-concurrency.md


verifyLockfileResolutions.ts Raise lockfile verification fan-out default concurrency to 64 +3/-3

Raise lockfile verification fan-out default concurrency to 64

• Updates the internal default concurrency used by lockfile resolution verification to mirror the new package-requester floor. Keeps verifier fan-out aligned with overall install concurrency expectations.

installing/deps-installer/src/install/verifyLockfileResolutions.ts


packageRequester.ts Increase pnpm default download concurrency floor/cap (64..96) +5/-1

Increase pnpm default download concurrency floor/cap (64..96)

• Changes the default 'networkConcurrency' formula to use a higher floor (64) and cap (96) while still scaling with worker count. Adds inline rationale that downloads are I/O-bound and low-core CI runners were underutilizing fast registries.

installing/package-requester/src/packageRequester.ts


verify_lockfile_resolutions.rs Align Rust lockfile verification concurrency default with pnpm (64) +3/-3

Align Rust lockfile verification concurrency default with pnpm (64)

• Raises the Rust port’s 'DEFAULT_CONCURRENCY' to 64 to match upstream’s new floor. Updates option docs to reflect the new default behavior.

pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs


lib.rs Raise pacquet default network concurrency clamp to 64..96 +8/-4

Raise pacquet default network concurrency clamp to 64..96

• Updates 'default_network_concurrency()' to clamp to 64..96 and expands documentation to explain the I/O-bound rationale. Keeps pacquet’s defaults consistent with pnpm’s package-requester behavior.

pacquet/crates/network/src/lib.rs


Grey Divider

Qodo Logo

@zkochan zkochan marked this pull request as draft June 11, 2026 15:23
@zkochan zkochan marked this pull request as ready for review June 11, 2026 15:24
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code Review by Qodo

Grey Divider

New Review Started

This review has been superseded by a new analysis

Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code Review by Qodo

Grey Divider

New Review Started

This review has been superseded by a new analysis

Grey Divider

Qodo Logo

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pacquet/crates/network/src/lib.rs`:
- Around line 594-603: Update the outdated docs for network_concurrency in the
config crate to match the new default range 64–96: replace the old formula
Math.min(64, Math.max(calcMaxWorkers() * 3, 16)) and any explanatory text with
Math.min(96, Math.max(calcMaxWorkers() * 3, 64)) and the accompanying
explanation (e.g., references to a 64 up-to-22-core floor, scaling beyond, and
96 cap). Edit the documentation block that describes network_concurrency /
calcMaxWorkers to use the new formula and wording so it aligns with the
implementation in network::network_concurrency.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 824b3377-f2a5-4ec9-bc85-298b705f236a

📥 Commits

Reviewing files that changed from the base of the PR and between f11b4fc and d1f6a0a.

📒 Files selected for processing (11)
  • .changeset/raise-default-network-concurrency.md
  • installing/deps-installer/src/install/verifyLockfileResolutions.ts
  • installing/package-requester/src/packageRequester.ts
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/registry/src/package_versions.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: Lint and Test (windows-latest)
  • GitHub Check: Lint and Test (macos-latest)
  • GitHub Check: Dylint
  • GitHub Check: Doc
  • GitHub Check: Code Coverage
  • GitHub Check: Analyze (javascript)
  • GitHub Check: Run benchmark on ubuntu-latest
  • GitHub Check: Run benchmark on ubuntu-latest
  • GitHub Check: Compile & Lint
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,js,jsx}: Use Standard Style with trailing commas, prefer functions over classes, declare functions after they are used (relying on hoisting), limit functions to no more than two or three arguments, and use a single options object for functions needing more parameters
Follow import order: standard libraries first, then external dependencies (sorted alphabetically), then relative imports
Do not write comments that restate what the code already says; rename variables, split helpers, or move checks to more obvious places instead
Do not repeat documentation at call sites that already lives on the callee; update the JSDoc once and let every call site benefit
Use JSDoc for the function's contract (preconditions, postconditions, edge cases, why the function exists), not for re-narrating the function body
Do not record past implementation shape, refactor history, or removed code in comments; use git log and git blame for that information instead
Write comments only when the reason for code is non-obvious, a hidden invariant exists, a workaround for a known bug is needed, or an exception to surrounding pattern is deliberate

Files:

  • installing/deps-installer/src/install/verifyLockfileResolutions.ts
  • installing/package-requester/src/packageRequester.ts
pacquet/**/*.rs

📄 CodeRabbit inference engine (pacquet/AGENTS.md)

pacquet/**/*.rs: Log emissions are part of matching pnpm — when porting a function that fires pnpm:<channel> events through globalLogger, logger.debug(...), or streamParser.write(...), mirror the call site, payload, and ordering so @pnpm/cli.default-reporter parses pacquet's NDJSON the same way
Declare a newtype wrapper for branded string types instead of collapsing the brand into a plain String or &str in Rust
If upstream TypeScript always validates before construction of a branded string, validate in the Rust wrapper too via TryFrom<String> and/or FromStr and do not provide an infallible public constructor
If upstream TypeScript never validates a branded string, just brand for type-safety in Rust by exposing an infallible From<String> constructor
If upstream TypeScript occasionally constructs a branded string without validation, expose from_str_unchecked in Rust as an escape hatch alongside the validating constructor
Match upstream serde behavior for branded strings crossing JSON, YAML, or INI boundaries by using #[serde(try_from = "String")] for deserialization and #[serde(into = "String")] for serialization
Derive simple conversions for branded strings using #[derive(derive_more::From)] and #[derive(derive_more::Into)] instead of handwriting impl blocks; use manual impl only when conversion needs custom logic
Model TypeScript string literal unions (like 'auto' | 'always' | 'never') as Rust enums instead of newtype wrappers, since the set of valid values is closed
Treat TypeScript string template literal types (like `${string}@${string}`) the same as branded string types in Rust, using a newtype wrapper with validation
Follow the code style guide in CODE_STYLE_GUIDE.md — imports, modules, naming, ownership and borrowing, parameter type selection, trait bounds, pattern matching, pipe-trait, error handling, test layout, and cloning of Arc and Rc
Choose owned vs. borrowed parameters to minimize copies; widen to t...

Files:

  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/registry/src/package_versions.rs
🧠 Learnings (7)
📚 Learning: 2026-05-14T09:04:00.133Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11622
File: resolving/npm-resolver/test/publishedBy.test.ts:350-354
Timestamp: 2026-05-14T09:04:00.133Z
Learning: In the pnpm/pnpm repository, ESLint is the authoritative style linter. Do not raise review findings for missing trailing commas in multiline function calls (e.g., `fs.writeFileSync(...)`) when this repo’s ESLint configuration does not report them and lint passes. Prefer deferring to the ESLint results for this specific trailing-comma rule rather than enforcing it manually in code review.

Applied to files:

  • installing/deps-installer/src/install/verifyLockfileResolutions.ts
  • installing/package-requester/src/packageRequester.ts
📚 Learning: 2026-06-05T13:47:26.046Z
Learnt from: vsumner
Repo: pnpm/pnpm PR: 12190
File: installing/deps-installer/src/install/index.ts:2337-2343
Timestamp: 2026-06-05T13:47:26.046Z
Learning: In the pnpm/pnpm codebase, `PnpmError` automatically prefixes `err.code` with `ERR_PNPM_` when you pass a code that does not already start with `ERR_PNPM_` (it normalizes `this.code` via `code.startsWith('ERR_PNPM_') ? code : `ERR_PNPM_${code}``). Therefore, during code review you should NOT flag `new PnpmError(...)` call sites for passing a bare error code (e.g., `new PnpmError('FROZEN_STORE_INCOMPATIBLE_WITH_PNPR', ...)`); the resulting `err.code` will still be `ERR_PNPM_FROZEN_STORE_INCOMPATIBLE_WITH_PNPR`.

Applied to files:

  • installing/deps-installer/src/install/verifyLockfileResolutions.ts
  • installing/package-requester/src/packageRequester.ts
📚 Learning: 2026-05-26T21:01:06.666Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11966
File: .changeset/require-tarball-integrity.md:6-6
Timestamp: 2026-05-26T21:01:06.666Z
Learning: In pnpm lockfile-related release notes/docs (especially changeset markdown), preserve URL hostnames exactly as they appear in pnpm-lock.yaml tarball resolution entries—keep hosts like `codeload.github.com`, `bitbucket.org`, and `gitlab.com` in lowercase. Do not “correct” them to title-case/preserve brand capitalization (e.g., LanguageTool rules like `GITHUB` capitalization) because these are literal URL fragments, not platform brand names.

Applied to files:

  • .changeset/raise-default-network-concurrency.md
📚 Learning: 2026-05-20T19:40:55.051Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11774
File: pacquet/crates/resolving-deps-resolver/src/resolve_peers.rs:0-0
Timestamp: 2026-05-20T19:40:55.051Z
Learning: In the pacquet Rust code, ensure the semver implementation uses the `node-semver` crate (not `nodejs-semver`). `node-semver`’s public API does not include a `satisfies_with_prerelease`-style method; prerelease-tolerant matching should be implemented inline by first calling `Range::satisfies`, and when it rejects a prerelease version, retry matching against a stripped `MAJOR.MINOR.PATCH` base of the prerelease version.

Applied to files:

  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/registry/src/package_versions.rs
📚 Learning: 2026-05-22T00:08:44.646Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11837
File: pacquet/crates/resolving-npm-resolver/src/pick_package.rs:33-51
Timestamp: 2026-05-22T00:08:44.646Z
Learning: In the pnpm/pnpm repo’s pacquet Rust crates, do not flag Unicode ellipsis characters (U+2026, `…`) in Rust doc comments (`///` / `/** */`) as a lint violation. The pacquet crate’s `dylint.toml` only enables `perfectionist::derive_ordering`, and the Dylint `unicode-ellipsis` rule is not enabled for this project—so `…` in doc comments is an intentional, repo-consistent style.

Applied to files:

  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/registry/src/package_versions.rs
📚 Learning: 2026-05-20T23:07:58.444Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11784
File: pacquet/crates/resolving-deps-resolver/src/hoist_peers.rs:120-133
Timestamp: 2026-05-20T23:07:58.444Z
Learning: When reviewing code in this pacquet Rust port, follow the upstream pnpm compatibility rule: only match pnpm’s behavior exactly. Do not propose review changes that intentionally deviate from pnpm’s documented/observed behavior, even if pnpm appears buggy. If you identify a real bug in pnpm behavior, the review should prioritize fixing it upstream in pnpm first, and avoid implementing a pnpm-behavior workaround here unless the same fix has already landed upstream.

Applied to files:

  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/registry/src/package_versions.rs
📚 Learning: 2026-06-06T18:58:37.156Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 12243
File: pacquet/crates/package-manager/src/install_package_by_snapshot.rs:319-322
Timestamp: 2026-06-06T18:58:37.156Z
Learning: When reviewing Rust code, do not assume `matches!(expr, Pattern(_))` will move out of `expr` if `Pattern(_)` contains no by-value bindings. `matches!` desugars to a `match` that auto-borrows the scrutinee for discrimination, so even if `expr` is a non-`Copy` value behind a shared reference (e.g., `&T`), the macro should not move-out of the borrowed data purely due to `matches!`. Treat `matches!(&expr, Pattern(_))` as a readability/clarity improvement, not a correctness requirement. Only flag potential move-out-of-borrow risks when the pattern includes by-value bindings that would require moving the matched value.

Applied to files:

  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/fs/src/symlink_dir/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/registry/src/package_versions/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/registry/src/package_versions.rs
🔇 Additional comments (6)
pacquet/crates/registry/src/package_version.rs (1)

154-154: LGTM!

pacquet/crates/registry/src/package_versions.rs (1)

27-27: LGTM!

Also applies to: 29-36, 153-181

pacquet/crates/registry/src/package_versions/tests.rs (1)

130-185: LGTM!

pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs (1)

30-30: LGTM!

Also applies to: 349-355, 432-484

pacquet/crates/fs/src/symlink_dir.rs (1)

272-278: LGTM!

Also applies to: 285-285

pacquet/crates/fs/src/symlink_dir/tests.rs (1)

213-244: LGTM!

Comment thread pacquet/crates/network/src/lib.rs
…sion manifests

With minimumReleaseAge active (the default), every range pick runs
filter_pkg_metadata_by_publish_date, and any dist-tag pointing at a
version outside the maturity cutoff repopulates by scanning all
candidate versions, reading each candidate's deprecated flag. Reading
that flag through PackageVersions::get hydrated the full manifest
fragment (including the flattened catch-all map), which a time profile
of a warm-cache fresh resolve of the babylon fixture showed as the
single largest CPU consumer (~10 thread-seconds, all on the resolve
task's critical path).

PackageVersions::is_deprecated answers the same question from the raw
fragment: a substring pre-check for the key text, then a single-field
deserialize using the same normalization as PackageVersion::deprecated.
The tag-repopulation loop now also parses candidate versions once per
filter call instead of once per tag, matching the parsedSemverCache in
pnpm's filterPkgMetadataByPublishDate, and the deprecated-pick fallback
in pick_version_by_version_range uses the probe instead of hydrating
every version.

Warm-cache fresh resolve of the babylon fixture: resolve_workspace
7.5s -> 2.6s. Resolved version sets are byte-identical before/after
across the vue and babylon fixtures.
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 1b14a25

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Micro-Benchmark Results

Linux

group                          main                                   pr
-----                          ----                                   --
tarball/download_dependency    1.06      8.4±0.12ms   519.5 KB/sec    1.00      7.9±0.10ms   548.3 KB/sec

@codecov-commenter

codecov-commenter commented Jun 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.74%. Comparing base (cb18695) to head (28e8cee).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #12329      +/-   ##
==========================================
+ Coverage   87.73%   87.74%   +0.01%     
==========================================
  Files         291      291              
  Lines       36034    36061      +27     
==========================================
+ Hits        31613    31642      +29     
+ Misses       4421     4419       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Integrated-Benchmark Report (Linux)

Each scenario reports direct installs and pnpr installs. Bencher consumes pacquet@HEAD and pnpr@HEAD.

Scenario: Isolated linker: fresh restore, cold cache + cold store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 4.361 ± 0.275 4.085 5.025 1.84 ± 0.15
pacquet@main 10.495 ± 0.044 10.421 10.544 4.42 ± 0.24
pnpr@HEAD 2.374 ± 0.131 2.236 2.596 1.00
pnpr@main 5.494 ± 0.130 5.384 5.737 2.31 ± 0.14
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 4.36098859244,
      "stddev": 0.2751960834433389,
      "median": 4.321700333340001,
      "user": 3.692216319999999,
      "system": 3.4676878,
      "min": 4.08531859984,
      "max": 5.02521061284,
      "times": [
        5.02521061284,
        4.41613649384,
        4.34136288284,
        4.30203778384,
        4.17363209784,
        4.10601188484,
        4.46826957184,
        4.49667217484,
        4.08531859984,
        4.19523382184
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 10.495090559340001,
      "stddev": 0.04368957912307264,
      "median": 10.499637919840001,
      "user": 3.4223905199999995,
      "system": 3.4700007999999998,
      "min": 10.421427666840001,
      "max": 10.54418796384,
      "times": [
        10.49737135384,
        10.534607367840001,
        10.50190448584,
        10.52172009184,
        10.54418796384,
        10.54272491284,
        10.43359894884,
        10.46460143284,
        10.48876136884,
        10.421427666840001
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.37351074154,
      "stddev": 0.13071851500842108,
      "median": 2.3129642008399998,
      "user": 2.6732438199999997,
      "system": 3.0275495,
      "min": 2.23582939284,
      "max": 2.59644759384,
      "times": [
        2.46624290484,
        2.59644759384,
        2.38754424184,
        2.30613696184,
        2.57849777184,
        2.29086821984,
        2.23582939284,
        2.25059538484,
        2.31979143984,
        2.30315350384
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 5.493573556339999,
      "stddev": 0.12985650097980853,
      "median": 5.42261265234,
      "user": 2.46874622,
      "system": 3.0077152999999996,
      "min": 5.38419008684,
      "max": 5.73721085784,
      "times": [
        5.40424213984,
        5.41833116484,
        5.39692983284,
        5.73721085784,
        5.42689413984,
        5.56150239384,
        5.39638005784,
        5.68901555284,
        5.38419008684,
        5.52103933684
      ]
    }
  ]
}

Scenario: Isolated linker: fresh restore, hot cache + hot store

Command Mean [ms] Min [ms] Max [ms] Relative
pacquet@HEAD 713.9 ± 43.1 660.5 821.7 1.06 ± 0.07
pacquet@main 676.5 ± 24.3 648.7 710.7 1.00
pnpr@HEAD 787.1 ± 16.1 766.7 812.0 1.16 ± 0.05
pnpr@main 829.1 ± 89.2 751.8 1059.4 1.23 ± 0.14
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 0.71392609116,
      "stddev": 0.04312658480751863,
      "median": 0.71241331886,
      "user": 0.38508790000000004,
      "system": 1.35659194,
      "min": 0.66050793036,
      "max": 0.82165743236,
      "times": [
        0.7130566353600001,
        0.71264286336,
        0.7134202243600001,
        0.71218377436,
        0.66050793036,
        0.69047882136,
        0.82165743236,
        0.73030609136,
        0.7089041353600001,
        0.6761030033600001
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 0.67648206136,
      "stddev": 0.02431367457716857,
      "median": 0.67749422086,
      "user": 0.37206870000000003,
      "system": 1.3535840399999999,
      "min": 0.64871316136,
      "max": 0.71074656436,
      "times": [
        0.6501481463600001,
        0.68959147136,
        0.65126240036,
        0.71074656436,
        0.64871316136,
        0.69847161636,
        0.69318046136,
        0.70078140036,
        0.65652842136,
        0.66539697036
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.7870517100600001,
      "stddev": 0.016078732024606468,
      "median": 0.7841958068600001,
      "user": 0.3970135,
      "system": 1.35893504,
      "min": 0.7667215483600001,
      "max": 0.81204732436,
      "times": [
        0.80795864736,
        0.77458346536,
        0.77900284736,
        0.76976982236,
        0.78783877636,
        0.7809148823600001,
        0.80420305536,
        0.7874767313600001,
        0.7667215483600001,
        0.81204732436
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.8290630129600001,
      "stddev": 0.0892308243463461,
      "median": 0.80983359936,
      "user": 0.4016039,
      "system": 1.35579964,
      "min": 0.75179426136,
      "max": 1.05944252436,
      "times": [
        0.82454076736,
        0.77508822436,
        0.80552702536,
        0.81726694536,
        0.88200411536,
        1.05944252436,
        0.80844764236,
        0.81121955636,
        0.7552990673600001,
        0.75179426136
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, cold cache + cold store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 3.903 ± 0.092 3.774 4.018 1.69 ± 0.13
pacquet@main 8.672 ± 0.065 8.575 8.756 3.76 ± 0.28
pnpr@HEAD 2.307 ± 0.171 2.121 2.586 1.00
pnpr@main 5.237 ± 0.135 5.125 5.569 2.27 ± 0.18
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 3.9028256427400003,
      "stddev": 0.0919393965677526,
      "median": 3.88818942164,
      "user": 3.5319932400000007,
      "system": 3.36894944,
      "min": 3.77409682164,
      "max": 4.01768871664,
      "times": [
        3.87247307764,
        4.01707743664,
        3.96593412864,
        3.77409682164,
        4.01768871664,
        3.8242307116400003,
        3.9039057656400002,
        3.9959917156399998,
        3.8632546426400003,
        3.7936034106400003
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 8.67168462714,
      "stddev": 0.06453334244984488,
      "median": 8.678641392140001,
      "user": 3.4072294400000005,
      "system": 3.3236599399999998,
      "min": 8.57493974564,
      "max": 8.75643240164,
      "times": [
        8.59818023464,
        8.60093761864,
        8.70113984664,
        8.65246347664,
        8.66434508364,
        8.73211242264,
        8.75643240164,
        8.57493974564,
        8.69293770064,
        8.74335774064
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.3067456292399995,
      "stddev": 0.1705240221297092,
      "median": 2.24297990264,
      "user": 2.51860704,
      "system": 2.9206605400000005,
      "min": 2.12074581764,
      "max": 2.58649557464,
      "times": [
        2.58649557464,
        2.17029072164,
        2.26949845364,
        2.18382706964,
        2.21646135164,
        2.47975431764,
        2.4365072526400002,
        2.13052289364,
        2.47335283964,
        2.12074581764
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 5.23705295474,
      "stddev": 0.1348929322330615,
      "median": 5.18460447214,
      "user": 2.30648304,
      "system": 2.90310324,
      "min": 5.12475922364,
      "max": 5.56939923864,
      "times": [
        5.56939923864,
        5.37997183764,
        5.17512703364,
        5.12475922364,
        5.16537455064,
        5.18418693864,
        5.18049513964,
        5.21525634464,
        5.19093723464,
        5.18502200564
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, hot cache + hot store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 1.096 ± 0.016 1.079 1.128 1.55 ± 0.12
pacquet@main 1.129 ± 0.027 1.105 1.190 1.60 ± 0.13
pnpr@HEAD 0.733 ± 0.103 0.680 1.017 1.04 ± 0.17
pnpr@main 0.705 ± 0.053 0.678 0.856 1.00
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 1.0963855200800001,
      "stddev": 0.015767306790172277,
      "median": 1.09531269858,
      "user": 1.07811382,
      "system": 1.6948843800000002,
      "min": 1.07923595858,
      "max": 1.12822867258,
      "times": [
        1.0843741545799999,
        1.10518979458,
        1.10962504958,
        1.08285628958,
        1.07923595858,
        1.10039225658,
        1.10313817458,
        1.12822867258,
        1.0805817095799999,
        1.0902331405799999
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 1.12899275058,
      "stddev": 0.02717144550092835,
      "median": 1.12023069858,
      "user": 1.1274129199999998,
      "system": 1.6807867799999996,
      "min": 1.10546917158,
      "max": 1.19010319158,
      "times": [
        1.1111581555799999,
        1.12367230058,
        1.19010319158,
        1.12989797058,
        1.10546917158,
        1.12926990558,
        1.16302963658,
        1.11092953858,
        1.1096085385799999,
        1.11678909658
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.7328936994799999,
      "stddev": 0.10307706496911469,
      "median": 0.6929744930799999,
      "user": 0.34540121999999995,
      "system": 1.3039644799999999,
      "min": 0.68044786558,
      "max": 1.01652413858,
      "times": [
        0.68651350458,
        0.68745702958,
        1.01652413858,
        0.70042317158,
        0.68133094058,
        0.68394698958,
        0.69849195658,
        0.76313062958,
        0.68044786558,
        0.73067076858
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.7052651398800002,
      "stddev": 0.053483854114212616,
      "median": 0.68803665258,
      "user": 0.33607941999999996,
      "system": 1.3196786799999998,
      "min": 0.67831662858,
      "max": 0.8561760645800001,
      "times": [
        0.69794131958,
        0.68889870858,
        0.70086527658,
        0.68660046958,
        0.67831662858,
        0.69201663858,
        0.8561760645800001,
        0.68188742558,
        0.68277427058,
        0.68717459658
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, cold cache + hot store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 2.606 ± 0.053 2.543 2.734 3.83 ± 0.10
pacquet@main 4.827 ± 0.023 4.790 4.860 7.10 ± 0.13
pnpr@HEAD 0.680 ± 0.012 0.666 0.701 1.00
pnpr@main 0.715 ± 0.073 0.679 0.915 1.05 ± 0.11
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 2.6055066480999995,
      "stddev": 0.052931214444024294,
      "median": 2.5937599026999996,
      "user": 1.52497646,
      "system": 1.9640156000000002,
      "min": 2.5425557031999997,
      "max": 2.7340704901999997,
      "times": [
        2.7340704901999997,
        2.5593596302,
        2.5425557031999997,
        2.5813255141999996,
        2.5947445061999996,
        2.5835727792,
        2.5927752992,
        2.6118493901999997,
        2.6386140231999997,
        2.6161991452
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 4.8271101946999995,
      "stddev": 0.02348898761626899,
      "median": 4.829924288699999,
      "user": 1.54020556,
      "system": 1.9433221,
      "min": 4.7904453552,
      "max": 4.8601295752,
      "times": [
        4.7982534082,
        4.8393144812,
        4.810471404199999,
        4.7904453552,
        4.8508686552,
        4.8452545682,
        4.8149871132,
        4.820534096199999,
        4.8408432902,
        4.8601295752
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.6799896228000001,
      "stddev": 0.012080537940404326,
      "median": 0.6823985617000001,
      "user": 0.33468455999999996,
      "system": 1.3077908999999999,
      "min": 0.6657399492,
      "max": 0.7012546852,
      "times": [
        0.7012546852,
        0.6805471602000001,
        0.6854097562,
        0.6919225582,
        0.6699023292,
        0.6863578782,
        0.6680819802000001,
        0.6664299682,
        0.6842499632000001,
        0.6657399492
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.7146822166,
      "stddev": 0.07270580727996194,
      "median": 0.6854143107,
      "user": 0.34258555999999996,
      "system": 1.3053927,
      "min": 0.6786600332,
      "max": 0.9151457172,
      "times": [
        0.6830623142000001,
        0.6925622112,
        0.7108437752000001,
        0.6873692052,
        0.7358830532,
        0.6834594162000001,
        0.6805265872,
        0.6786600332,
        0.9151457172,
        0.6793098532
      ]
    }
  ]
}

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12329
Testbedpacquet
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
isolated-linker.fresh-install.cold-cache.cold-store📈 view plot
🚷 view threshold
3,902.83 ms
(-57.61%)Baseline: 9,206.72 ms
11,048.06 ms
(35.33%)
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
🚷 view threshold
2,605.51 ms
(-47.85%)Baseline: 4,995.80 ms
5,994.96 ms
(43.46%)
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
🚷 view threshold
1,096.39 ms
(-21.97%)Baseline: 1,405.14 ms
1,686.17 ms
(65.02%)
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
🚷 view threshold
4,360.99 ms
(-56.99%)Baseline: 10,138.46 ms
12,166.15 ms
(35.85%)
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
🚷 view threshold
713.93 ms
(+9.01%)Baseline: 654.91 ms
785.90 ms
(90.84%)
🐰 View full continuous benchmarking report in Bencher

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12329
Testbedpnpr

⚠️ WARNING: No Threshold found!

Without a Threshold, no Alerts will ever be generated.

Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the --ci-only-thresholds flag.

Click to view all benchmark results
BenchmarkLatencymilliseconds (ms)
isolated-linker.fresh-install.cold-cache.cold-store📈 view plot
⚠️ NO THRESHOLD
2,306.75 ms
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
679.99 ms
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
732.89 ms
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
⚠️ NO THRESHOLD
2,373.51 ms
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
787.05 ms
🐰 View full continuous benchmarking report in Bencher

zkochan added 2 commits June 11, 2026 18:17
…check

force_symlink_dir's up-to-date check joined the existing link's
relative contents onto the link's parent and compared the result
verbatim against the wanted target. The relative contents symlink_dir
writes contain parent segments (.pnpm layout links are
../../<pkg>/node_modules/<name>), so the joined path never compared
equal and every such link was unlinked and recreated instead of
reused. Node's path.relative — which upstream symlink-dir's
isExistingSymlinkUpToDate builds on — resolves its arguments, so
upstream treats those links as up to date.

Run both sides through lexical_normalize before comparing. A time
profile of the babylon fixture's warm install tail was dominated by
exactly this unlink + symlink churn; the fix cuts the warm-cache
install from 6.8s to 4.7s and the warm frozen install from 4.2s to
2.3s on that fixture.
The default was min(64, max(workers * 3, 16)), deriving the floor from
the CPU count. Downloads are I/O-bound: on a 4-vCPU CI runner the
formula yields 16 concurrent requests, leaving a low-latency registry
unsaturated while multi-hundred-tarball installs drain 16 at a time.
The new default is min(96, max(workers * 3, 64)). The
networkConcurrency setting still overrides it.

Applied to pnpm's package-requester, the lockfile-resolution verifier
fan-out that mirrors its floor, and the same two spots in pacquet.
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit c99510c

The Lint and Test (ubuntu-latest) job started failing on main and on
PR branches with the linker dying mid-build — explicitly with "No
space left on device", or with "ld terminated with signal 7 [Bus
error]" (a SIGBUS on the linker's memory-mapped output when the disk
fills). The job builds the workspace twice over (clippy --all-targets
plus the nextest test build), and the combined debug artifacts no
longer fit in the hosted runner's free disk.

Remove the preinstalled toolchains the job never touches (.NET,
Android, GHC, CodeQL — roughly 25 GB) before compiling anything.
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit f86db31

A near-full affected-packages test sweep plus the pnpr Rust build
exhausted the hosted runner's disk mid-test — the runner worker died
with "No space left on device" while the test step was still
running. Same remedy as the pacquet lint-and-test job: remove the
preinstalled toolchains the job never touches (.NET, Android, GHC,
CodeQL — roughly 25 GB) before doing any work.
@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Jun 11, 2026

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 28e8cee

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

# Scenario main HEAD
1 Isolated linker: fresh restore, hot cache + hot store 2.271s ± 0.053s 2.301s ± 0.109s
2 Isolated linker: fresh add new dep, hot cache + hot store 5.621s ± 0.077s 5.739s ± 0.067s
3 Isolated linker: fresh install, hot cache + hot store 5.751s ± 0.076s 5.781s ± 0.079s
4 Isolated linker: fresh restore, cold cache + cold store 8.035s ± 0.135s 6.925s ± 0.044s
5 Isolated linker: fresh install, cold cache + cold store 12.412s ± 0.353s 12.178s ± 0.194s
6 GVS linker: fresh restore, hot cache + hot store 1.131s ± 0.026s 1.145s ± 0.045s

Run 27363215302 · 10 runs per scenario · triggered by @zkochan

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Code Coverage

Failed stage: Run [❌]

Failed test name: ""

Failure summary:

  • The CI job failed during the Rust test build/coverage step (cargo codecov / cargo nextest run)
    because rustc could not link several pacquet-cli test binaries; the linker (cc invoking collect2/ld
    with rust-lld) crashed with signal 7 [Bus error] (e.g., while linking tests from
    pacquet/crates/cli/tests/exec.rs, pnpr_install.rs, dedupe_injected_deps.rs, lifecycle_scripts.rs),
    causing cargo test --no-run to fail and cargo nextest run to exit with code 101.
  • The runner reported it was almost out of disk space (##[warning]You are running out of disk space...
    Free space left: 91 MB), which likely contributed to the linker crashing with a bus error during the
    heavy link step.
  • Earlier, pnpm dependency install logged a native module install failure
    (.../node_modules/fuse-native install: Error: spawn node-gyp ENOENT), indicating node-gyp was
    missing; however, the job proceeded past this and the final failure was the Rust linker crash.
Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

322:  - /home/runner/work/pnpm/pnpm/pacquet/tasks/integrated-benchmark/Cargo.toml
323:  - /home/runner/work/pnpm/pnpm/pacquet/tasks/micro-benchmark/Cargo.toml
324:  - /home/runner/work/pnpm/pnpm/pacquet/tasks/registry-mock/Cargo.toml
325:  - /home/runner/work/pnpm/pnpm/pnpr/crates/pnpr-fixtures/Cargo.toml
326:  - /home/runner/work/pnpm/pnpm/pnpr/crates/pnpr/Cargo.toml
327:  - /home/runner/work/pnpm/pnpm/rust-toolchain.toml
328:  ##[endgroup]
329:  ... Restoring cache ...
330:  No cache found.
331:  ##[group]Run taiki-e/install-action@873c7452cadb7c034694a1282227095d93fbdf92
332:  with:
333:  tool: cargo-llvm-cov
334:  checksum: true
335:  fallback: cargo-binstall
336:  env:
337:  CACHE_ON_FAILURE: false
338:  CARGO_INCREMENTAL: 0
339:  ##[endgroup]
340:  ##[group]Run bail() {
341:  �[36;1mbail() {�[0m
342:  �[36;1m  printf '::error::install-action: %s\n' "$*"�[0m
343:  �[36;1m  exit 1�[0m
...

354:  �[36;1m    if command -v sudo >/dev/null; then�[0m
355:  �[36;1m      sudo apk --no-cache add bash�[0m
356:  �[36;1m    elif command -v doas >/dev/null; then�[0m
357:  �[36;1m      doas apk --no-cache add bash�[0m
358:  �[36;1m    else�[0m
359:  �[36;1m      apk --no-cache add bash�[0m
360:  �[36;1m    fi�[0m
361:  �[36;1m    printf '::endgroup::\n'�[0m
362:  �[36;1m  else�[0m
363:  �[36;1m    bail 'this action requires bash'�[0m
364:  �[36;1m  fi�[0m
365:  �[36;1mfi�[0m
366:  �[36;1mbash --noprofile --norc "${GITHUB_ACTION_PATH:?}/main.sh"�[0m
367:  shell: /usr/bin/env -u ENV -u BASH_ENV -u CDPATH -u SHELLOPTS -u BASHOPTS /bin/sh -eu {0}
368:  env:
369:  CACHE_ON_FAILURE: false
370:  CARGO_INCREMENTAL: 0
...

377:  RUNNER_ARCH: X64
378:  ##[endgroup]
379:  info: host platform: x86_64_linux
380:  info: installing cargo-llvm-cov@latest
381:  info: downloading https://github.com/taiki-e/cargo-llvm-cov/releases/download/v0.8.7/cargo-llvm-cov-x86_64-unknown-linux-musl.tar.gz
382:  info: verifying sha256 checksum for cargo-llvm-cov-x86_64-unknown-linux-musl.tar.gz
383:  info: cargo-llvm-cov installed at /home/runner/.cargo/bin/cargo-llvm-cov
384:  + cargo-llvm-cov llvm-cov --version
385:  cargo-llvm-cov 0.8.7
386:  ##[group]Run taiki-e/install-action@873c7452cadb7c034694a1282227095d93fbdf92
387:  with:
388:  tool: cargo-nextest
389:  checksum: true
390:  fallback: cargo-binstall
391:  env:
392:  CACHE_ON_FAILURE: false
393:  CARGO_INCREMENTAL: 0
394:  ##[endgroup]
395:  ##[group]Run bail() {
396:  �[36;1mbail() {�[0m
397:  �[36;1m  printf '::error::install-action: %s\n' "$*"�[0m
398:  �[36;1m  exit 1�[0m
...

409:  �[36;1m    if command -v sudo >/dev/null; then�[0m
410:  �[36;1m      sudo apk --no-cache add bash�[0m
411:  �[36;1m    elif command -v doas >/dev/null; then�[0m
412:  �[36;1m      doas apk --no-cache add bash�[0m
413:  �[36;1m    else�[0m
414:  �[36;1m      apk --no-cache add bash�[0m
415:  �[36;1m    fi�[0m
416:  �[36;1m    printf '::endgroup::\n'�[0m
417:  �[36;1m  else�[0m
418:  �[36;1m    bail 'this action requires bash'�[0m
419:  �[36;1m  fi�[0m
420:  �[36;1mfi�[0m
421:  �[36;1mbash --noprofile --norc "${GITHUB_ACTION_PATH:?}/main.sh"�[0m
422:  shell: /usr/bin/env -u ENV -u BASH_ENV -u CDPATH -u SHELLOPTS -u BASHOPTS /bin/sh -eu {0}
423:  env:
424:  CACHE_ON_FAILURE: false
425:  CARGO_INCREMENTAL: 0
...

434:  info: host platform: x86_64_linux
435:  info: installing cargo-nextest@latest
436:  info: downloading https://github.com/nextest-rs/nextest/releases/download/cargo-nextest-0.9.137/cargo-nextest-0.9.137-x86_64-unknown-linux-gnu.tar.gz
437:  info: verifying sha256 checksum for cargo-nextest-0.9.137-x86_64-unknown-linux-gnu.tar.gz
438:  info: cargo-nextest installed at /home/runner/.cargo/bin/cargo-nextest
439:  + cargo-nextest nextest --version
440:  cargo-nextest 0.9.137 (75ddba7e9 2026-05-26)
441:  release: 0.9.137
442:  commit-hash: 75ddba7e911b44c5c0700dac0415d824403de9bd
443:  commit-date: 2026-05-26
444:  host: x86_64-unknown-linux-gnu
445:  ##[group]Run rustup component add llvm-tools-preview
446:  �[36;1mrustup component add llvm-tools-preview�[0m
447:  shell: /usr/bin/bash -e {0}
448:  env:
449:  CACHE_ON_FAILURE: false
450:  CARGO_INCREMENTAL: 0
451:  ##[endgroup]
452:  info: downloading component llvm-tools
453:  ##[group]Run pnpm/setup@b1cac37306e39c21283b9dd6cb0ac288fb35ba6b
454:  with:
455:  install: false
456:  dest: ~/setup-pnpm
457:  cache: false
458:  cache-dependency-path: pnpm-lock.yaml
459:  package-json-file: package.json
460:  env:
461:  CACHE_ON_FAILURE: false
462:  CARGO_INCREMENTAL: 0
...

485:  global:
486:  + node 26.3.0
487:  Done in 2.5s using pnpm v11.5.3
488:  ##[endgroup]
489:  ##[group]Run actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae
490:  with:
491:  key: codecov-pnpm-v11-Linux
492:  path: /home/runner/setup-pnpm/node_modules/.bin/store/v11
493:  /.local/share/pnpm/store/v11
494:  
495:  enableCrossOsArchive: false
496:  fail-on-cache-miss: false
497:  lookup-only: false
498:  save-always: false
499:  env:
500:  CACHE_ON_FAILURE: false
501:  CARGO_INCREMENTAL: 0
...

503:  ##[endgroup]
504:  Cache hit for: codecov-pnpm-v11-Linux
505:  Received 12582912 of 192239752 (6.5%), 12.0 MBs/sec
506:  Received 134217728 of 192239752 (69.8%), 63.8 MBs/sec
507:  Received 192239752 of 192239752 (100.0%), 81.0 MBs/sec
508:  Cache Size: ~183 MB (192239752 B)
509:  [command]/usr/bin/tar -xf /home/runner/work/_temp/d5f3426b-c493-4f3e-92b1-bdef3e19d00b/cache.tzst -P -C /home/runner/work/pnpm/pnpm --use-compress-program unzstd
510:  Cache restored successfully
511:  Cache restored from key: codecov-pnpm-v11-Linux
512:  ##[group]Run taiki-e/install-action@873c7452cadb7c034694a1282227095d93fbdf92
513:  with:
514:  tool: just
515:  checksum: true
516:  fallback: cargo-binstall
517:  env:
518:  CACHE_ON_FAILURE: false
519:  CARGO_INCREMENTAL: 0
520:  PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
521:  ##[endgroup]
522:  ##[group]Run bail() {
523:  �[36;1mbail() {�[0m
524:  �[36;1m  printf '::error::install-action: %s\n' "$*"�[0m
525:  �[36;1m  exit 1�[0m
...

536:  �[36;1m    if command -v sudo >/dev/null; then�[0m
537:  �[36;1m      sudo apk --no-cache add bash�[0m
538:  �[36;1m    elif command -v doas >/dev/null; then�[0m
539:  �[36;1m      doas apk --no-cache add bash�[0m
540:  �[36;1m    else�[0m
541:  �[36;1m      apk --no-cache add bash�[0m
542:  �[36;1m    fi�[0m
543:  �[36;1m    printf '::endgroup::\n'�[0m
544:  �[36;1m  else�[0m
545:  �[36;1m    bail 'this action requires bash'�[0m
546:  �[36;1m  fi�[0m
547:  �[36;1mfi�[0m
548:  �[36;1mbash --noprofile --norc "${GITHUB_ACTION_PATH:?}/main.sh"�[0m
549:  shell: /usr/bin/env -u ENV -u BASH_ENV -u CDPATH -u SHELLOPTS -u BASHOPTS /bin/sh -eu {0}
550:  env:
551:  CACHE_ON_FAILURE: false
552:  CARGO_INCREMENTAL: 0
...

558:  ACTION_USER_AGENT: taiki-e/install-action (873c7452cadb7c034694a1282227095d93fbdf92)
559:  RUNNER_OS: Linux
560:  RUNNER_ARCH: X64
561:  ##[endgroup]
562:  info: host platform: x86_64_linux
563:  info: installing just@latest
564:  info: downloading https://github.com/casey/just/releases/download/1.51.0/just-1.51.0-x86_64-unknown-linux-musl.tar.gz
565:  info: verifying sha256 checksum for just-1.51.0-x86_64-unknown-linux-musl.tar.gz
566:  info: just installed at /home/runner/.cargo/bin/just
567:  + just --version
568:  just 1.51.0
569:  ##[group]Run just install
570:  �[36;1mjust install�[0m
571:  shell: /usr/bin/bash -e {0}
572:  env:
573:  CACHE_ON_FAILURE: false
574:  CARGO_INCREMENTAL: 0
...

580:  Scope: all 206 workspace projects
581:  Lockfile is up to date, resolution step is skipped
582:  ▶ Using pacquet for this install
583:  pacquet is pnpm's Rust install engine (preview); declared in configDependencies.
584:  ? Verifying lockfile against supply-chain policies (1714 entries)...
585:  ✓ Lockfile passes supply-chain policies (1714 entries in 14s)
586:  Packages: +1654
587:  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
588:  Progress: resolved 1, reused 0, downloaded 0, added 0
589:  Packages are hard linked from the content-addressable store to the virtual store.
590:  Content-addressable store is at: /home/runner/setup-pnpm/node_modules/.bin/store/v11
591:  Virtual store is at:             ../../../setup-pnpm/node_modules/.bin/store/v11/links
592:  Progress: resolved 1654, reused 1654, downloaded 0, added 1654, done
593:  .../node_modules/fuse-native install$ node-gyp-build
594:  .../node_modules/fuse-native install: node:events:487
595:  .../node_modules/fuse-native install:       throw er; // Unhandled 'error' event
596:  .../node_modules/fuse-native install:       ^
597:  .../node_modules/fuse-native install: 
598:  .../node_modules/fuse-native install: Error: spawn node-gyp ENOENT
599:  .../node_modules/fuse-native install:     at ChildProcess._handle.onexit (node:internal/child_process:286:19)
600:  .../node_modules/fuse-native install:     at onErrorNT (node:internal/child_process:507:16)
601:  .../node_modules/fuse-native install:     at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
602:  .../node_modules/fuse-native install: Emitted 'error' event on ChildProcess instance at:
603:  .../node_modules/fuse-native install:     at ChildProcess._handle.onexit (node:internal/child_process:292:12)
604:  .../node_modules/fuse-native install:     at onErrorNT (node:internal/child_process:507:16)
605:  .../node_modules/fuse-native install:     at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {
606:  .../node_modules/fuse-native install:   errno: -2,
607:  .../node_modules/fuse-native install:   code: 'ENOENT',
608:  .../node_modules/fuse-native install:   syscall: 'spawn node-gyp',
609:  .../node_modules/fuse-native install:   path: 'node-gyp',
610:  .../node_modules/fuse-native install:   spawnargs: [ 'rebuild' ]
611:  .../node_modules/fuse-native install: }
612:  .../node_modules/fuse-native install: 
613:  .../node_modules/fuse-native install: Node.js v26.3.0
614:  .../node_modules/fuse-native install: Failed
615:  . prepare$ husky
...

644:  + lcov-result-merger 5.0.1
645:  + node 26.3.0
646:  + rimraf 6.1.3
647:  + shx 0.4.0
648:  + typescript 5.9.3
649:  Done in 16.2s using pnpm v11.5.3
650:  ##[group]Run # removing env vars is a temporary workaround for unit tests in pacquet relying on external environment
651:  �[36;1m# removing env vars is a temporary workaround for unit tests in pacquet relying on external environment�[0m
652:  �[36;1m# this should be removed in the future�[0m
653:  �[36;1munset PNPM_HOME�[0m
654:  �[36;1munset XDG_DATA_HOME�[0m
655:  �[36;1m�[0m
656:  �[36;1mcargo codecov --lcov --output-path lcov.info�[0m
657:  shell: /usr/bin/bash -e {0}
658:  env:
659:  CACHE_ON_FAILURE: false
660:  CARGO_INCREMENTAL: 0
...

821:  Downloaded tracing-core v0.1.36
822:  Downloaded tracing-attributes v0.1.31
823:  Downloaded ring v0.17.14
824:  Downloaded quinn-proto v0.11.14
825:  Downloaded rusqlite v0.39.0
826:  Downloaded regex-automata v0.4.14
827:  Downloaded object v0.37.3
828:  Downloaded tower-layer v0.3.3
829:  Downloaded toml_parser v1.1.2+spec-1.1.0
830:  Downloaded rsa v0.9.10
831:  Downloaded quinn v0.11.9
832:  Downloaded portable-atomic v1.13.1
833:  Downloaded object_store v0.12.5
834:  Downloaded tokio-rustls v0.26.4
835:  Downloaded tinytemplate v1.2.1
836:  Downloaded thiserror-impl v2.0.18
837:  Downloaded socket2 v0.5.10
838:  Downloaded reqwest v0.13.4
839:  Downloaded reqwest v0.12.28
840:  Downloaded regex-syntax v0.8.10
841:  Downloaded regex v1.12.3
842:  Downloaded rayon v1.12.0
843:  Downloaded plotters v0.3.7
844:  Downloaded moka v0.12.15
845:  Downloaded hickory-proto v0.26.1
846:  Downloaded tokio-io-timeout v1.2.1
847:  Downloaded tinyvec_macros v0.1.1
848:  Downloaded tinyvec v1.11.0
849:  Downloaded tinystr v0.8.3
850:  Downloaded thread_local v1.1.9
851:  Downloaded thiserror-impl v1.0.69
852:  Downloaded thiserror v2.0.18
853:  Downloaded thiserror v1.0.69
854:  Downloaded textwrap v0.16.2
...

904:  Downloaded serde_core v1.0.228
905:  Downloaded semver v1.0.28
906:  Downloaded rustversion v1.0.22
907:  Downloaded rustls-native-certs v0.8.3
908:  Downloaded quick-xml v0.38.4
909:  Downloaded p384 v0.13.1
910:  Downloaded nom v8.0.0
911:  Downloaded bstr v1.12.1
912:  Downloaded aws-lc-rs v1.16.3
913:  Downloaded slab v0.4.12
914:  Downloaded siphasher v1.0.3
915:  Downloaded sha-1 v0.10.1
916:  Downloaded serdect v0.3.0
917:  Downloaded serdect v0.2.0
918:  Downloaded serde_urlencoded v0.7.1
919:  Downloaded serde_path_to_error v0.1.20
920:  Downloaded serde_derive v1.0.228
921:  Downloaded self_cell v1.2.2
922:  Downloaded sec1 v0.7.3
923:  Downloaded scopeguard v1.2.0
924:  Downloaded same-file v1.0.6
925:  Downloaded rustc-demangle v0.1.27
926:  Downloaded rmp-serde v1.3.1
927:  Downloaded rmp v0.8.15
928:  Downloaded rand_core v0.10.1
929:  Downloaded rand_core v0.9.5
930:  Downloaded rand_core v0.6.4
931:  Downloaded rand_chacha v0.9.0
932:  Downloaded rand_chacha v0.3.1
933:  Downloaded prost v0.12.6
934:  Downloaded proc-macro2 v1.0.106
935:  Downloaded proc-macro-error2 v2.0.1
936:  Downloaded prettyplease v0.2.37
...

954:  Downloaded hickory-resolver v0.26.1
955:  Downloaded hashbrown v0.17.0
956:  Downloaded hashbrown v0.16.1
957:  Downloaded hashbrown v0.14.5
958:  Downloaded h2 v0.4.13
959:  Downloaded h2 v0.3.27
960:  Downloaded futures-util v0.3.32
961:  Downloaded clap_builder v4.6.0
962:  Downloaded chrono v0.4.44
963:  Downloaded bitvec v1.0.1
964:  Downloaded bindgen v0.66.1
965:  Downloaded axum v0.8.9
966:  Downloaded rustc-hash v2.1.2
967:  Downloaded rustc-hash v1.1.0
968:  Downloaded project-root v0.2.2
969:  Downloaded proc-macro-error-attr2 v2.0.0
970:  Downloaded proc-macro-crate v3.5.0
...

1291:  Compiling scopeguard v1.2.0
1292:  Compiling lock_api v0.4.14
1293:  Compiling libm v0.2.16
1294:  Compiling parking_lot v0.12.5
1295:  Compiling num-traits v0.2.19
1296:  Compiling errno v0.3.14
1297:  Compiling signal-hook-registry v1.4.8
1298:  Compiling tokio-macros v2.7.0
1299:  Compiling mio v1.2.0
1300:  Compiling socket2 v0.6.3
1301:  Compiling tokio v1.52.3
1302:  Compiling getrandom v0.3.4
1303:  Compiling futures-core v0.3.32
1304:  Compiling minimal-lexical v0.2.1
1305:  Compiling fnv v1.0.7
1306:  Compiling thiserror v1.0.69
1307:  Compiling futures-sink v0.3.32
1308:  Compiling fastrand v2.4.1
1309:  Compiling tempfile v3.27.0
1310:  Compiling thiserror-impl v1.0.69
1311:  Compiling slab v0.4.12
1312:  Compiling futures-channel v0.3.32
1313:  Compiling futures-macro v0.3.32
1314:  Compiling futures-io v0.3.32
1315:  Compiling futures-task v0.3.32
1316:  Compiling heck v0.5.0
1317:  Compiling futures-util v0.3.32
1318:  Compiling synstructure v0.13.2
1319:  Compiling sha2 v0.10.9
1320:  Compiling ahash v0.8.12
1321:  Compiling thiserror v2.0.18
1322:  Compiling zerofrom-derive v0.1.7
1323:  Compiling nom v7.1.3
1324:  Compiling thiserror-impl v2.0.18
1325:  Compiling cmake v0.1.58
...

1725:  Compiling http-range-header v0.3.1
1726:  Compiling tower-http v0.4.4
1727:  Compiling futures v0.3.32
1728:  Compiling phf v0.11.3
1729:  Compiling cipher v0.5.2
1730:  Compiling libsql-sys v0.9.30
1731:  Compiling cbc v0.1.2
1732:  Compiling libsql_replication v0.9.30
1733:  Compiling tonic-web v0.11.0
1734:  Compiling blowfish v0.10.0
1735:  Compiling reqwest v0.12.28
1736:  Compiling libsql-hrana v0.9.30
1737:  Compiling axum-core v0.5.6
1738:  Compiling bincode v1.3.3
1739:  Compiling quick-xml v0.38.4
1740:  Compiling serde_path_to_error v0.1.20
1741:  Compiling matchit v0.8.4
...

1751:  Compiling difflib v0.4.0
1752:  Compiling assert_cmd v2.2.2
1753:  Compiling termtree v0.5.1
1754:  Compiling predicates v3.1.4
1755:  Compiling predicates-tree v1.0.13
1756:  Compiling wait-timeout v0.2.1
1757:  Compiling command-extra v1.0.0
1758:  Compiling assert-json-diff v2.0.2
1759:  Compiling pnpr v0.0.1 (/home/runner/work/pnpm/pnpm/pnpr/crates/pnpr)
1760:  Compiling colored v3.1.1
1761:  Compiling mockito v1.7.2
1762:  Compiling console v0.16.3
1763:  Compiling insta v1.47.2
1764:  Compiling pacquet-testing-utils v0.0.0 (/home/runner/work/pnpm/pnpm/pacquet/crates/testing-utils)
1765:  Compiling pacquet-workspace-projects-graph v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/workspace-projects-graph)
1766:  Compiling proc-macro-error-attr2 v2.0.0
1767:  Compiling pacquet-pnpr-client v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/pnpr-client)
1768:  Compiling proc-macro-error2 v2.0.1
1769:  Compiling tabled_derive v0.11.0
1770:  Compiling pacquet-env-installer v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/env-installer)
1771:  Compiling papergrid v0.17.0
1772:  Compiling testing_table v0.3.0
1773:  Compiling console v0.15.11
1774:  Compiling shell-words v1.1.1
1775:  Compiling which v8.0.2
1776:  Compiling dialoguer v0.11.0
1777:  Compiling tabled v0.20.0
1778:  Compiling pacquet-workspace-projects-filter v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/workspace-projects-filter)
1779:  Compiling pacquet-exportable-manifest v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/exportable-manifest)
1780:  Compiling pacquet-cli v0.0.1 (/home/runner/work/pnpm/pnpm/pacquet/crates/cli)
1781:  error: linking with `cc` failed: exit status: 1
1782:  |
1783:  = note:  "cc" "-m64" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/rustc1yIy3o/symbols.o" "<2 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libtest-*,libgetopts-*,librustc_std_workspace_std-*}.rlib" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/{libpacquet_testing_utils-e9bd9e8eecbf249e,libpnpr_fixtures-c934e64d460b96bb,libpnpr-9a73e2dbedc73ca2,libbcrypt-b8456aa8787e79d0,libblowfish-787e471ab16633e8,libcipher-3636dc7648587219,libinout-cb934d8bad1dd5b4,libcrypto_common-e4380750d980faaa,libhybrid_array-4f4e51f971f130fc,libpacquet_package_manager-6f1e84f55d0b879b,libreflink_copy-5d43560bb43a2acb,libpacquet_lockfile_preferred_versions-9b97dc47278c75f2,libpacquet_config_parse_overrides-cbad09e7b4b3e758,libpacquet_resolving_tarball_resolver-2740948f129c1658,libpacquet_resolving_local_resolver-d71514b6406e19b6,libpacquet_resolving_git_resolver-184024794fba0f32,libpacquet_resolving_default_resolver-4d080061533d0b5f,libpacquet_engine_runtime_node_resolver-19a0c0723ae5ff31,libpacquet_engine_runtime_deno_resolver-db94530a387d7ab7,libpacquet_engine_runtime_bun_resolver-bc6732e051ef444b,libpacquet_crypto_shasums_file-7e017d8fbe7b9ccd,libpgp-9a9729d60d90af7d,libk256-d51a6e3e869d11b0,libp384-93043138e9964f79,libaes_kw-7873050b74de4b3c,libreplace_with-81f28afb55d1a8ee,libp256-895de651e6b0b9fe,libargon2-ebbe25d4dfd2e931,libblake2-2dd76bad99e1b43f,libpassword_hash-4dbcc43167150bcd,libbitfields-4a59acd14adbb603,libed25519_dalek-9d1f3af1ed5b91ba,libed25519-8773bb9716e216b4,libcx448-e12227cbc609c888,libsha3-60e95ec5b610bc3b,libkeccak-03beabb1bab7d0e2,libsha1_checked-815a1b7e0ee2a74d,libripemd-e511afee54865340,libp521-ea6ac85fbd8c41cd,libprimeorder-2274158d795b6325,libx25519_dalek-02d5212b5b11b88b,libcurve25519_dalek-66e8543f99440e36,libdsa-9dff3918707c04d9,libsha1-a998fc4dcac7e2a4,libtwofish-72f4b7fe70daedeb,libidea-e933f0c545eb3361,libdes-ccdc20f5ee3a70cc,libcfb_mode-622f4a2c4a69faf3,libcast5-38058ec79eafd461,libcamellia-1cb70ca9f793d3f1,libblowfish-97a454f1d9983d48,libocb3-d5dc636ce7c9f197,libnum_enum-504f36fb08bc91df,libeax-176c3b49804a8643,libcmac-222c8117403aa781,libdbl-c757c8723c259d6a,libsnafu-90f7b06648551603,libaes_gcm-cb44f8e437c02c7c,libctr-30a0e7df5786a17f,libghash-b4bc975cea5c8e8d,libpolyval-67d0018186ac5f1b,libopaque_debug-ef9e2b6d872dd625,libuniversal_hash-a7d124eb0f21047d,libaead-b5936803f873f932,libderive_builder-13eaac2a3655a437,libcrc24-f02de2ba4c478749,libbuffer_redux-8e1c3e32cee4f2b8,librsa-d364940e9856f71a,libpkcs1-4510e0edf1cd164c,libnum_bigint_dig-6bab47e8b94efdeb,libnum_iter-f7e9d2783455ae51,libnum_integer-19cabbb20b71c4f9,libecdsa-4a86b2d21c969960,librfc6979-de16f3cf42967daa,libsignature-15b638f03a4f0a8a,libelliptic_curve-54d94083b5b8f1f0,libsec1-371222cdf828127d,libpkcs8-a0e822fc04c43060,libspki-b6a87095c77b7ed9,libder-00252a8f7b190678,libpem_rfc7468-0f637a961ef6df70,libbase64ct-94e4fcf23fe022ef,libhkdf-bcf1cb969fe7b748,libhmac-7a036116d59424b4,libcrypto_bigint-f5c3a92f48a3b33a,libserdect-b6506cae1874cc23,libbase16ct-f7805fac3c2739cc,libgroup-cfe0f7c5fca1c3ae,libff-10571b63a06540ee,libbitvec-1631922f6ee309c5,libwyz-d62789bff53e7200,libtap-6a06a261a936a81e,libradium-6424756134ad0793,libfunty-0b5b5ad8874d6b6f,libnom-46e3497f8a7e5a68,libpacquet_directory_fetcher-e3ae83ac6a2befc7,libpacquet_git_fetcher-b36268326a500e93,libignore-bc0d3ed02b97fc23,libglobset-be066c50e8c2dda1,libpacquet_cmd_shim-aa790d7c7012c7df,libpacquet_lockfile_verification-485aa903b06c75a1,libpacquet_real_hoist-de51795a642f1d92,libpacquet_graph_hasher-bbb52cd269f94028,libpacquet_resolving_deps_resolver-3ed4304c51df07af,libpacquet_resolving_parse_wanted_dependency-91996a4ac6cba29a,libpacquet_hooks-b66098927758ff0a,libpacquet_modules_yaml-5674f5c50bf7a484,libpacquet_catalogs_resolver-efcca4ce6e9402b2,libpacquet_resolving_npm_resolver-a95a4bef49eb5fde,libpacquet_workspace_spec-da2010f2d3acbfc1,libpacquet_workspace_range_resolver-efc7c451a6815635,libpacquet_resolving_jsr_specifier_parser-c711f2c7723b92c2,libpacquet_resolving_resolver_base-231867ad758330fc,libpacquet_executor-62bb686fad353400,libpacquet_deps_path-2e6c28d59f5199e6,libpacquet_workspace_manifest_writer-e759257103449200,libyamlpatch-f0c3397abac5b646,libsubfeature-e9d46e4f1c447e11,libyaml_serde-f92c83ffc6fd2e29,liblibyaml_rs-84d43dcccb17f114,libyamlpath-199b72cab2ca2c0a,libtree_sitter_yaml-ba17894f173fdf50,libself_cell-52d167ae0916e98d,libtree_sitter_iter-bfe7b65cfe92122c,libtree_sitter-fd17c59fc04cda19,libtree_sitter_language-59165428aec6e04a,libstreaming_iterator-953fb8a0436e38a7,libline_index-143447e0cf848df7,libtext_size-b58be525b5b35466,libpacquet_tarball-fa0d41941b440e94,libzip-421bd11270c0c186,libzopfli-42f78a0e8e741a9c,libbumpalo-dc8144da1e312347,libtyped_path-5f705059c01748ed,libcrc32fast-b2a67b3a037cfcf4,libnum_cpus-074b6ce0c8a750d3,libzune_inflate-a30344356361a12f,libtar-a423180291e4ce80,libxattr-77e5bd3ef9ed7049,libfiletime-f96d7a6bf02fdbc9,librayon-3b7c4275bbd2f2d3,librayon_core-c2b7495990cdac4d,libcrossbeam_deque-fd75e2367bfbac53,libpacquet_reporter-99cacdb9f00ea5db,libgethostname-41cfd755579ec1d7,libpacquet_registry-3fe5a74a786b16f8,libpacquet_catalogs_protocol_parser-f70a116c156a00b1,libpacquet_catalogs_config-1cefde6e88fc00d3,libpacquet_workspace-40bcaed47625429e,libpacquet_lockfile-d20ab959a50e145d,libsplit_first_char-4b80e14353444811,libpacquet_package_manifest-1036d018fabae44e,libstrum-2634dcb21ebf0f2a,libpacquet_config-870b84cecb8ede5b,libpacquet_catalogs_types-622ae109d6d5c348,libserde_saphyr-35a55cdf320f433a,libnohash_hasher-850e48eb4f7a21f4,libannotate_snippets-c626bca3c599c56e,libencoding_rs_io-67173d1573591f44,libencoding_rs-0912fa57cf973019,libgranit_parser-91a77c04331e35d2,libarraydeque-1ce0013c12f92670,libpacquet_detect_libc-99b6e2332db6b7d7,libpacquet_config_dir-e809c1e90e385d3d,libhome-fdc1285661336816,libpacquet_patching-4318ed86e6f1fe26,libdiffy-723f60c7c819cc0d,libpipe_trait-86035dbb960b8cf0,libpacquet_workspace_state-a4f14f802403d877,libpacquet_diagnostics-d45c8cccd916c945,libtracing_subscriber-408f5ae9394b554a,libtracing_serde-65940c9d6193b0ed,libsharded_slab-50e15c5fccbdfda4,liblazy_static-3d37b1a11059e06e,libspin-b5b5a132b5043064,libmatchers-85aef365026e317b,libnu_ansi_term-443c870256a62115,libthread_local-61fd7985993a1083,libtracing_log-e1cfdb645c924c78,libpacquet_package_is_installable-0c5fd3b3fc21c93a,libnode_semver-90c9eb569c0c84fb,libbytecount-2580736716603f74,libpacquet_network-6411449fd94633e4,libpacquet_store_dir-12fe574b3d9b2e83,librmp_serde-da3011a47251af2b,librmp-0c14324d13ecde42,libdunce-4f7b53b0577547b7,libpacquet_crypto_hash-21c5868b2116c284,libpacquet_fs-045484ce521996d1,libpathdiff-8d444ca36d350964,libmiette-3688a0ac0b3d6118,libbacktrace_ext-21d57bae4d276205,libsupports_unicode-44122fcd5fb41e59,libsupports_hyperlinks-c0a7e7f6312ae00d,libterminal_size-5646234fefb4dbde,libtextwrap-8a48f29a484862ae,libunicode_linebreak-5cbf9d092580213f,libunicode_width-a98708a0d0280085,libbacktrace-968e3b6ae184b017,libminiz_oxide-f6d8161624ab78ba,libsimd_adler32-925de29893eec167,libobject-1b8b3603cf7183c4,libaddr2line-19e2177f29c693dd,libgimli-c615911090d9eec9,librustc_demangle-a8887304859d7499,libowo_colors-be71bfe39f5b1fd7,libsupports_color-0494ad4839a201d9,libis_terminal-f825d476684273c3,libsupports_color-11a3a097cf63a21f,libis_ci-7fa8867a68cc6cab,libdashmap-540e61ab8e6b8a9d,libssri-3a8717e98612e37c,libxxhash_rust-bf4cf64c42e84ccd,libsha1-dce56280c4afa2df,libhex-1558f6adc06e3fa8,libmiette-c1f032cfa85eb494,libunicode_width-70269c7e97ca872e,libwax-b0b9f7184f3202f2,libpori-00c7d1d529513d23,libnom-c3470952fb1649d3,libconst_format-dd799983a01623b2,libkonst-1cac0cfa423e0608,libkonst_macro_rules-3da2b3284d0e703e,libregex-356502936e7a0bd7,libderive_more-e0efe8cbfe39e0ee,libaxum-455e35f1ac642c82,libserde_path_to_error-85656e964c1f9e89,libmatchit-f6604664c502e3b3,libaxum_core-7cd089873fda864b,libreqwest-ee73c3823e918570,librustls_platform_verifier-9294b80278914a37,libhickory_resolver-de37530a28d27ace,libresolv_conf-906f928e34aace14,libmoka-47a5bb335b6ebbc6,libtagptr-92c090e36b9b4650,libcrossbeam_epoch-6b10c174837fede6,libcrossbeam_channel-498d6ef9560bdded,libcrossbeam_utils-798d90ebf7ba1c99,libhickory_net-dd18b7862e1deb40,libhickory_proto-fb6f9d8c25b05d17,librand-9b6c85a3d6d22c21,libchacha20-11a9d52f2cb76b05,libcpufeatures-74701194ceec5438,libdata_encoding-336981d754085772,libtinyvec-449225b51f86bf6d,libtinyvec_macros-ae826fd0b2f5f044,libprefix_trie-826112c2076f8e3b,libpacquet_env_replace-412bd6d4d0df2859}.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-*.rlib" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/{libobject_store-c808bb6927629edb,libhumantime-b0651db268859f9c,libthiserror-c9b33271ff70b79c,librand-68660567bfc48748,librand_chacha-4bdeeb33d5f57458,librand_core-2b417bace78b6df2,libchrono-15d34cd2877dfa9f,libiana_time_zone-171c40416e0a8cd7,libnum_traits-e50eb47c2e047db5,libquick_xml-1a6ab5c740b89b48,libmd5-b51656c798a75158,libitertools-2f2b34030a0a992e,libeither-13b7317fbde29012,libreqwest-98e7b859319ca893,libserde_urlencoded-e655643949244283,libryu-4b90c1dcb676432e,libhyper_rustls-aff1bebf0cb412cc,librustls_native_certs-f6f4a0c1b4699a07,libopenssl_probe-c752c38aa92d8eb4,libtokio_rustls-5db5c42cf3ce9928,librustls-4def617a920f24b4,libwebpki-f416b02a77cde703,libaws_lc_rs-cb46c25d692efe3e,libaws_lc_sys-da31bdcb90db56b0,libring-5f977097f5782bd1,libuntrusted-65f923ea859fb627,librustls_pki_types-c397173b213096fa,libtower_http-13d4a3b657307062,libasync_compression-1d06ecc79db3213e,libcompression_codecs-c4a7413109fbe682,libflate2-81377bed0657038b,libzlib_rs-c63547b794e18134,libcompression_core-8e4590f4f668d443,libtower-9222ce3606a45026,libhyper_util-f2357d13e6871608,libipnet-05ecbf5e69f90e68,libhyper-0573355dcd2c51c2,libh2-c92b78ba0727e14f,libatomic_waker-199214763a0024c7,libhttp_body_util-6e7b37b0667c7a46,libhttp_body-267013140a7c8953,liburl-c86916623f8bfaf9,libidna-281cb1b4bfbc2ce2,libidna_adapter-2ac52fa15a0d727b,libicu_properties-070b64c122bac2d5,libicu_properties_data-bc7a629dd0c180ce,libicu_normalizer-426b272ca04c49b4,libicu_normalizer_data-e5ab749685dfccb2,libicu_collections-55713d73f765c936,libutf8_iter-a172792584edd8df,libpotential_utf-03db8e1d59c00d8a,libicu_provider-83cbf0f5960c535e,libicu_locale_core-a23d21773a133daa,libtinystr-95e153d9065de70f,liblitemap-76e700d5cb307359,libwriteable-677268dd1071aff5,libzerovec-b61409dd219eb9ed,libzerotrie-e254cdaf2b8dafce,libyoke-dcdaba2bd2852beb,libstable_deref_trait-ef45a612cfe6babc,libzerofrom-a1a2472de1e08c08,libform_urlencoded-03d793c84e04282e,libhttp-a2525b60d02958ed,libsync_wrapper-4af35ca15e8ea58c,liblibsql-249a54a759bf9f8b,libserde_json-2eccec19d163e351,libzmij-0e702112b516ef8a,libbincode-b5073abf9eac97cd,liblibsql_hrana-d2215ba1328f1d3c,liblibsql_sqlite3_parser-d36c4fd4c063805a,libphf-beecf830ac97cbfb,libphf_shared-0635d276200ee7cb,libsiphasher-1fc4d1f2628c717a,libuncased-7d31e1a230ad3c81,libfutures-e20b1336bb0484ff,libfutures_executor-cb22df62153403c2,libtonic_web-c6ac2965a7eb4ef3,libtower_http-31cc822e9ba11df4,libanyhow-81e0f801a5d79612,liblibsql_replication-122ff750547f2bfb,libcbc-813088e4c4de3ef5,libthiserror-63ea8c111a939ddd,libaes-4520b98fa558fda7,libcipher-029987e1eb97bd3b,libinout-7ab118dc98fea522,libblock_padding-a6914652bcabcd05,libtonic-c0acd8e9c6af2225,libhyper_timeout-9c67cfd2986f8fcf,libtokio_io_timeout-a61f7bf13c86e225,libasync_stream-3c7eccb275dda546,libaxum-8c2f7385c20f679b,libpercent_encoding-b1da3b8fc2e1026a,libmatchit-6a9b5d02a71a6017,libbitflags-c787aa160115669f,libsync_wrapper-78d45ac676c842bd,libaxum_core-a74b6c32005454d3,libmime-9ed45721895d8c45,libhyper-c36786679fd553c8,libwant-1e88270185f26d8d,libtry_lock-25726098f143e8b6,libsocket2-fc75d77386513e92,libhttparse-6bdfc217418d6d1b,libh2-34a590c02501c9b7,libindexmap-198dba2d0b981f55,libequivalent-09a05a12e658fb17,libhashbrown-94cc343aca1ef306,libhttpdate-07ccb7e11552abee,libtower-605349e48d77d3d7,libindexmap-0228857876bbc1cc,libhashbrown-d2c2b82823af617a,libtokio_util-a5cc080e3ca454f6,librand-922d9e5af96fc4c5,librand_chacha-baff2ee869c7ddf5,libppv_lite86-a3fdefe0818f4d8d,libfutures_util-6ad3ecbaee2ed335,libfutures_io-4e166f08ca52ae97,libslab-ce0f3f0d172355ee,libfutures_channel-e5eae3c435cf39b0,libfutures_sink-bcea5761c467004c,libfutures_task-491ceb30f42251ea,libtower_layer-b9ce531dff4264ac,libbase64-df3838031a8300ae,libprost-77a4aa26040f4210,libpin_project-eb78f735a73f7d0c,libtower_service-4f70a3a8141e9637,libhttp_body-39fe6a58eeaf8235,libhttp-33dbd9803b95c7b4,libitoa-d62e748016f8bd79,libfnv-ab3b3d0161207bc5,libtokio_stream-ddb6683e8535273f,libfutures_core-4009a2020ea13d93,libuuid-a0ff5eb180121da1,liblibsql_sys-3dabbcd1e004431c,libtracing-8329cf2c7b6b34fd,liblog-06b20b58f54a9048,libtracing_core-d118f87c1478df4a,libtokio-51453ed86c15d674,libsignal_hook_registry-558d2c22c484c79c,liberrno-0750b0a019a98092,libsocket2-e64ebde40f5654c4,libmio-f32fdd584760272c,libpin_project_lite-d7a7c9f9297e44b9,librusqlite-a8e5d1a546233980,libfallible_iterator-b28cac1f7b576260,libhashlink-08b3aeca78e8f35d,libhashbrown-064b95fef27a8340,libahash-0f0fc2c0a5c4c67a,libgetrandom-b24966eca7962ac3,libzerocopy-3fb31ecfa03bfedb,liballocator_api2-48625379a5c54837,liblibsql_ffi-a9b1b67f4652abd9,libparking_lot-8e5d5f58d845e261,libparking_lot_core-d95e7c2da62e2029,liblock_api-371ca4ea31f9ee70,libscopeguard-094b4676443ff474,libzerocopy-c39c037756885628,libbyteorder-56459556ee3875a0,libbytes-514f2f06622d9a94,libserde-59d3499ab1347458,libserde_core-7e48bf1f092e506d,libsha2-9c53aa34fd55996b,libsha2_asm-3b7ca8f38f825fd0,libcpufeatures-e124fef1b1d91f00,libdigest-2f990220f4350e66,libsubtle-ad0f17b0720e7719,libconst_oid-a5cbb53dffc21bfb,libblock_buffer-9635b75fd0130272,libcrypto_common-643e0aa88c69411c,libgeneric_array-3192b65819868837,libtypenum-fb7926dadab61f09,libzeroize-a45fdceba86d01bf,librand_core-db2ab1aa2b9fa7c9,libgetrandom-7aab9d0a1ee8848d,librusqlite-5c258b81e55b6ede,libsmallvec-73edb3c267e33e51,libhashlink-03452b48f0fff33a,libhashbrown-6483c2b515f16c67,libfoldhash-3764f06662d6ff75,liblibsqlite3_sys-58b05c27d5f37e9b,libfallible_streaming_iterator-b9350970096c8cda,libfallible_iterator-537e5f73b7ac961f,libbase64-93d13499e98064b8,libwalkdir-f83c702250a7b97f,libsame_file-e4e8dba317b28e66,libtext_block_macros-f9909186d9008017,libtempfile-fd09a62412a1251d,libgetrandom-b7c0052498908336,librand_core-ed3dfe842b86f3fc,libcfg_if-595cd1fd9b5b1165,libfastrand-682d22190530e91c,libonce_cell-36f2c2fd46342d82,libportable_atomic-32032d9119346fe1,librustix-5279063706558141,libbitflags-4cb5efb0e892aac1,liblinux_raw_sys-44882978963cde15,libcommand_extra-64aa0e28fac29360,libassert_cmd-17f3e6f4b99950e2,libwait_timeout-1e1746c75649fc45,liblibc-337fe196a7e39b09,libbstr-b83bc4496406131c,libregex_automata-c78983431a85585d,libaho_corasick-ff515cc0422ff381,libregex_syntax-6c0fc42eb9a7b396,libmemchr-1ba191a0e30eb7bf,libpredicates_tree-7a3e8c62e4534394,libtermtree-4d11ce6bdba8a8fd,libpredicates-378dc3692663ceb2,libanstyle-14904db143869bb2,libdifflib-a7631d9323594866,libpredicates_core-15585fe9dd9e1572}.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,libcfg_if-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,liblibc-*,librustc_std_workspace_core-*,liballoc-*,libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/rustc1yIy3o/raw-dylibs" "-B<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/bin/gcc-ld" "-fuse-ld=lld" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/aws-lc-sys-4b44deba64976ba5/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/ring-c97521fda713f4f9/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/sha2-asm-bd62d3533308728c/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsqlite3-sys-45d8bb263c169a73/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-c3a8f53b15907fa7/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-yaml-bafc66c7ffc5a980/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsql-ffi-c7540c4206b7d587/out" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/exec-b05481c4e2e90ca6" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "-u" "__llvm_profile_runtime"
1784:  = note: some arguments are omitted. use `--verbose` to show all linker arguments
1785:  = note: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
1786:  collect2: fatal error: ld terminated with signal 7 [Bus error], core dumped
1787:  compilation terminated.
1788:  error: process didn't exit successfully: `/home/runner/.rustup/toolchains/1.95.0-x86_64-unknown-linux-gnu/bin/rustc --crate-name exec --edition=2024 pacquet/crates/cli/tests/exec.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 '--warn=clippy::pedantic' '--warn=clippy::nursery' '--allow=clippy::useless_let_if_seq' '--allow=clippy::use_self' '--allow=clippy::unused_async' '--allow=clippy::unreadable_literal' '--allow=clippy::unnecessary_wraps' '--allow=clippy::unnecessary_debug_formatting' --warn=unexpected_cfgs '--allow=clippy::too_many_lines' '--allow=clippy::too_long_first_doc_paragraph' '--allow=clippy::struct_excessive_bools' '--allow=clippy::single_option_map' '--allow=clippy::similar_names' '--allow=clippy::significant_drop_tightening' '--allow=clippy::redundant_pub_crate' '--allow=clippy::option_option' '--allow=clippy::option_if_let_else' '--allow=clippy::needless_continue' '--warn=clippy::mod_module_files' '--allow=clippy::missing_panics_doc' '--allow=clippy::missing_errors_doc' '--allow=clippy::missing_const_for_fn' '--allow=clippy::match_same_arms' '--allow=clippy::many_single_char_names' '--allow=clippy::literal_string_with_formatting_args' '--allow=clippy::iter_with_drain' '--allow=clippy::items_after_statements' '--allow=clippy::implicit_hasher' '--warn=clippy::if_then_some_else_none' '--allow=clippy::fn_params_excessive_bools' '--allow=clippy::doc_link_with_quotes' '--allow=clippy::derive_partial_eq_without_eq' '--allow=clippy::collection_is_never_read' '--warn=clippy::clone_on_ref_ptr' '--allow=clippy::cast_sign_loss' '--allow=clippy::cast_precision_loss' '--allow=clippy::cast_possible_wrap' '--allow=clippy::cast_possible_truncation' '--allow=clippy::case_sensitive_file_extension_comparisons' '--allow=clippy::branches_sharing_code' --check-cfg 'cfg(dylint_lib, values("perfectionist"))' --test --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=719fbe1c6cbe7795 -C extra-filename=-b05481c4e2e90ca6 --out-dir /home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps -L dependency=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps --extern assert_cmd=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libassert_cmd-17f3e6f4b99950e2.rlib --extern clap=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libclap-941a2cbb81543905.rlib --extern command_extra=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libcommand_extra-64aa0e28fac29360.rlib --extern derive_more=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libderive_more-e0efe8cbfe39e0ee.rlib --extern dialoguer=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libdialoguer-7febd194f71919f7.rlib --extern dunce=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libdunce-4f7b53b0577547b7.rlib --extern flate2=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libflate2-81377bed0657038b.rlib --extern futures_util=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libfutures_util-6ad3ecbaee2ed335.rlib --extern home=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libhome-fdc1285661336816.rlib --extern indexmap=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libindexmap-198dba2d0b981f55.rlib --extern insta=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libinsta-f2ee777ea7ee116d.rlib --extern miette=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libmiette-3688a0ac0b3d6118.rlib --extern mockito=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libmockito-e9a8f82db7ddf6ac.rlib --extern node_semver=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libnode_semver-90c9eb569c0c84fb.rlib --extern owo_colors=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libowo_colors-be71bfe39f5b1fd7.rlib --extern pacquet_catalogs_config=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_catalogs_config-1cefde6e88fc00d3.rlib --extern pacquet_cli=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_cli-15089af877993629.rlib --extern pacquet_cmd_shim=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_cmd_shim-aa790d7c7012c7df.rlib --extern pacquet_config=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_config-870b84cecb8ede5b.rlib --extern pacquet_crypto_hash=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_crypto_hash-21c5868b2116c284.rlib --extern pacquet_diagnostics=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_diagnostics-d45c8cccd916c945.rlib --extern pacquet_env_installer=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_env_installer-8884bf5e5918a737.rlib --extern pacquet_executor=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_executor-62bb686fad353400.rlib --extern pacquet_fs=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_fs-045484ce521996d1.rlib --extern pacquet_graph_hasher=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_graph_hasher-bbb52cd269f94028.rlib --extern pacquet_hooks=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_hooks-b66098927758ff0a.rlib --extern pacquet_lockfile=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_lockfile-d20ab959a50e145d.rlib --extern pacquet_network=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_network-6411449fd94633e4.rlib --extern pacquet_package_is_installable=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_package_is_installable-0c5fd3b3fc21c93a.rlib --extern pacquet_package_manager=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_package_manager-6f1e84f55d0b879b.rlib --extern pacquet_package_manifest=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_package_manifest-1036d018fabae44e.rlib --extern pacquet_pnpr_client=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_pnpr_client-d5cf1db32d74c398.rlib --extern pacquet_registry=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_registry-3fe5a74a786b16f8.rlib --extern pacquet_reporter=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_reporter-99cacdb9f00ea5db.rlib --extern pacquet_resolving_npm_resolver=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_resolving_npm_resolver-a95a4bef49eb5fde.rlib --extern pacquet_resolving_parse_wanted_dependency=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_resolving_parse_wanted_dependency-91996a4ac6cba29a.rlib --extern pacquet_store_dir=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_store_dir-12fe574b3d9b2e83.rlib --extern pacquet_tarball=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_tarball-fa0d41941b440e94.rlib --extern pacquet_testing_utils=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_testing_utils-e9bd9e8eecbf249e.rlib --extern pacquet_workspace=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_workspace-40bcaed47625429e.rlib --extern pacquet_workspace_manifest_writer=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_workspace_manifest_writer-e759257103449200.rlib --extern pacquet_workspace_projects_graph=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_workspace_projects_graph-662c6db3fce52b33.rlib --extern pacquet_workspace_state=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpacquet_workspace_state-a4f14f802403d877.rlib --extern pipe_trait=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpipe_trait-86035dbb960b8cf0.rlib --extern pnpr=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpnpr-9a73e2dbedc73ca2.rlib --extern pretty_assertions=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libpretty_assertions-edca2e574f374464.rlib --extern rayon=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/librayon-3b7c4275bbd2f2d3.rlib --extern serde=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libserde-59d3499ab1347458.rlib --extern serde_saphyr=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libserde_saphyr-35a55cdf320f433a.rlib --extern serde_json=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libserde_json-2eccec19d163e351.rlib --extern tabled=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libtabled-96bcc80256b46441.rlib --extern tar=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libtar-a423180291e4ce80.rlib --extern tempfile=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libtempfile-fd09a62412a1251d.rlib --extern tokio=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libtokio-51453ed86c15d674.rlib --extern walkdir=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libwalkdir-f83c702250a7b97f.rlib --extern which=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/libwhich-9a7acea063994320.rlib -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/aws-lc-sys-4b44deba64976ba5/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/ring-c97521fda713f4f9/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/sha2-asm-bd62d3533308728c/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/sha2-asm-bd62d3533308728c/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsqlite3-sys-45d8bb263c169a73/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-c3a8f53b15907fa7/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-yaml-bafc66c7ffc5a980/out -L native=/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsql-ffi-c7540c4206b7d587/out -C instrument-coverage --cfg=coverage` (exit status: 1)
1789:  error: could not compile `pacquet-cli` (test "exec") due to 1 previous error
1790:  warning: build failed, waiting for other jobs to finish...
1791:  error: linking with `cc` failed: exit status: 1
1792:  |
1793:  = note:  "cc" "-m64" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/rustc4YNiR0/symbols.o" "<3 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libtest-*,libgetopts-*,librustc_std_workspace_std-*}.rlib" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/{libpacquet_testing_utils-e9bd9e8eecbf249e,libpnpr_fixtures-c934e64d460b96bb,libpnpr-9a73e2dbedc73ca2,libbcrypt-b8456aa8787e79d0,libblowfish-787e471ab16633e8,libcipher-3636dc7648587219,libinout-cb934d8bad1dd5b4,libcrypto_common-e4380750d980faaa,libhybrid_array-4f4e51f971f130fc,libpacquet_package_manager-6f1e84f55d0b879b,libreflink_copy-5d43560bb43a2acb,libpacquet_lockfile_preferred_versions-9b97dc47278c75f2,libpacquet_config_parse_overrides-cbad09e7b4b3e758,libpacquet_resolving_tarball_resolver-2740948f129c1658,libpacquet_resolving_local_resolver-d71514b6406e19b6,libpacquet_resolving_git_resolver-184024794fba0f32,libpacquet_resolving_default_resolver-4d080061533d0b5f,libpacquet_engine_runtime_node_resolver-19a0c0723ae5ff31,libpacquet_engine_runtime_deno_resolver-db94530a387d7ab7,libpacquet_engine_runtime_bun_resolver-bc6732e051ef444b,libpacquet_crypto_shasums_file-7e017d8fbe7b9ccd,libpgp-9a9729d60d90af7d,libk256-d51a6e3e869d11b0,libp384-93043138e9964f79,libaes_kw-7873050b74de4b3c,libreplace_with-81f28afb55d1a8ee,libp256-895de651e6b0b9fe,libargon2-ebbe25d4dfd2e931,libblake2-2dd76bad99e1b43f,libpassword_hash-4dbcc43167150bcd,libbitfields-4a59acd14adbb603,libed25519_dalek-9d1f3af1ed5b91ba,libed25519-8773bb9716e216b4,libcx448-e12227cbc609c888,libsha3-60e95ec5b610bc3b,libkeccak-03beabb1bab7d0e2,libsha1_checked-815a1b7e0ee2a74d,libripemd-e511afee54865340,libp521-ea6ac85fbd8c41cd,libprimeorder-2274158d795b6325,libx25519_dalek-02d5212b5b11b88b,libcurve25519_dalek-66e8543f99440e36,libdsa-9dff3918707c04d9,libsha1-a998fc4dcac7e2a4,libtwofish-72f4b7fe70daedeb,libidea-e933f0c545eb3361,libdes-ccdc20f5ee3a70cc,libcfb_mode-622f4a2c4a69faf3,libcast5-38058ec79eafd461,libcamellia-1cb70ca9f793d3f1,libblowfish-97a454f1d9983d48,libocb3-d5dc636ce7c9f197,libnum_enum-504f36fb08bc91df,libeax-176c3b49804a8643,libcmac-222c8117403aa781,libdbl-c757c8723c259d6a,libsnafu-90f7b06648551603,libaes_gcm-cb44f8e437c02c7c,libctr-30a0e7df5786a17f,libghash-b4bc975cea5c8e8d,libpolyval-67d0018186ac5f1b,libopaque_debug-ef9e2b6d872dd625,libuniversal_hash-a7d124eb0f21047d,libaead-b5936803f873f932,libderive_builder-13eaac2a3655a437,libcrc24-f02de2ba4c478749,libbuffer_redux-8e1c3e32cee4f2b8,librsa-d364940e9856f71a,libpkcs1-4510e0edf1cd164c,libnum_bigint_dig-6bab47e8b94efdeb,libnum_iter-f7e9d2783455ae51,libnum_integer-19cabbb20b71c4f9,libecdsa-4a86b2d21c969960,librfc6979-de16f3cf42967daa,libsignature-15b638f03a4f0a8a,libelliptic_curve-54d94083b5b8f1f0,libsec1-371222cdf828127d,libpkcs8-a0e822fc04c43060,libspki-b6a87095c77b7ed9,libder-00252a8f7b190678,libpem_rfc7468-0f637a961ef6df70,libbase64ct-94e4fcf23fe022ef,libhkdf-bcf1cb969fe7b748,libhmac-7a036116d59424b4,libcrypto_bigint-f5c3a92f48a3b33a,libserdect-b6506cae1874cc23,libbase16ct-f7805fac3c2739cc,libgroup-cfe0f7c5fca1c3ae,libff-10571b63a06540ee,libbitvec-1631922f6ee309c5,libwyz-d62789bff53e7200,libtap-6a06a261a936a81e,libradium-6424756134ad0793,libfunty-0b5b5ad8874d6b6f,libnom-46e3497f8a7e5a68,libpacquet_directory_fetcher-e3ae83ac6a2befc7,libpacquet_git_fetcher-b36268326a500e93,libignore-bc0d3ed02b97fc23,libglobset-be066c50e8c2dda1,libpacquet_cmd_shim-aa790d7c7012c7df,libpacquet_lockfile_verification-485aa903b06c75a1,libpacquet_real_hoist-de51795a642f1d92,libpacquet_graph_hasher-bbb52cd269f94028,libpacquet_resolving_deps_resolver-3ed4304c51df07af,libpacquet_resolving_parse_wanted_dependency-91996a4ac6cba29a,libpacquet_hooks-b66098927758ff0a,libpacquet_modules_yaml-5674f5c50bf7a484,libpacquet_catalogs_resolver-efcca4ce6e9402b2,libpacquet_resolving_npm_resolver-a95a4bef49eb5fde,libpacquet_workspace_spec-da2010f2d3acbfc1,libpacquet_workspace_range_resolver-efc7c451a6815635,libpacquet_resolving_jsr_specifier_parser-c711f2c7723b92c2,libpacquet_resolving_resolver_base-231867ad758330fc,libpacquet_executor-62bb686fad353400,libpacquet_deps_path-2e6c28d59f5199e6,libpacquet_workspace_manifest_writer-e759257103449200,libyamlpatch-f0c3397abac5b646,libsubfeature-e9d46e4f1c447e11,libyaml_serde-f92c83ffc6fd2e29,liblibyaml_rs-84d43dcccb17f114,libyamlpath-199b72cab2ca2c0a,libtree_sitter_yaml-ba17894f173fdf50,libself_cell-52d167ae0916e98d,libtree_sitter_iter-bfe7b65cfe92122c,libtree_sitter-fd17c59fc04cda19,libtree_sitter_language-59165428aec6e04a,libstreaming_iterator-953fb8a0436e38a7,libline_index-143447e0cf848df7,libtext_size-b58be525b5b35466,libpacquet_tarball-fa0d41941b440e94,libzip-421bd11270c0c186,libzopfli-42f78a0e8e741a9c,libbumpalo-dc8144da1e312347,libtyped_path-5f705059c01748ed,libcrc32fast-b2a67b3a037cfcf4,libnum_cpus-074b6ce0c8a750d3,libzune_inflate-a30344356361a12f,libtar-a423180291e4ce80,libxattr-77e5bd3ef9ed7049,libfiletime-f96d7a6bf02fdbc9,librayon-3b7c4275bbd2f2d3,librayon_core-c2b7495990cdac4d,libcrossbeam_deque-fd75e2367bfbac53,libpacquet_reporter-99cacdb9f00ea5db,libgethostname-41cfd755579ec1d7,libpacquet_registry-3fe5a74a786b16f8,libpacquet_catalogs_protocol_parser-f70a116c156a00b1,libpacquet_catalogs_config-1cefde6e88fc00d3,libpacquet_workspace-40bcaed47625429e,libpacquet_lockfile-d20ab959a50e145d,libsplit_first_char-4b80e14353444811,libpacquet_package_manifest-1036d018fabae44e,libstrum-2634dcb21ebf0f2a,libpacquet_config-870b84cecb8ede5b,libpacquet_catalogs_types-622ae109d6d5c348,libserde_saphyr-35a55cdf320f433a,libnohash_hasher-850e48eb4f7a21f4,libannotate_snippets-c626bca3c599c56e,libencoding_rs_io-67173d1573591f44,libencoding_rs-0912fa57cf973019,libgranit_parser-91a77c04331e35d2,libarraydeque-1ce0013c12f92670,libpacquet_detect_libc-99b6e2332db6b7d7,libpacquet_config_dir-e809c1e90e385d3d,libhome-fdc1285661336816,libpacquet_patching-4318ed86e6f1fe26,libdiffy-723f60c7c819cc0d,libpipe_trait-86035dbb960b8cf0,libpacquet_workspace_state-a4f14f802403d877,libpacquet_diagnostics-d45c8cccd916c945,libtracing_subscriber-408f5ae9394b554a,libtracing_serde-65940c9d6193b0ed,libsharded_slab-50e15c5fccbdfda4,liblazy_static-3d37b1a11059e06e,libspin-b5b5a132b5043064,libmatchers-85aef365026e317b,libnu_ansi_term-443c870256a62115,libthread_local-61fd7985993a1083,libtracing_log-e1cfdb645c924c78,libpacquet_package_is_installable-0c5fd3b3fc21c93a,libnode_semver-90c9eb569c0c84fb,libbytecount-2580736716603f74,libpacquet_network-6411449fd94633e4,libpacquet_store_dir-12fe574b3d9b2e83,librmp_serde-da3011a47251af2b,librmp-0c14324d13ecde42,libdunce-4f7b53b0577547b7,libpacquet_crypto_hash-21c5868b2116c284,libpacquet_fs-045484ce521996d1,libpathdiff-8d444ca36d350964,libmiette-3688a0ac0b3d6118,libbacktrace_ext-21d57bae4d276205,libsupports_unicode-44122fcd5fb41e59,libsupports_hyperlinks-c0a7e7f6312ae00d,libterminal_size-5646234fefb4dbde,libtextwrap-8a48f29a484862ae,libunicode_linebreak-5cbf9d092580213f,libunicode_width-a98708a0d0280085,libbacktrace-968e3b6ae184b017,libminiz_oxide-f6d8161624ab78ba,libsimd_adler32-925de29893eec167,libobject-1b8b3603cf7183c4,libaddr2line-19e2177f29c693dd,libgimli-c615911090d9eec9,librustc_demangle-a8887304859d7499,libowo_colors-be71bfe39f5b1fd7,libsupports_color-0494ad4839a201d9,libis_terminal-f825d476684273c3,libsupports_color-11a3a097cf63a21f,libis_ci-7fa8867a68cc6cab,libdashmap-540e61ab8e6b8a9d,libssri-3a8717e98612e37c,libxxhash_rust-bf4cf64c42e84ccd,libsha1-dce56280c4afa2df,libhex-1558f6adc06e3fa8,libmiette-c1f032cfa85eb494,libunicode_width-70269c7e97ca872e,libwax-b0b9f7184f3202f2,libpori-00c7d1d529513d23,libnom-c3470952fb1649d3,libconst_format-dd799983a01623b2,libkonst-1cac0cfa423e0608,libkonst_macro_rules-3da2b3284d0e703e,libregex-356502936e7a0bd7,libderive_more-e0efe8cbfe39e0ee,libaxum-455e35f1ac642c82,libserde_path_to_error-85656e964c1f9e89,libmatchit-f6604664c502e3b3,libaxum_core-7cd089873fda864b,libreqwest-ee73c3823e918570,librustls_platform_verifier-9294b80278914a37,libhickory_resolver-de37530a28d27ace,libresolv_conf-906f928e34aace14,libmoka-47a5bb335b6ebbc6,libtagptr-92c090e36b9b4650,libcrossbeam_epoch-6b10c174837fede6,libcrossbeam_channel-498d6ef9560bdded,libcrossbeam_utils-798d90ebf7ba1c99,libhickory_net-dd18b7862e1deb40,libhickory_proto-fb6f9d8c25b05d17,librand-9b6c85a3d6d22c21,libchacha20-11a9d52f2cb76b05,libcpufeatures-74701194ceec5438,libdata_encoding-336981d754085772,libtinyvec-449225b51f86bf6d,libtinyvec_macros-ae826fd0b2f5f044,libprefix_trie-826112c2076f8e3b,libpacquet_env_replace-412bd6d4d0df2859}.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/libprofiler_builtins-*.rlib" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/{libobject_store-c808bb6927629edb,libhumantime-b0651db268859f9c,libthiserror-c9b33271ff70b79c,librand-68660567bfc48748,librand_chacha-4bdeeb33d5f57458,librand_core-2b417bace78b6df2,libchrono-15d34cd2877dfa9f,libiana_time_zone-171c40416e0a8cd7,libnum_traits-e50eb47c2e047db5,libquick_xml-1a6ab5c740b89b48,libmd5-b51656c798a75158,libitertools-2f2b34030a0a992e,libeither-13b7317fbde29012,libreqwest-98e7b859319ca893,libserde_urlencoded-e655643949244283,libryu-4b90c1dcb676432e,libhyper_rustls-aff1bebf0cb412cc,librustls_native_certs-f6f4a0c1b4699a07,libopenssl_probe-c752c38aa92d8eb4,libtokio_rustls-5db5c42cf3ce9928,librustls-4def617a920f24b4,libwebpki-f416b02a77cde703,libaws_lc_rs-cb46c25d692efe3e,libaws_lc_sys-da31bdcb90db56b0,libring-5f977097f5782bd1,libuntrusted-65f923ea859fb627,librustls_pki_types-c397173b213096fa,libtower_http-13d4a3b657307062,libasync_compression-1d06ecc79db3213e,libcompression_codecs-c4a7413109fbe682,libflate2-81377bed0657038b,libzlib_rs-c63547b794e18134,libcompression_core-8e4590f4f668d443,libtower-9222ce3606a45026,libhyper_util-f2357d13e6871608,libipnet-05ecbf5e69f90e68,libhyper-0573355dcd2c51c2,libh2-c92b78ba0727e14f,libatomic_waker-199214763a0024c7,libhttp_body_util-6e7b37b0667c7a46,libhttp_body-267013140a7c8953,liburl-c86916623f8bfaf9,libidna-281cb1b4bfbc2ce2,libidna_adapter-2ac52fa15a0d727b,libicu_properties-070b64c122bac2d5,libicu_properties_data-bc7a629dd0c180ce,libicu_normalizer-426b272ca04c49b4,libicu_normalizer_data-e5ab749685dfccb2,libicu_collections-55713d73f765c936,libutf8_iter-a172792584edd8df,libpotential_utf-03db8e1d59c00d8a,libicu_provider-83cbf0f5960c535e,libicu_locale_core-a23d21773a133daa,libtinystr-95e153d9065de70f,liblitemap-76e700d5cb307359,libwriteable-677268dd1071aff5,libzerovec-b61409dd219eb9ed,libzerotrie-e254cdaf2b8dafce,libyoke-dcdaba2bd2852beb,libstable_deref_trait-ef45a612cfe6babc,libzerofrom-a1a2472de1e08c08,libform_urlencoded-03d793c84e04282e,libhttp-a2525b60d02958ed,libsync_wrapper-4af35ca15e8ea58c,liblibsql-249a54a759bf9f8b,libserde_json-2eccec19d163e351,libzmij-0e702112b516ef8a,libbincode-b5073abf9eac97cd,liblibsql_hrana-d2215ba1328f1d3c,liblibsql_sqlite3_parser-d36c4fd4c063805a,libphf-beecf830ac97cbfb,libphf_shared-0635d276200ee7cb,libsiphasher-1fc4d1f2628c717a,libuncased-7d31e1a230ad3c81,libfutures-e20b1336bb0484ff,libfutures_executor-cb22df62153403c2,libtonic_web-c6ac2965a7eb4ef3,libtower_http-31cc822e9ba11df4,libanyhow-81e0f801a5d79612,liblibsql_replication-122ff750547f2bfb,libcbc-813088e4c4de3ef5,libthiserror-63ea8c111a939ddd,libaes-4520b98fa558fda7,libcipher-029987e1eb97bd3b,libinout-7ab118dc98fea522,libblock_padding-a6914652bcabcd05,libtonic-c0acd8e9c6af2225,libhyper_timeout-9c67cfd2986f8fcf,libtokio_io_timeout-a61f7bf13c86e225,libasync_stream-3c7eccb275dda546,libaxum-8c2f7385c20f679b,libpercent_encoding-b1da3b8fc2e1026a,libmatchit-6a9b5d02a71a6017,libbitflags-c787aa160115669f,libsync_wrapper-78d45ac676c842bd,libaxum_core-a74b6c32005454d3,libmime-9ed45721895d8c45,libhyper-c36786679fd553c8,libwant-1e88270185f26d8d,libtry_lock-25726098f143e8b6,libsocket2-fc75d77386513e92,libhttparse-6bdfc217418d6d1b,libh2-34a590c02501c9b7,libindexmap-198dba2d0b981f55,libequivalent-09a05a12e658fb17,libhashbrown-94cc343aca1ef306,libhttpdate-07ccb7e11552abee,libtower-605349e48d77d3d7,libindexmap-0228857876bbc1cc,libhashbrown-d2c2b82823af617a,libtokio_util-a5cc080e3ca454f6,librand-922d9e5af96fc4c5,librand_chacha-baff2ee869c7ddf5,libppv_lite86-a3fdefe0818f4d8d,libfutures_util-6ad3ecbaee2ed335,libfutures_io-4e166f08ca52ae97,libslab-ce0f3f0d172355ee,libfutures_channel-e5eae3c435cf39b0,libfutures_sink-bcea5761c467004c,libfutures_task-491ceb30f42251ea,libtower_layer-b9ce531dff4264ac,libbase64-df3838031a8300ae,libprost-77a4aa26040f4210,libpin_project-eb78f735a73f7d0c,libtower_service-4f70a3a8141e9637,libhttp_body-39fe6a58eeaf8235,libhttp-33dbd9803b95c7b4,libitoa-d62e748016f8bd79,libfnv-ab3b3d0161207bc5,libtokio_stream-ddb6683e8535273f,libfutures_core-4009a2020ea13d93,libuuid-a0ff5eb180121da1,liblibsql_sys-3dabbcd1e004431c,libtracing-8329cf2c7b6b34fd,liblog-06b20b58f54a9048,libtracing_core-d118f87c1478df4a,libtokio-51453ed86c15d674,libsignal_hook_registry-558d2c22c484c79c,liberrno-0750b0a019a98092,libsocket2-e64ebde40f5654c4,libmio-f32fdd584760272c,libpin_project_lite-d7a7c9f9297e44b9,librusqlite-a8e5d1a546233980,libfallible_iterator-b28cac1f7b576260,libhashlink-08b3aeca78e8f35d,libhashbrown-064b95fef27a8340,libahash-0f0fc2c0a5c4c67a,libgetrandom-b24966eca7962ac3,libzerocopy-3fb31ecfa03bfedb,liballocator_api2-48625379a5c54837,liblibsql_ffi-a9b1b67f4652abd9,libparking_lot-8e5d5f58d845e261,libparking_lot_core-d95e7c2da62e2029,liblock_api-371ca4ea31f9ee70,libscopeguard-094b4676443ff474,libzerocopy-c39c037756885628,libbyteorder-56459556ee3875a0,libbytes-514f2f06622d9a94,libserde-59d3499ab1347458,libserde_core-7e48bf1f092e506d,libsha2-9c53aa34fd55996b,libsha2_asm-3b7ca8f38f825fd0,libcpufeatures-e124fef1b1d91f00,libdigest-2f990220f4350e66,libsubtle-ad0f17b0720e7719,libconst_oid-a5cbb53dffc21bfb,libblock_buffer-9635b75fd0130272,libcrypto_common-643e0aa88c69411c,libgeneric_array-3192b65819868837,libtypenum-fb7926dadab61f09,libzeroize-a45fdceba86d01bf,librand_core-db2ab1aa2b9fa7c9,libgetrandom-7aab9d0a1ee8848d,librusqlite-5c258b81e55b6ede,libsmallvec-73edb3c267e33e51,libhashlink-03452b48f0fff33a,libhashbrown-6483c2b515f16c67,libfoldhash-3764f06662d6ff75,liblibsqlite3_sys-58b05c27d5f37e9b,libfallible_streaming_iterator-b9350970096c8cda,libfallible_iterator-537e5f73b7ac961f,libbase64-93d13499e98064b8,libwalkdir-f83c702250a7b97f,libsame_file-e4e8dba317b28e66,libtext_block_macros-f9909186d9008017,libtempfile-fd09a62412a1251d,libgetrandom-b7c0052498908336,librand_core-ed3dfe842b86f3fc,libcfg_if-595cd1fd9b5b1165,libfastrand-682d22190530e91c,libonce_cell-36f2c2fd46342d82,libportable_atomic-32032d9119346fe1,librustix-5279063706558141,libbitflags-4cb5efb0e892aac1,liblinux_raw_sys-44882978963cde15,libcommand_extra-64aa0e28fac29360,libassert_cmd-17f3e6f4b99950e2,libwait_timeout-1e1746c75649fc45,liblibc-337fe196a7e39b09,libbstr-b83bc4496406131c,libregex_automata-c78983431a85585d,libaho_corasick-ff515cc0422ff381,libregex_syntax-6c0fc42eb9a7b396,libmemchr-1ba191a0e30eb7bf,libpredicates_tree-7a3e8c62e4534394,libtermtree-4d11ce6bdba8a8fd,libpredicates-378dc3692663ceb2,libanstyle-14904db143869bb2,libdifflib-a7631d9323594866,libpredicates_core-15585fe9dd9e1572}.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,libcfg_if-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,liblibc-*,librustc_std_workspace_core-*,liballoc-*,libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/rustc4YNiR0/raw-dylibs" "-B<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/bin/gcc-ld" "-fuse-ld=lld" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/aws-lc-sys-4b44deba64976ba5/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/ring-c97521fda713f4f9/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/sha2-asm-bd62d3533308728c/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsqlite3-sys-45d8bb263c169a73/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-c3a8f53b15907fa7/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/tree-sitter-yaml-bafc66c7ffc5a980/out" "-L" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/build/libsql-ffi-c7540c4206b7d587/out" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/runner/work/pnpm/pnpm/target/llvm-cov-target/debug/deps/pnpr_install-67f222a6dc0ebd73" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "-u" "__llvm_profile_runtime"
1794:  = note: some arguments are omitted. use `--verbose` to show all linker arguments
1795:  = note: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
1796:  collect2: fatal error: ld terminated with signal 7 [Bus error], core dumped
1797:  compilation terminated.
1798:  error: process didn't exit successfully: `/home/runner/.rustup/toolchains/1.95.0-x86_64-unknown-linux-gnu/bin/rustc --crate-name pnpr_install --edition=2024 pacquet/crates/cli/tests/pnpr_install.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 '--warn=clippy::pedantic' '--warn=clippy::nursery' '--allow=clippy::useless_let_if_seq' '--allow=clippy::use_self' '--allow=clippy::unused_async' '--allow=clippy::unreadable_literal' '--allow=clippy::unnecessary_wraps' '--allow=clippy::unnecessary_debug_formatting' --warn=unexpected_cfgs '--allow=clippy::too_many_lines' '--allow=clippy::too_long_first_doc_paragraph' '--allow=clippy::struct_excessive_bools' '--allow=clippy::single_option_map' '--allow=clippy::similar_names' '--allow=clippy::significant_drop_tightening' '--allow=clippy::redundant_pub_crate' '--allow=clippy::option_option' '--allow=clippy::option_if_let_else' '--allow=clippy::needless_continue' '--warn=clippy::mod_module_files' '--allow=clippy::missing_panics_doc' '--allow=clippy::missing_errors_doc' '--allow=clippy::missing_const_for_fn' '--allow=clippy::match_same_arms' '--allow=clippy::many_single_char_names' '--allow=clippy::literal_string_with_formatting_args' '--allow=clippy::iter_with_drain' '--allow=clippy::items_after_statements' '--allow=clippy::implicit_hasher' '--warn=clippy::if_then_some_else_none' '--allow=clippy::fn_params_excessive_bools' '--allow=clippy::doc_link_wit...

@zkochan zkochan merged commit 84bb4b1 into main Jun 11, 2026
20 of 21 checks passed
@zkochan zkochan deleted the reg-met-opt branch June 11, 2026 17:39
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.

3 participants