Skip to content

docs(pacquet): remove TypeScript-code references from comments and document the parity paradigm#12737

Merged
zkochan merged 4 commits into
mainfrom
claude/fix-github-permalinks-4kb0ye
Jun 30, 2026
Merged

docs(pacquet): remove TypeScript-code references from comments and document the parity paradigm#12737
zkochan merged 4 commits into
mainfrom
claude/fix-github-permalinks-4kb0ye

Conversation

@KSXGitHub

@KSXGitHub KSXGitHub commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR started as a repair of dead GitHub permalinks in pacquet's Rust comments. Per maintainer direction in the thread, its scope changed: instead of fixing the links, it removes the references to the pnpm TypeScript codebase entirely, and documents why.

pacquet and the TypeScript pnpm CLI are now co-developed parallel implementations of the same package manager, at near-complete feature parity, with neither stack downstream of the other. In that world the pervasive "mirrors upstream's someTsFn at a pinned permalink" framing in pacquet's comments is both obsolete (pacquet is a source of truth in its own right, not a port that trails the TypeScript CLI) and fragile (the permalinks 404 whenever the referenced code is moved, renamed, or rebased away — which is what surfaced the original dead-link problem).

What changed:

  • Removed every /blob/ and /tree/ permalink to the pnpm-org TypeScript repos (pnpm/pnpm and the satellite repos components, npm-lifecycle, cmd-shim, version-selector-type, symlink-dir, parse-npm-tarball-url, encode-registry, npm-conf, npm-package-arg, spec) from pacquet's Rust comments — over 1,700 links across ~330 files — along with the "Mirrors / Ports / matches upstream's someTsFn" prose and *.ts source citations. Each was rewritten into a self-contained description of pacquet's own behavior, preserving the what and why.
  • Kept, deliberately: issue / PR / CI-run references (pnpm/pnpm#NNN, /issues/, /pull/, /actions/) and pnpm/pacquet self-references; third-party attributions (yarnpkg/berry, npm packages, Node.js docs, security advisories, etc.); Rust intra-doc links; shared-contract identifiers such as ERR_PNPM_* error codes and the pnpm:-prefixed reporter wire format; and generic mentions of pnpm the product / CLI / on-disk format.
  • Documented the new paradigm in the contributor guides: the root AGENTS.md and pacquet's AGENTS.md (rewrote "The cardinal rule" around bidirectional parity and removed the permalink-citation guidance), pacquet/CODE_STYLE_GUIDE.md (reframed the Reporter / log-events section around the shared wire contract), pacquet/README.md, and a few plan/task docs.

The change is comment-only across the Rust crates, with the sole exception of three #[expect(reason = "…")] attribute strings that themselves cited an upstream TypeScript symbol.

Squash Commit Body

pacquet and the TypeScript pnpm CLI are co-developed parallel
implementations at near-complete feature parity, with neither stack
downstream of the other. Remove the GitHub permalinks and the "mirrors
upstream's X" framing that pointed pacquet's comments at the pnpm
TypeScript source, and rewrite the affected prose to describe pacquet's
own behavior. This also resolves the dead permalinks the PR originally
set out to repair: the links are gone rather than re-pinned, so they
cannot rot again.

Removed every /blob/ and /tree/ permalink to the pnpm-org TypeScript
repos (over 1,700 links across ~330 files) plus the cited TS symbols and
"Mirrors/Ports/matches upstream's X" prose. Kept issue/PR/CI references,
pnpm/pacquet self-references, third-party attributions, Rust intra-doc
links, shared-contract identifiers (ERR_PNPM_* codes, the pnpm-prefixed
reporter wire format), and generic pnpm-product mentions.

Updated the contributor guides to state the new paradigm: root and
pacquet AGENTS.md (cardinal rule rewritten, permalink-citation guidance
removed), pacquet CODE_STYLE_GUIDE.md (reporter section reframed around
the shared wire contract), pacquet README, and a few plan/task docs.

The Rust changes are comment-only except for three #[expect(reason =
"...")] attribute strings that themselves cited a TypeScript symbol.

Checklist

  • The change is implemented in both the TypeScript CLI and the Rust
    pacquet/ port, or the description notes what still needs porting.
    — N/A in the usual sense: this removes pacquet's references to the
    TypeScript code; there is no symmetric change to make on the TypeScript
    side. The shared paradigm is documented in the root AGENTS.md.
  • Added a changeset — not applicable: comment/documentation-only,
    no published-package behavior changes.
  • Added or updated tests — not applicable: no behavior change.
  • Updated the documentation if needed (the contributor guides now
    describe the parity paradigm).

Written by an agent (Claude Code).

Many permalinks in pacquet's Rust comments and doc comments returned
HTTP 404. The causes, found by checking every link:

- Commit SHAs that were never on the default branch (rebased or squashed
  away) or hallucinated outright, e.g. 094aa6e57b and f2981a316.
- Paths that pre-dated upstream refactors: the pnpm11/ move (pnpm/pnpm
  fc2f339), pkg-manager/core to installing/deps-installer,
  packages/types to core/types, find-packages to
  workspace/projects-reader, headless to installing/deps-restorer, and
  more.
- Branch, HEAD, and ref-less links (blob/main/..., blob/HEAD/..., one with
  the SHA omitted entirely) that drifted once files moved.
- Packages that migrated to other repositories: env-replace and the
  path-extender family to pnpm/components; is-subdir, next-path,
  parse-npm-tarball-url, and encode-registry to their canonical repos.

Every link now resolves (verified 200) and points at a commit that is part
of its repository's default branch, resolved from the branch tip. Line
anchors were checked against that commit's content and preserved. This is a
comment-only change; no code is affected.

Out of scope and left as-is: the mock-registry package metadata under
pnpr/.fixtures (it mirrors what each package actually published) and the
fake repository_to_web_url inputs in the repo command tests.

pacquet/AGENTS.md now states the underlying rule explicitly: pin a permalink
to a commit that is already on the default branch, never a local or unmerged
SHA, since such a commit can be garbage-collected and 404 even though a SHA
was cited.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176j9z5mqFgFHRKhsusR3co
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Too many files!

This PR contains 416 files, which is 266 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ee6c2e37-6f36-4bb2-86ca-08e48fe45758

📥 Commits

Reviewing files that changed from the base of the PR and between 2e2e1ff and 5719fd2.

📒 Files selected for processing (416)
  • AGENTS.md
  • pacquet/AGENTS.md
  • pacquet/CODE_STYLE_GUIDE.md
  • pacquet/README.md
  • pacquet/crates/auth-commands/src/lib.rs
  • pacquet/crates/auth-commands/src/logout.rs
  • pacquet/crates/catalogs-config/src/lib.rs
  • pacquet/crates/catalogs-config/src/tests.rs
  • pacquet/crates/catalogs-protocol-parser/src/lib.rs
  • pacquet/crates/catalogs-protocol-parser/src/tests.rs
  • pacquet/crates/catalogs-resolver/src/lib.rs
  • pacquet/crates/catalogs-resolver/src/tests.rs
  • pacquet/crates/catalogs-types/src/lib.rs
  • pacquet/crates/cli/README.md
  • pacquet/crates/cli/src/cli_args/approve_builds.rs
  • pacquet/crates/cli/src/cli_args/audit/signatures.rs
  • pacquet/crates/cli/src/cli_args/bin.rs
  • pacquet/crates/cli/src/cli_args/cli_command.rs
  • pacquet/crates/cli/src/cli_args/config.rs
  • pacquet/crates/cli/src/cli_args/config/tests.rs
  • pacquet/crates/cli/src/cli_args/create.rs
  • pacquet/crates/cli/src/cli_args/dispatch.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/cli/src/cli_args/exec.rs
  • pacquet/crates/cli/src/cli_args/exec/recursive.rs
  • pacquet/crates/cli/src/cli_args/fetch.rs
  • pacquet/crates/cli/src/cli_args/global.rs
  • pacquet/crates/cli/src/cli_args/ignored_builds.rs
  • pacquet/crates/cli/src/cli_args/install.rs
  • pacquet/crates/cli/src/cli_args/logout.rs
  • pacquet/crates/cli/src/cli_args/outdated.rs
  • pacquet/crates/cli/src/cli_args/pack.rs
  • pacquet/crates/cli/src/cli_args/pack_app.rs
  • pacquet/crates/cli/src/cli_args/pack_app/tests.rs
  • pacquet/crates/cli/src/cli_args/package_manager.rs
  • pacquet/crates/cli/src/cli_args/ping.rs
  • pacquet/crates/cli/src/cli_args/rebuild.rs
  • pacquet/crates/cli/src/cli_args/recursive.rs
  • pacquet/crates/cli/src/cli_args/restart.rs
  • pacquet/crates/cli/src/cli_args/root.rs
  • pacquet/crates/cli/src/cli_args/run.rs
  • pacquet/crates/cli/src/cli_args/run/recursive.rs
  • pacquet/crates/cli/src/cli_args/self_update.rs
  • pacquet/crates/cli/src/cli_args/self_update/install_pnpm.rs
  • pacquet/crates/cli/src/cli_args/self_update/verify_engine.rs
  • pacquet/crates/cli/src/cli_args/set_script.rs
  • pacquet/crates/cli/src/cli_args/setup.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/posix.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/posix/tests.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/windows.rs
  • pacquet/crates/cli/src/cli_args/update.rs
  • pacquet/crates/cli/src/cli_args/update_interactive.rs
  • pacquet/crates/cli/src/cli_args/whoami.rs
  • pacquet/crates/cli/src/cli_args/why.rs
  • pacquet/crates/cli/src/cli_args/with.rs
  • pacquet/crates/cli/src/cli_args/with/install_pnpm_to_store.rs
  • pacquet/crates/cli/src/config_deps.rs
  • pacquet/crates/cli/src/with_current.rs
  • pacquet/crates/cli/tests/approve_builds.rs
  • pacquet/crates/cli/tests/catalog.rs
  • pacquet/crates/cli/tests/dedupe_direct_deps.rs
  • pacquet/crates/cli/tests/dedupe_injected_deps.rs
  • pacquet/crates/cli/tests/docs.rs
  • pacquet/crates/cli/tests/hoist.rs
  • pacquet/crates/cli/tests/hoisted_node_linker.rs
  • pacquet/crates/cli/tests/inject_workspace_packages.rs
  • pacquet/crates/cli/tests/install.rs
  • pacquet/crates/cli/tests/lifecycle_scripts.rs
  • pacquet/crates/cli/tests/lockfile_only.rs
  • pacquet/crates/cli/tests/lockfile_resolution_reuse.rs
  • pacquet/crates/cli/tests/ping.rs
  • pacquet/crates/cli/tests/pnpm_compatibility.rs
  • pacquet/crates/cli/tests/repo.rs
  • pacquet/crates/cli/tests/run_recursive.rs
  • pacquet/crates/cli/tests/whoami.rs
  • pacquet/crates/cmd-shim/src/bin_resolver.rs
  • pacquet/crates/cmd-shim/src/lib.rs
  • pacquet/crates/cmd-shim/src/link_bins.rs
  • pacquet/crates/cmd-shim/src/shim.rs
  • pacquet/crates/config-dir/src/lib.rs
  • pacquet/crates/config-parse-overrides/src/lib.rs
  • pacquet/crates/config/src/api.rs
  • pacquet/crates/config/src/config_types.rs
  • pacquet/crates/config/src/defaults.rs
  • pacquet/crates/config/src/defaults/tests.rs
  • pacquet/crates/config/src/env_overlay.rs
  • pacquet/crates/config/src/global_bin_check.rs
  • pacquet/crates/config/src/lib.rs
  • pacquet/crates/config/src/matcher.rs
  • pacquet/crates/config/src/matcher/tests.rs
  • pacquet/crates/config/src/naming_cases.rs
  • pacquet/crates/config/src/npmrc_auth.rs
  • pacquet/crates/config/src/pnpm_default_parity.rs
  • pacquet/crates/config/src/property_path.rs
  • pacquet/crates/config/src/protected_settings.rs
  • pacquet/crates/config/src/store_path.rs
  • pacquet/crates/config/src/tests.rs
  • pacquet/crates/config/src/version_policy.rs
  • pacquet/crates/config/src/version_policy/tests.rs
  • pacquet/crates/config/src/workspace_yaml.rs
  • pacquet/crates/config/src/workspace_yaml/tests.rs
  • pacquet/crates/crypto-hash/src/lib.rs
  • pacquet/crates/crypto-shasums-file/src/lib.rs
  • pacquet/crates/default-reporter/src/state.rs
  • pacquet/crates/deps-path/src/create_peer_dep_graph_hash.rs
  • pacquet/crates/deps-path/src/dep_path.rs
  • pacquet/crates/deps-path/src/dep_path_to_filename.rs
  • pacquet/crates/deps-path/src/is_runtime_dep_path.rs
  • pacquet/crates/deps-path/src/lib.rs
  • pacquet/crates/deps-path/src/link_path_to_peer_version.rs
  • pacquet/crates/deps-path/src/peer_id.rs
  • pacquet/crates/deps-path/src/suffix_index.rs
  • pacquet/crates/deps-path/src/suffix_index/tests.rs
  • pacquet/crates/deps-path/src/try_get_package_id.rs
  • pacquet/crates/deps-path/src/try_get_package_id/tests.rs
  • pacquet/crates/directory-fetcher/src/error.rs
  • pacquet/crates/directory-fetcher/src/fetcher.rs
  • pacquet/crates/directory-fetcher/src/lib.rs
  • pacquet/crates/directory-fetcher/src/walker.rs
  • pacquet/crates/directory-fetcher/tests/fetcher.rs
  • pacquet/crates/engine-runtime-bun-resolver/src/bun_resolver.rs
  • pacquet/crates/engine-runtime-bun-resolver/src/lib.rs
  • pacquet/crates/engine-runtime-deno-resolver/src/deno_resolver.rs
  • pacquet/crates/engine-runtime-deno-resolver/src/lib.rs
  • pacquet/crates/engine-runtime-deno-resolver/src/read_deno_assets.rs
  • pacquet/crates/engine-runtime-node-resolver/src/get_node_artifact_address.rs
  • pacquet/crates/engine-runtime-node-resolver/src/get_node_artifact_address/tests.rs
  • pacquet/crates/engine-runtime-node-resolver/src/get_node_mirror.rs
  • pacquet/crates/engine-runtime-node-resolver/src/get_node_mirror/tests.rs
  • pacquet/crates/engine-runtime-node-resolver/src/lib.rs
  • pacquet/crates/engine-runtime-node-resolver/src/node_resolver.rs
  • pacquet/crates/engine-runtime-node-resolver/src/normalize_arch.rs
  • pacquet/crates/engine-runtime-node-resolver/src/parse_node_specifier.rs
  • pacquet/crates/engine-runtime-node-resolver/src/parse_node_specifier/tests.rs
  • pacquet/crates/engine-runtime-node-resolver/src/resolve_node_version.rs
  • pacquet/crates/env-installer/src/errors.rs
  • pacquet/crates/env-installer/src/install_config_deps.rs
  • pacquet/crates/env-installer/src/lib.rs
  • pacquet/crates/env-installer/src/options.rs
  • pacquet/crates/env-installer/src/parse_integrity.rs
  • pacquet/crates/env-installer/src/prune.rs
  • pacquet/crates/env-installer/src/resolve_and_install_config_deps.rs
  • pacquet/crates/env-installer/src/resolve_optional_subdeps.rs
  • pacquet/crates/env-installer/src/verify_env_lockfile.rs
  • pacquet/crates/env-replace/src/lib.rs
  • pacquet/crates/executor/src/extend_path.rs
  • pacquet/crates/executor/src/extend_path/tests.rs
  • pacquet/crates/executor/src/lifecycle.rs
  • pacquet/crates/executor/src/make_env.rs
  • pacquet/crates/executor/src/run_script.rs
  • pacquet/crates/executor/src/shell.rs
  • pacquet/crates/exportable-manifest/src/create.rs
  • pacquet/crates/exportable-manifest/src/lib.rs
  • pacquet/crates/exportable-manifest/src/replace.rs
  • pacquet/crates/exportable-manifest/src/tests.rs
  • pacquet/crates/exportable-manifest/src/transform.rs
  • pacquet/crates/fs-packlist/src/lib.rs
  • pacquet/crates/fs-packlist/src/tests.rs
  • pacquet/crates/fs/src/bin/cafs_stress_worker.rs
  • pacquet/crates/fs/src/ensure_file.rs
  • pacquet/crates/fs/src/is_subdir.rs
  • pacquet/crates/fs/src/symlink_dir.rs
  • pacquet/crates/fs/tests/ensure_file_stress.rs
  • pacquet/crates/git-fetcher/src/cas_io.rs
  • pacquet/crates/git-fetcher/src/error.rs
  • pacquet/crates/git-fetcher/src/fetcher.rs
  • pacquet/crates/git-fetcher/src/fetcher/tests.rs
  • pacquet/crates/git-fetcher/src/lib.rs
  • pacquet/crates/git-fetcher/src/preferred_pm.rs
  • pacquet/crates/git-fetcher/src/prepare_package.rs
  • pacquet/crates/git-fetcher/src/tarball_fetcher.rs
  • pacquet/crates/git-fetcher/src/tarball_fetcher/tests.rs
  • pacquet/crates/global/src/cache_key.rs
  • pacquet/crates/global/src/check_bin_conflicts.rs
  • pacquet/crates/global/src/global_package_dir.rs
  • pacquet/crates/global/src/list.rs
  • pacquet/crates/global/src/scan.rs
  • pacquet/crates/graph-hasher/src/dep_state.rs
  • pacquet/crates/graph-hasher/src/engine_name.rs
  • pacquet/crates/graph-hasher/src/global_virtual_store_path.rs
  • pacquet/crates/graph-hasher/src/lib.rs
  • pacquet/crates/graph-hasher/src/object_hasher.rs
  • pacquet/crates/graph-hasher/src/tests.rs
  • pacquet/crates/hooks/src/custom_resolver_adapter.rs
  • pacquet/crates/hooks/src/finder.rs
  • pacquet/crates/hooks/src/lib.rs
  • pacquet/crates/lockfile-preferred-versions/src/lib.rs
  • pacquet/crates/lockfile-preferred-versions/src/version_selector_type.rs
  • pacquet/crates/lockfile-verification/src/cache.rs
  • pacquet/crates/lockfile-verification/src/errors.rs
  • pacquet/crates/lockfile-verification/src/lib.rs
  • pacquet/crates/lockfile-verification/src/record_lockfile_verified.rs
  • pacquet/crates/lockfile-verification/src/verify_lockfile_resolutions.rs
  • pacquet/crates/lockfile/src/catalog_snapshots.rs
  • pacquet/crates/lockfile/src/env_lockfile.rs
  • pacquet/crates/lockfile/src/freshness.rs
  • pacquet/crates/lockfile/src/freshness/tests.rs
  • pacquet/crates/lockfile/src/lib.rs
  • pacquet/crates/lockfile/src/load_lockfile.rs
  • pacquet/crates/lockfile/src/load_lockfile/tests.rs
  • pacquet/crates/lockfile/src/package_metadata.rs
  • pacquet/crates/lockfile/src/pkg_id_with_patch_hash.rs
  • pacquet/crates/lockfile/src/pkg_name_ver_peer/tests.rs
  • pacquet/crates/lockfile/src/pkg_ver_peer.rs
  • pacquet/crates/lockfile/src/pkg_ver_peer/tests.rs
  • pacquet/crates/lockfile/src/resolution.rs
  • pacquet/crates/lockfile/src/save_lockfile.rs
  • pacquet/crates/lockfile/src/serialize_yaml.rs
  • pacquet/crates/lockfile/src/snapshot_dep_ref.rs
  • pacquet/crates/lockfile/src/snapshot_entry.rs
  • pacquet/crates/lockfile/src/yaml_documents.rs
  • pacquet/crates/lockfile/src/yaml_emit.rs
  • pacquet/crates/modules-yaml/src/lib.rs
  • pacquet/crates/modules-yaml/tests/fakes.rs
  • pacquet/crates/modules-yaml/tests/index.rs
  • pacquet/crates/modules-yaml/tests/real_fs.rs
  • pacquet/crates/network-web-auth/src/poll_for_web_auth_token.rs
  • pacquet/crates/network-web-auth/src/web_auth_timeout_error.rs
  • pacquet/crates/network-web-auth/src/with_otp_handling.rs
  • pacquet/crates/network/src/auth.rs
  • pacquet/crates/network/src/auth/tests.rs
  • pacquet/crates/network/src/lib.rs
  • pacquet/crates/network/src/proxy.rs
  • pacquet/crates/network/src/retry.rs
  • pacquet/crates/network/src/tests.rs
  • pacquet/crates/network/src/tls.rs
  • pacquet/crates/pack/src/lib.rs
  • pacquet/crates/pack/src/tarball.rs
  • pacquet/crates/pack/src/tests.rs
  • pacquet/crates/package-is-installable/src/check_engine.rs
  • pacquet/crates/package-is-installable/src/check_platform.rs
  • pacquet/crates/package-is-installable/src/infer_platform_from_package_name.rs
  • pacquet/crates/package-is-installable/src/lib.rs
  • pacquet/crates/package-is-installable/src/package_is_installable.rs
  • pacquet/crates/package-is-installable/src/tests.rs
  • pacquet/crates/package-is-installable/src/tests/check_engine.rs
  • pacquet/crates/package-is-installable/src/tests/check_platform.rs
  • pacquet/crates/package-is-installable/src/tests/infer_platform_from_package_name.rs
  • pacquet/crates/package-is-installable/tests/known_failures.rs
  • pacquet/crates/package-manager/src/add.rs
  • pacquet/crates/package-manager/src/build_modules.rs
  • pacquet/crates/package-manager/src/build_modules/tests.rs
  • pacquet/crates/package-manager/src/build_resolution_verifiers.rs
  • pacquet/crates/package-manager/src/build_sequence.rs
  • pacquet/crates/package-manager/src/build_sequence/tests.rs
  • pacquet/crates/package-manager/src/catalog_mode.rs
  • pacquet/crates/package-manager/src/check_custom_resolver_force_resolve.rs
  • pacquet/crates/package-manager/src/create_symlink_layout.rs
  • pacquet/crates/package-manager/src/create_symlink_layout/tests.rs
  • pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot.rs
  • pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot/tests.rs
  • pacquet/crates/package-manager/src/create_virtual_store.rs
  • pacquet/crates/package-manager/src/current_lockfile.rs
  • pacquet/crates/package-manager/src/dependencies_graph_to_lockfile.rs
  • pacquet/crates/package-manager/src/deps_graph.rs
  • pacquet/crates/package-manager/src/graph_sequencer.rs
  • pacquet/crates/package-manager/src/hoist.rs
  • pacquet/crates/package-manager/src/hoisted_dep_graph.rs
  • pacquet/crates/package-manager/src/hoisted_dep_graph/tests.rs
  • pacquet/crates/package-manager/src/install.rs
  • pacquet/crates/package-manager/src/install/tests.rs
  • pacquet/crates/package-manager/src/install_frozen_lockfile.rs
  • pacquet/crates/package-manager/src/install_frozen_lockfile/tests.rs
  • pacquet/crates/package-manager/src/install_package_by_snapshot.rs
  • pacquet/crates/package-manager/src/install_package_by_snapshot/tests.rs
  • pacquet/crates/package-manager/src/install_package_from_registry.rs
  • pacquet/crates/package-manager/src/install_with_fresh_lockfile.rs
  • pacquet/crates/package-manager/src/installability.rs
  • pacquet/crates/package-manager/src/link_bins.rs
  • pacquet/crates/package-manager/src/link_hoisted_modules.rs
  • pacquet/crates/package-manager/src/optimistic_repeat_install.rs
  • pacquet/crates/package-manager/src/optimistic_repeat_install/tests.rs
  • pacquet/crates/package-manager/src/overrides.rs
  • pacquet/crates/package-manager/src/package_extender.rs
  • pacquet/crates/package-manager/src/prefetching_resolver.rs
  • pacquet/crates/package-manager/src/prune_virtual_store.rs
  • pacquet/crates/package-manager/src/remove.rs
  • pacquet/crates/package-manager/src/remove/tests.rs
  • pacquet/crates/package-manager/src/resolution_observer.rs
  • pacquet/crates/package-manager/src/safe_join_modules_dir.rs
  • pacquet/crates/package-manager/src/symlink_direct_dependencies.rs
  • pacquet/crates/package-manager/src/symlink_direct_dependencies/tests.rs
  • pacquet/crates/package-manager/src/tarball_prefetch.rs
  • pacquet/crates/package-manager/src/update.rs
  • pacquet/crates/package-manager/src/update_project_manifest.rs
  • pacquet/crates/package-manager/src/update_project_manifest_object.rs
  • pacquet/crates/package-manager/src/virtual_store_layout.rs
  • pacquet/crates/package-manager/src/virtual_store_layout/tests.rs
  • pacquet/crates/package-manifest/src/lib.rs
  • pacquet/crates/patching/src/apply.rs
  • pacquet/crates/patching/src/apply/tests.rs
  • pacquet/crates/patching/src/get_patch_info.rs
  • pacquet/crates/patching/src/group.rs
  • pacquet/crates/patching/src/group/tests.rs
  • pacquet/crates/patching/src/hash.rs
  • pacquet/crates/patching/src/hash/tests.rs
  • pacquet/crates/patching/src/key.rs
  • pacquet/crates/patching/src/key/tests.rs
  • pacquet/crates/patching/src/lib.rs
  • pacquet/crates/patching/src/resolve.rs
  • pacquet/crates/patching/src/types.rs
  • pacquet/crates/patching/src/verify.rs
  • pacquet/crates/real-hoist/src/lib.rs
  • pacquet/crates/registry/src/package.rs
  • pacquet/crates/registry/src/package_distribution.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/registry/src/pinned_version.rs
  • pacquet/crates/registry/src/pinned_version/tests.rs
  • pacquet/crates/reporter/src/lib.rs
  • pacquet/crates/reporter/src/tests.rs
  • pacquet/crates/resolving-default-resolver/src/lib.rs
  • pacquet/crates/resolving-deps-resolver/src/dedupe_injected_deps.rs
  • pacquet/crates/resolving-deps-resolver/src/dedupe_peer_dependents.rs
  • pacquet/crates/resolving-deps-resolver/src/dependencies_graph.rs
  • pacquet/crates/resolving-deps-resolver/src/hoist_peers.rs
  • pacquet/crates/resolving-deps-resolver/src/hoist_peers/tests.rs
  • pacquet/crates/resolving-deps-resolver/src/lib.rs
  • pacquet/crates/resolving-deps-resolver/src/lockfile_reuse.rs
  • pacquet/crates/resolving-deps-resolver/src/node_id.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_dependency_tree.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_importer.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_importer/tests.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_peers.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_workspace.rs
  • pacquet/crates/resolving-deps-resolver/src/resolved_tree.rs
  • pacquet/crates/resolving-deps-resolver/src/tests.rs
  • pacquet/crates/resolving-deps-resolver/src/validate_dependency_alias.rs
  • pacquet/crates/resolving-git-resolver/src/create_git_hosted_pkg_id.rs
  • pacquet/crates/resolving-git-resolver/src/git_resolver.rs
  • pacquet/crates/resolving-git-resolver/src/hosted_git.rs
  • pacquet/crates/resolving-git-resolver/src/lib.rs
  • pacquet/crates/resolving-git-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/resolving-git-resolver/src/resolve_ref.rs
  • pacquet/crates/resolving-jsr-specifier-parser/src/lib.rs
  • pacquet/crates/resolving-jsr-specifier-parser/src/tests.rs
  • pacquet/crates/resolving-local-resolver/src/chain.rs
  • pacquet/crates/resolving-local-resolver/src/lib.rs
  • pacquet/crates/resolving-local-resolver/src/local_resolver.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/resolving-local-resolver/tests/chain.rs
  • pacquet/crates/resolving-local-resolver/tests/resolve.rs
  • pacquet/crates/resolving-npm-resolver/src/create_npm_resolution_verifier.rs
  • pacquet/crates/resolving-npm-resolver/src/create_npm_resolution_verifier/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/errors.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_attestation_published_at.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached.rs
  • pacquet/crates/resolving-npm-resolver/src/lib.rs
  • pacquet/crates/resolving-npm-resolver/src/lookup_context.rs
  • pacquet/crates/resolving-npm-resolver/src/mirror.rs
  • pacquet/crates/resolving-npm-resolver/src/named_registry.rs
  • pacquet/crates/resolving-npm-resolver/src/named_registry_resolver.rs
  • pacquet/crates/resolving-npm-resolver/src/npm_resolver.rs
  • pacquet/crates/resolving-npm-resolver/src/npm_resolver/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/pick_package_from_meta.rs
  • pacquet/crates/resolving-npm-resolver/src/preferred_overlay.rs
  • pacquet/crates/resolving-npm-resolver/src/registry_url.rs
  • pacquet/crates/resolving-npm-resolver/src/resolve_from_workspace.rs
  • pacquet/crates/resolving-npm-resolver/src/trust_checks.rs
  • pacquet/crates/resolving-npm-resolver/src/violation_codes.rs
  • pacquet/crates/resolving-npm-resolver/src/which_version_is_pinned.rs
  • pacquet/crates/resolving-npm-resolver/src/which_version_is_pinned/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/workspace_pref_to_npm.rs
  • pacquet/crates/resolving-npm-resolver/src/workspace_pref_to_npm/tests.rs
  • pacquet/crates/resolving-npm-resolver/tests/chain.rs
  • pacquet/crates/resolving-parse-wanted-dependency/src/lib.rs
  • pacquet/crates/resolving-resolver-base/src/lib.rs
  • pacquet/crates/resolving-resolver-base/src/resolve.rs
  • pacquet/crates/resolving-resolver-base/src/verifier.rs
  • pacquet/crates/resolving-tarball-resolver/src/lib.rs
  • pacquet/crates/resolving-tarball-resolver/src/tarball_resolver.rs
  • pacquet/crates/store-dir/src/add_files_from_dir.rs
  • pacquet/crates/store-dir/src/cas_file.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity.rs
  • pacquet/crates/store-dir/src/msgpackr_records.rs
  • pacquet/crates/store-dir/src/project_registry.rs
  • pacquet/crates/store-dir/src/project_registry/tests.rs
  • pacquet/crates/store-dir/src/prune.rs
  • pacquet/crates/store-dir/src/store_dir.rs
  • pacquet/crates/store-dir/src/store_dir/tests.rs
  • pacquet/crates/store-dir/src/store_index.rs
  • pacquet/crates/store-dir/src/upload.rs
  • pacquet/crates/tarball/src/lib.rs
  • pacquet/crates/tarball/src/tests.rs
  • pacquet/crates/workspace-manifest-writer/src/edit.rs
  • pacquet/crates/workspace-manifest-writer/src/lib.rs
  • pacquet/crates/workspace-manifest-writer/src/render.rs
  • pacquet/crates/workspace-manifest-writer/src/tests.rs
  • pacquet/crates/workspace-projects-filter/src/filter.rs
  • pacquet/crates/workspace-projects-filter/src/filter/tests.rs
  • pacquet/crates/workspace-projects-filter/src/lib.rs
  • pacquet/crates/workspace-projects-filter/src/parse_project_selector.rs
  • pacquet/crates/workspace-projects-filter/src/path_util.rs
  • pacquet/crates/workspace-projects-graph/src/base_project.rs
  • pacquet/crates/workspace-projects-graph/src/create_projects_graph.rs
  • pacquet/crates/workspace-projects-graph/src/graph.rs
  • pacquet/crates/workspace-projects-graph/src/lib.rs
  • pacquet/crates/workspace-range-resolver/src/lib.rs
  • pacquet/crates/workspace-range-resolver/tests/resolve.rs
  • pacquet/crates/workspace-spec/src/lib.rs
  • pacquet/crates/workspace-spec/src/tests.rs
  • pacquet/crates/workspace-state/src/lib.rs
  • pacquet/crates/workspace-state/src/tests.rs
  • pacquet/crates/workspace/src/importer_id.rs
  • pacquet/crates/workspace/src/lib.rs
  • pacquet/crates/workspace/src/manifest.rs
  • pacquet/crates/workspace/src/project_manifest.rs
  • pacquet/crates/workspace/src/projects.rs
  • pacquet/crates/workspace/src/root_finder.rs
  • pacquet/plans/LOCKFILE_RESOLUTION_REUSE.md
  • pacquet/tasks/ecosystem-e2e/README.md
  • pacquet/tasks/integrated-benchmark/src/workspace_manifest.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds guidance to AGENTS.md about reachable upstream SHAs, and updates many doc-comment links across pacquet crates to newer pinned pnpm URLs and repository paths.

Changes

Documentation permalink hygiene

Layer / File(s) Summary
AGENTS permalink guidance
pacquet/AGENTS.md
Adds guidance requiring cited SHAs to be on the upstream default branch and checked with git merge-base before linking.
CLI and config references
pacquet/crates/cli/src/..., pacquet/crates/config/src/..., pacquet/crates/workspace-manifest-writer/src/lib.rs
Updates doc-comment links in CLI commands/tests and config/workspace-manifest docs to newer pnpm source URLs and paths.
Installer and reporter references
pacquet/crates/env-installer/src/..., pacquet/crates/env-replace/src/lib.rs, pacquet/crates/reporter/src/lib.rs, pacquet/crates/executor/src/lifecycle.rs, pacquet/crates/hooks/src/..., pacquet/crates/fs/src/is_subdir.rs, pacquet/crates/store-dir/src/..., pacquet/crates/deps-path/src/link_path_to_peer_version.rs
Updates doc-comment links in installer, reporter, hooks, filesystem, store, and dependency-path code to pinned upstream references.
Package manager references
pacquet/crates/package-manager/src/...
Updates doc-comment links in install, lockfile, virtual store, symlink layout, and related tests to newer pnpm URLs and commit pins.
Resolver and registry references
pacquet/crates/lockfile/src/resolution.rs, pacquet/crates/resolving-*, pacquet/crates/registry/src/...
Updates doc-comment links in resolver, npm-resolver, lockfile, and registry docs to newer upstream pnpm references.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related issues

Possibly related PRs

  • pnpm/pnpm#11640: Directly related — also updates pacquet/AGENTS.md guidance around citation and permalink rules.
  • pnpm/pnpm#12025: Strong code-level connection through shared upstream reference updates in deps-path and fs doc comments.
  • pnpm/pnpm#12497: Strong code-level connection through pacquet/crates/cli/src/cli_args/why.rs documentation references.

Suggested labels

product: pacquet

Suggested reviewers

  • zkochan
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/fix-github-permalinks-4kb0ye

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.

@KSXGitHub KSXGitHub marked this pull request as ready for review June 30, 2026 00:08
@KSXGitHub KSXGitHub requested a review from zkochan as a code owner June 30, 2026 00:08
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Micro-Benchmark Results

Linux

group                          main                                   pr
-----                          ----                                   --
tarball/download_dependency    1.01      7.0±0.14ms   622.6 KB/sec    1.00      6.9±0.28ms   629.7 KB/sec

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot.rs (1)

61-69: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Update the removeObsoleteChild permalink as well

5e47dd5e59 is not a reachable commit on origin/main, so the removeObsoleteChild doc link still points at a dead target. Update it to the same pinned SHA used by the adjacent reference.

🤖 Prompt for 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.

In `@pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot.rs` around
lines 61 - 69, The `removeObsoleteChild` documentation link in
`create_virtual_dir_by_snapshot` points to an unreachable commit, so update that
permalink to the same pinned SHA used by the adjacent `linkAllModules`
reference. Keep the existing comment structure but replace the stale GitHub
target in the `removeObsoleteChild` note so both upstream references resolve
consistently.

Source: Path instructions

🤖 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/package-manager/src/dependencies_graph_to_lockfile.rs`:
- Line 354: The `DEPENDENCIES_FIELDS` documentation link in
`dependencies_graph_to_lockfile.rs` uses a pinned SHA that is not reachable from
upstream main, so update that permalink to a commit that exists on the upstream
pnpm main branch and keep it consistent with the other reference links in this
area.

---

Outside diff comments:
In `@pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot.rs`:
- Around line 61-69: The `removeObsoleteChild` documentation link in
`create_virtual_dir_by_snapshot` points to an unreachable commit, so update that
permalink to the same pinned SHA used by the adjacent `linkAllModules`
reference. Keep the existing comment structure but replace the stale GitHub
target in the `removeObsoleteChild` note so both upstream references resolve
consistently.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 041fc48d-27f8-4de3-9c99-db83ab2d01ed

📥 Commits

Reviewing files that changed from the base of the PR and between a6f303c and 21e65cf.

📒 Files selected for processing (60)
  • pacquet/AGENTS.md
  • pacquet/crates/cli/src/cli_args/fetch.rs
  • pacquet/crates/cli/src/cli_args/pack_app/tests.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/posix.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/posix/tests.rs
  • pacquet/crates/cli/src/cli_args/setup/path_extender/windows.rs
  • pacquet/crates/cli/src/cli_args/why.rs
  • pacquet/crates/cli/src/config_deps.rs
  • pacquet/crates/cli/tests/inject_workspace_packages.rs
  • pacquet/crates/cli/tests/lifecycle_scripts.rs
  • pacquet/crates/config/src/defaults/tests.rs
  • pacquet/crates/config/src/lib.rs
  • pacquet/crates/config/src/store_path.rs
  • pacquet/crates/deps-path/src/link_path_to_peer_version.rs
  • pacquet/crates/engine-runtime-deno-resolver/src/read_deno_assets.rs
  • pacquet/crates/env-installer/src/errors.rs
  • pacquet/crates/env-installer/src/install_config_deps.rs
  • pacquet/crates/env-installer/src/lib.rs
  • pacquet/crates/env-installer/src/parse_integrity.rs
  • pacquet/crates/env-installer/src/prune.rs
  • pacquet/crates/env-installer/src/resolve_and_install_config_deps.rs
  • pacquet/crates/env-installer/src/resolve_optional_subdeps.rs
  • pacquet/crates/env-installer/src/verify_env_lockfile.rs
  • pacquet/crates/env-replace/src/lib.rs
  • pacquet/crates/executor/src/lifecycle.rs
  • pacquet/crates/fs/src/is_subdir.rs
  • pacquet/crates/hooks/src/finder.rs
  • pacquet/crates/hooks/src/lib.rs
  • pacquet/crates/lockfile/src/resolution.rs
  • pacquet/crates/package-manager/src/build_resolution_verifiers.rs
  • pacquet/crates/package-manager/src/create_symlink_layout.rs
  • pacquet/crates/package-manager/src/create_symlink_layout/tests.rs
  • pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot.rs
  • pacquet/crates/package-manager/src/dependencies_graph_to_lockfile.rs
  • pacquet/crates/package-manager/src/install.rs
  • pacquet/crates/package-manager/src/install/tests.rs
  • pacquet/crates/package-manager/src/install_frozen_lockfile.rs
  • pacquet/crates/package-manager/src/install_with_fresh_lockfile.rs
  • pacquet/crates/package-manager/src/safe_join_modules_dir.rs
  • pacquet/crates/package-manager/src/update_project_manifest_object.rs
  • pacquet/crates/package-manager/src/virtual_store_layout.rs
  • pacquet/crates/package-manager/src/virtual_store_layout/tests.rs
  • pacquet/crates/registry/src/package.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/reporter/src/lib.rs
  • pacquet/crates/resolving-deps-resolver/src/dependencies_graph.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_dependency_tree.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_importer.rs
  • pacquet/crates/resolving-deps-resolver/src/resolve_peers.rs
  • pacquet/crates/resolving-deps-resolver/src/tests.rs
  • pacquet/crates/resolving-deps-resolver/src/validate_dependency_alias.rs
  • pacquet/crates/resolving-npm-resolver/src/create_npm_resolution_verifier.rs
  • pacquet/crates/resolving-npm-resolver/src/mirror.rs
  • pacquet/crates/resolving-npm-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/resolving-npm-resolver/tests/chain.rs
  • pacquet/crates/resolving-resolver-base/src/resolve.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity.rs
  • pacquet/crates/store-dir/src/project_registry.rs
  • pacquet/crates/workspace-manifest-writer/src/lib.rs

Comment thread pacquet/crates/package-manager/src/dependencies_graph_to_lockfile.rs Outdated
@codecov-commenter

codecov-commenter commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.24%. Comparing base (a6f303c) to head (5719fd2).

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #12737      +/-   ##
==========================================
- Coverage   85.24%   85.24%   -0.01%     
==========================================
  Files         407      407              
  Lines       61882    61864      -18     
==========================================
- Hits        52753    52737      -16     
+ Misses       9129     9127       -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.

The removeObsoleteChild doc link in create_virtual_dir_by_snapshot cited
pnpm/pnpm commit 5e47dd5, which resolves on GitHub (kept alive by a pull
request ref) but is not an ancestor of origin/main — the off-main rot this
PR's AGENTS.md guidance warns about. Repinned to a6f303c (current main
HEAD), where the removeObsoleteChild pass in linkAllModules sits at
link.ts#L575, matching the adjacent linkAllModules citation.

The sibling DEPENDENCIES_FIELDS link at 097983f was flagged in the same
review but is a false positive: 097983f is reachable from origin/main
(git merge-base --is-ancestor 097983f origin/main exits 0), so it is left
unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176j9z5mqFgFHRKhsusR3co
@github-actions github-actions Bot added the reviewed: coderabbit CodeRabbit submitted an approving review label Jun 30, 2026
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Integrated-Benchmark Report (Linux)

Commit: 5719fd28ea9e

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.156 ± 0.172 3.972 4.529 1.91 ± 0.14
pacquet@main 4.159 ± 0.171 3.988 4.379 1.91 ± 0.14
pnpr@HEAD 2.208 ± 0.151 1.993 2.427 1.02 ± 0.09
pnpr@main 2.173 ± 0.126 1.956 2.358 1.00
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 4.156339603179999,
      "stddev": 0.17220575797267546,
      "median": 4.1145284668799995,
      "user": 3.8706933,
      "system": 3.4673080999999994,
      "min": 3.9720638398799997,
      "max": 4.52923502088,
      "times": [
        4.28316885588,
        4.00007367688,
        4.20616720388,
        4.52923502088,
        4.27379509088,
        4.09333258388,
        3.99479196588,
        3.9720638398799997,
        4.13572434988,
        4.07504344388
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 4.15940008498,
      "stddev": 0.17104462533076548,
      "median": 4.06655428088,
      "user": 3.8442272,
      "system": 3.4506460999999993,
      "min": 3.98793480888,
      "max": 4.37871674388,
      "times": [
        4.33510167588,
        4.36746630888,
        4.09058139488,
        4.04252716688,
        4.33829632888,
        3.98793480888,
        4.37871674388,
        3.99088607288,
        4.0309780888799995,
        4.0315122598799995
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.2077562073799997,
      "stddev": 0.15055231864961408,
      "median": 2.14106700538,
      "user": 2.618588,
      "system": 2.9660077999999994,
      "min": 1.99285147688,
      "max": 2.42683812788,
      "times": [
        2.09363436088,
        2.12263450688,
        2.15949950388,
        1.99285147688,
        2.42683812788,
        2.34159614888,
        2.1191514208799997,
        2.3633782968799997,
        2.36376860188,
        2.09420962888
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 2.17292269778,
      "stddev": 0.12580540929247483,
      "median": 2.21649770338,
      "user": 2.6135494,
      "system": 2.9538523999999993,
      "min": 1.95614979888,
      "max": 2.35756229088,
      "times": [
        2.22366777988,
        2.04732201288,
        2.35756229088,
        1.95614979888,
        2.17076725388,
        2.22582070188,
        2.29143146488,
        2.22104388488,
        2.02351026788,
        2.2119515218799997
      ]
    }
  ]
}

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

Command Mean [ms] Min [ms] Max [ms] Relative
pacquet@HEAD 628.5 ± 11.3 610.1 645.5 1.00
pacquet@main 645.1 ± 18.2 622.0 682.6 1.03 ± 0.03
pnpr@HEAD 697.5 ± 29.7 656.0 756.8 1.11 ± 0.05
pnpr@main 687.2 ± 36.5 662.3 787.3 1.09 ± 0.06
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 0.62848117,
      "stddev": 0.01130727613686472,
      "median": 0.6279707105,
      "user": 0.35526792,
      "system": 1.3302139,
      "min": 0.6101432685,
      "max": 0.6455239915,
      "times": [
        0.6455239915,
        0.6101432685,
        0.6299968315,
        0.6259445895,
        0.6388255635,
        0.6190519205,
        0.6250593175,
        0.6404999035,
        0.6331673265,
        0.6165989875
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 0.6451001253,
      "stddev": 0.0182262584937619,
      "median": 0.642076985,
      "user": 0.37519412,
      "system": 1.3194316999999998,
      "min": 0.6220089295,
      "max": 0.6826002275,
      "times": [
        0.6359879865,
        0.6327415025,
        0.6518453525,
        0.6297440525,
        0.6619417585,
        0.6537351015,
        0.6826002275,
        0.6322303585,
        0.6220089295,
        0.6481659835
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.6974514938999999,
      "stddev": 0.029661469417804977,
      "median": 0.6954800235,
      "user": 0.37923031999999995,
      "system": 1.3532593,
      "min": 0.6560244735,
      "max": 0.7568479235,
      "times": [
        0.6746534505,
        0.6964052305,
        0.7111081465,
        0.6560244735,
        0.6945548165,
        0.7274257935,
        0.6804000365,
        0.6710750005,
        0.7060200675,
        0.7568479235
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.6872200327,
      "stddev": 0.03654961413339434,
      "median": 0.6758771555,
      "user": 0.38380942,
      "system": 1.3419009000000002,
      "min": 0.6622582635,
      "max": 0.7872669705,
      "times": [
        0.6772166635,
        0.6778623975,
        0.6745376475,
        0.7008188325,
        0.6622582635,
        0.6671342295,
        0.6741199925,
        0.6773464615,
        0.7872669705,
        0.6736388685
      ]
    }
  ]
}

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

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 4.180 ± 0.042 4.130 4.245 1.96 ± 0.10
pacquet@main 4.176 ± 0.039 4.122 4.260 1.96 ± 0.10
pnpr@HEAD 2.135 ± 0.102 2.062 2.410 1.00 ± 0.07
pnpr@main 2.134 ± 0.104 2.054 2.396 1.00
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 4.18031203892,
      "stddev": 0.04207543044877014,
      "median": 4.1785931099199995,
      "user": 3.7290388400000003,
      "system": 3.3287314599999993,
      "min": 4.13012172442,
      "max": 4.244627969420001,
      "times": [
        4.18820867042,
        4.244627969420001,
        4.2323648384200006,
        4.21856420142,
        4.144264482420001,
        4.16897754942,
        4.14852694142,
        4.19578202142,
        4.13012172442,
        4.131681990420001
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 4.17595785662,
      "stddev": 0.03911470931124783,
      "median": 4.18244509292,
      "user": 3.7311644400000006,
      "system": 3.31336266,
      "min": 4.1215811244200005,
      "max": 4.2597131934200005,
      "times": [
        4.14232458642,
        4.1331415514200005,
        4.18083158942,
        4.19389711442,
        4.1215811244200005,
        4.18985965642,
        4.18772583742,
        4.18405859642,
        4.16644531642,
        4.2597131934200005
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.13502766302,
      "stddev": 0.10200061005991791,
      "median": 2.09908891542,
      "user": 2.5046830400000006,
      "system": 2.86833546,
      "min": 2.0617027974199997,
      "max": 2.40966902042,
      "times": [
        2.09756596542,
        2.10061186542,
        2.0617027974199997,
        2.1465747674199998,
        2.07454306642,
        2.0900668804199998,
        2.40966902042,
        2.16773884242,
        2.12362292242,
        2.07818050242
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 2.13437415062,
      "stddev": 0.10376699747431908,
      "median": 2.10075887142,
      "user": 2.4839340400000003,
      "system": 2.8656074599999997,
      "min": 2.05382659642,
      "max": 2.39593725842,
      "times": [
        2.39593725842,
        2.14971084642,
        2.0939039664199997,
        2.0582995454199997,
        2.05382659642,
        2.08286848842,
        2.10761377642,
        2.11087123642,
        2.21670702642,
        2.07400276542
      ]
    }
  ]
}

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

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 1.308 ± 0.012 1.294 1.332 2.02 ± 0.03
pacquet@main 1.346 ± 0.042 1.307 1.442 2.08 ± 0.07
pnpr@HEAD 0.648 ± 0.007 0.639 0.664 1.00
pnpr@main 0.649 ± 0.009 0.635 0.670 1.00 ± 0.02
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 1.3084612022800002,
      "stddev": 0.011756881187317771,
      "median": 1.3097245211800002,
      "user": 1.2834974600000002,
      "system": 1.66066562,
      "min": 1.29390698918,
      "max": 1.33182248818,
      "times": [
        1.31102788318,
        1.3084211591800001,
        1.33182248818,
        1.3149692161800002,
        1.29527207918,
        1.29632931118,
        1.31687444218,
        1.29390698918,
        1.30324315818,
        1.3127452961800001
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 1.3463289378799999,
      "stddev": 0.041714020793775314,
      "median": 1.33509595668,
      "user": 1.2888723600000003,
      "system": 1.6938282199999999,
      "min": 1.30733090018,
      "max": 1.44249351018,
      "times": [
        1.31817615118,
        1.30936521418,
        1.30733090018,
        1.44249351018,
        1.3349145281800001,
        1.33527738518,
        1.34463360018,
        1.3939565631800002,
        1.33189623618,
        1.34524529018
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.64763000418,
      "stddev": 0.0071394063902914745,
      "median": 0.64664086618,
      "user": 0.33068205999999994,
      "system": 1.2506776199999998,
      "min": 0.6386749581800001,
      "max": 0.66368979118,
      "times": [
        0.6440262291800001,
        0.6460151321800001,
        0.6485732991800001,
        0.66368979118,
        0.64145119518,
        0.6426836181800001,
        0.65335213518,
        0.6505670831800001,
        0.6386749581800001,
        0.64726660018
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.6485522717800001,
      "stddev": 0.00943830761946736,
      "median": 0.64701757218,
      "user": 0.32630655999999997,
      "system": 1.26309592,
      "min": 0.6346906791800001,
      "max": 0.6698745141800001,
      "times": [
        0.6467891611800001,
        0.64139698318,
        0.64724598318,
        0.64944824018,
        0.6463198361800001,
        0.65676960118,
        0.6698745141800001,
        0.6346906791800001,
        0.64942258218,
        0.6435651371800001
      ]
    }
  ]
}

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

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 3.010 ± 0.037 2.968 3.091 4.59 ± 0.10
pacquet@main 3.008 ± 0.028 2.964 3.048 4.59 ± 0.09
pnpr@HEAD 0.655 ± 0.011 0.642 0.683 1.00
pnpr@main 0.667 ± 0.058 0.635 0.831 1.02 ± 0.09
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 3.0102097265400003,
      "stddev": 0.0374445844283434,
      "median": 3.0046616639400003,
      "user": 1.7852895599999994,
      "system": 1.94962272,
      "min": 2.96769407694,
      "max": 3.09119218294,
      "times": [
        3.00206685394,
        3.03043969794,
        2.96769407694,
        2.99587764894,
        2.96865475994,
        3.00725647394,
        2.98598681094,
        3.09119218294,
        3.00747158194,
        3.04545717794
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 3.0078761520400006,
      "stddev": 0.028444558503863692,
      "median": 3.00885426144,
      "user": 1.76247716,
      "system": 1.9747484199999998,
      "min": 2.9637325169400004,
      "max": 3.0477181569400003,
      "times": [
        3.00534044694,
        3.0197898259400002,
        3.04566299094,
        2.98927243294,
        2.9637325169400004,
        3.0477181569400003,
        2.9690276409400003,
        3.02395016694,
        3.00189926594,
        3.01236807594
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.65515171834,
      "stddev": 0.011010368159911884,
      "median": 0.65357999194,
      "user": 0.32236516,
      "system": 1.2846942199999998,
      "min": 0.64239282594,
      "max": 0.68341389894,
      "times": [
        0.65723300894,
        0.6534360999400001,
        0.65245476294,
        0.6488234309400001,
        0.65805473794,
        0.68341389894,
        0.65485552094,
        0.64712901294,
        0.64239282594,
        0.65372388394
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.6670283991400001,
      "stddev": 0.058424777514286916,
      "median": 0.6469486524400001,
      "user": 0.32909025999999997,
      "system": 1.2658811199999997,
      "min": 0.63531178194,
      "max": 0.83069817694,
      "times": [
        0.67315523194,
        0.64679458694,
        0.65738699694,
        0.6471027179400001,
        0.6491291559400001,
        0.64657821894,
        0.6436972789400001,
        0.63531178194,
        0.64042984494,
        0.83069817694
      ]
    }
  ]
}

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

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 7.548 ± 0.193 7.360 8.060 1.38 ± 0.04
pacquet@main 7.597 ± 0.192 7.326 8.018 1.39 ± 0.04
pnpr@HEAD 5.469 ± 0.059 5.364 5.541 1.00
pnpr@main 5.515 ± 0.087 5.373 5.670 1.01 ± 0.02
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 7.547636674000001,
      "stddev": 0.1930123825306599,
      "median": 7.5127188382000005,
      "user": 4.17198458,
      "system": 3.76167322,
      "min": 7.359836271200001,
      "max": 8.0601561412,
      "times": [
        7.605879192200001,
        7.5159730822,
        8.0601561412,
        7.4751668882,
        7.3950579122,
        7.5057782782,
        7.5163244192,
        7.359836271200001,
        7.509464594200001,
        7.5327299612
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 7.596862762399999,
      "stddev": 0.19190059507705892,
      "median": 7.6153833107,
      "user": 4.122898780000001,
      "system": 3.7606222199999997,
      "min": 7.3259826412,
      "max": 8.0182949392,
      "times": [
        7.4642639632000005,
        7.4487503182,
        7.4555467202,
        8.0182949392,
        7.6661892252,
        7.3259826412,
        7.587997421200001,
        7.6924365662000005,
        7.6663966292,
        7.6427692002
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 5.4694999083999996,
      "stddev": 0.05897366065639914,
      "median": 5.4740521032,
      "user": 2.7717368799999997,
      "system": 3.1971334199999997,
      "min": 5.3643262502,
      "max": 5.5414531382000005,
      "times": [
        5.5252188542,
        5.465190172200001,
        5.513130209200001,
        5.4403282682,
        5.3643262502,
        5.4164259472000005,
        5.417494238200001,
        5.5414531382000005,
        5.5285179722,
        5.4829140342
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 5.514961098600001,
      "stddev": 0.08713541965524363,
      "median": 5.520505943200001,
      "user": 2.76312578,
      "system": 3.20970272,
      "min": 5.3728063832,
      "max": 5.6700273052000005,
      "times": [
        5.572450987200001,
        5.5161400662,
        5.5629651742,
        5.561292943200001,
        5.3728063832,
        5.6700273052000005,
        5.409544906200001,
        5.523902540200001,
        5.517109346200001,
        5.4433713342
      ]
    }
  ]
}

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12737
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
4,180.31 ms
(-10.68%)Baseline: 4,680.20 ms
5,616.24 ms
(74.43%)
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
🚷 view threshold
3,010.21 ms
(-1.61%)Baseline: 3,059.43 ms
3,671.31 ms
(81.99%)
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
🚷 view threshold
1,308.46 ms
(-4.07%)Baseline: 1,363.96 ms
1,636.75 ms
(79.94%)
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
🚷 view threshold
4,156.34 ms
(-10.91%)Baseline: 4,665.14 ms
5,598.16 ms
(74.24%)
isolated-linker.fresh-restore.cold-cache.cold-store.cold-pnpr📈 view plot
🚷 view threshold
7,547.64 ms
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
🚷 view threshold
628.48 ms
(-1.11%)Baseline: 635.54 ms
762.65 ms
(82.41%)
🐰 View full continuous benchmarking report in Bencher

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12737
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,135.03 ms
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
655.15 ms
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
647.63 ms
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
⚠️ NO THRESHOLD
2,207.76 ms
isolated-linker.fresh-restore.cold-cache.cold-store.cold-pnpr📈 view plot
⚠️ NO THRESHOLD
5,469.50 ms
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
697.45 ms
🐰 View full continuous benchmarking report in Bencher

A full-history audit found 15 pnpm/pnpm commit SHAs cited in pacquet doc
comments that resolve on GitHub (kept alive by pull-request refs) but are
not ancestors of origin/main — fragile exactly as this PR's AGENTS.md
guidance warns. These were pre-existing links the dead-link repair didn't
touch because they were not 404s.

Each reference is repinned to an on-main commit with byte-identical file
content, so the line anchors stay accurate:

- For files the cited PR did not modify, the pinned commit is the branch
  point (merge-base with main), or main HEAD (a6f303c) when the file is
  unchanged there. Anchors carry over verbatim.
- For files the cited PR did modify, the pin moves to main HEAD and the
  anchors are re-derived against the merged content by matching the cited
  lines.

Verified after the change: every pnpm/pnpm SHA referenced in pacquet is
reachable from origin/main (git merge-base --is-ancestor exits 0), and every
link resolves (HTTP 200). Comment-only change; no code is affected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176j9z5mqFgFHRKhsusR3co
@zkochan

zkochan commented Jun 30, 2026

Copy link
Copy Markdown
Member

Why do we need links with commit hashes if the changes are in the same repository? Especially I don't like that this way you need to wait for a PR to be merged to create a proper link.

@KSXGitHub KSXGitHub marked this pull request as draft June 30, 2026 09:57
@KSXGitHub

Copy link
Copy Markdown
Contributor Author

Why do we need links with commit hashes if the changes are in the same repository? Especially I don't like that this way you need to wait for a PR to be merged to create a proper link.

@zkochan I have prompted the AI to change them to relative paths.

Actually though. I think the historical ports should stay permalinks to not risk stale.

Imagine editing the TypeScript code and then the links become invalid.

And I don't think future implementers, be it manual or AI-assisted would always detect the invalid links.

And I also don't think it's possible to design such a lint to ensure eternal validity of references either.

Anyway. The AI agent is in process. If you change your mind, the new commit can just be easily reverted.

I have marked this PR as draft again.

@zkochan

zkochan commented Jun 30, 2026

Copy link
Copy Markdown
Member

I don't care about the links. pacquet has already almost 100% feature parity with pnpm. We can remove the links altogether. Currently all changes are done to both ts and rust pnpm at the same time. I would vote for removing the links altogether. As well as any text that references the typescript code. pacquet is already the source of truth.

@KSXGitHub

Copy link
Copy Markdown
Contributor Author

I don't care about the links. pacquet has already almost 100% feature parity with pnpm. We can remove the links altogether. Currently all changes are done to both ts and rust pnpm at the same time. I would vote for removing the links altogether. As well as any text that references the typescript code. pacquet is already the source of truth.

@zkochan The AI is working on that.

@KSXGitHub KSXGitHub changed the title docs(pacquet): repair dead GitHub permalinks in Rust comments docs(pacquet): remove TypeScript-code references from comments and document the parity paradigm Jun 30, 2026
@KSXGitHub KSXGitHub marked this pull request as ready for review June 30, 2026 14:06
@KSXGitHub KSXGitHub force-pushed the claude/fix-github-permalinks-4kb0ye branch from 6676a9f to 24dc366 Compare June 30, 2026 14:28
…ment the parity paradigm

pacquet and the TypeScript pnpm CLI are co-developed parallel
implementations at near-complete feature parity, with neither stack
downstream of the other. Remove the GitHub permalinks and the "mirrors
upstream's X" framing that pointed pacquet comments at the pnpm
TypeScript source, and rewrite the affected prose to describe pacquet's
own behavior.

Update the agent and contributor guides (root and pacquet AGENTS.md,
pacquet CODE_STYLE_GUIDE.md, README, and related docs) to state the new
paradigm and stop instructing contributors to cite upstream permalinks.

Issue and pull-request references, third-party attributions, generic
pnpm-product mentions, and behavioral documentation are preserved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176j9z5mqFgFHRKhsusR3co
@KSXGitHub KSXGitHub force-pushed the claude/fix-github-permalinks-4kb0ye branch from 24dc366 to 5719fd2 Compare June 30, 2026 14:50
@zkochan zkochan merged commit f57f5af into main Jun 30, 2026
34 of 35 checks passed
@zkochan zkochan deleted the claude/fix-github-permalinks-4kb0ye branch June 30, 2026 18:53
adrian-niculescu added a commit to adrian-niculescu/pnpm that referenced this pull request Jul 1, 2026
…n test

The mixed-filter ordering test cited the TypeScript
`{ ...prodFilteredGraph, ...filteredGraph }` spread; describe the ordering as
pacquet's own behavior, consistent with the parity paradigm (pnpm#12737)
and the already-de-cited twin in recursive.rs.
KSXGitHub pushed a commit that referenced this pull request Jul 3, 2026
…references

Apply the #12737 paradigm to this branch's files: pacquet and
the TypeScript pnpm CLI are co-developed parallel implementations at
near-complete parity, neither downstream of the other, so comments
describe pacquet's own behavior rather than pointing at the TS source.

Removed the `/blob/` permalinks to the pnpm-org TypeScript repos and the
'Ports / Mirrors / matching the TS X' framing (cited TS symbols and files
like otp.test.ts, recursivePublish, generateProvenance, createReadline-
Interface, execa, libnpmpublish, sigstore-js), rewriting the affected
prose. Kept issue/PR references, pnpm-product mentions, shared-contract
identifiers (ERR_PNPM_* codes, the pnpm:global reporter channel, npm
registry terms), third-party attributions, and Rust intra-doc links.

Comment-only, except two incidental lint fixes to the new tests surfaced
while verifying (a Default field-reassign and a use-collapse).
zkochan added a commit to aqeelat/pnpm that referenced this pull request Jul 4, 2026
…rivation

An earlier rebase of this branch reverted the repo-wide removal of
TypeScript-code references from pacquet comments (pnpm#12737)
across resolve_dependency_tree.rs, re-adding stale permalinks and
'mirrors upstream' prose in code this PR does not otherwise touch.
Restore the cleaned-up comment text and reword the new code's own
comments to describe pacquet's contract instead of citing TS symbols.

Also deduplicate the npm-alias / npm:<range> / jsr name derivation:
overlay_lookup_names now builds its candidate set from
real_package_name_of instead of carrying a second copy of the same
parsing logic. Behaviorally equivalent for every specifier shape
(plain, npm-alias, range form, empty target, unparsable jsr, missing
alias, alias-equals-inner dedup).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

product: pacquet reviewed: coderabbit CodeRabbit submitted an approving review state: automerge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants