Skip to content

fix: write registry allowScripts keys under install-strategy=linked - #9941

Open
manzoorwanijk wants to merge 1 commit into
npm:latestfrom
manzoorwanijk:fix/linked-allow-scripts-store-keys
Open

fix: write registry allowScripts keys under install-strategy=linked#9941
manzoorwanijk wants to merge 1 commit into
npm:latestfrom
manzoorwanijk:fix/linked-allow-scripts-store-keys

Conversation

@manzoorwanijk

Copy link
Copy Markdown
Contributor

Under install-strategy=linked, npm install-scripts approve <pkg> wrote verbose, duplicated file: entries pointing into node_modules/.store (one per incoming symlink depth) instead of name@version pins, and those store-path entries never matched at install time.

There are two root causes.
In findNodesForArgs (allow-scripts-cmd.js), positional args matched every Link pointing at the store package; each Link's relative file:.store/... resolved spec became its own policy key and could even strip the correct pin as stale.
In script-allowed.js, a store package has no edgesIn (they land on its incoming Links), so isRegistryNode refused registry keys, and ls, the post-install advisory, and prune treated a correct name@version entry as matching nothing.

The fix skips Link nodes when matching positional args, mirroring collectUnreviewedScripts and prune, so approvals key off the real package's trusted registry identity.
isRegistryNode and nameFromEdges now delegate edge-based checks to a link target's incoming Links, which also covers omit-lockfile-registry-resolved (approve by name, like the hoisted #9558 path).
resolvedSourceSpecs no longer fabricates file: specs from links into the store, so store packages are never keyed by store paths and prune cleans up the buggy entries while keeping the valid pin.

References

Fixes #9939

@manzoorwanijk
manzoorwanijk force-pushed the fix/linked-allow-scripts-store-keys branch from fc5be25 to 4b40b17 Compare September 1, 2026 09:56
@manzoorwanijk
manzoorwanijk marked this pull request as ready for review September 1, 2026 10:07
@manzoorwanijk
manzoorwanijk requested review from a team as code owners September 1, 2026 10:07
@manzoorwanijk

Copy link
Copy Markdown
Contributor Author

@reggi this probably needs a label for v11 backport.

@nikolawork

Copy link
Copy Markdown

Thanks for the quick fix! However it doesn't add the version number in allowScripts:

// expected:
"allowScripts": {
	"esbuild@0.28.1": true
}

// actual
"allowScripts": {
	"esbuild": true
}

I installed the fix locally using a local copy of the repo with this branch:

➜ npm -v
11.19.0

➜ node npm/bin/npm-cli.js -v
12.0.2

Then, both of these commands gave me the output above:

➜ node npm/bin/npm-cli.js install-script approve esbuild@0.28.1

➜ node npm/bin/npm-cli.js install-script approve esbuild

@manzoorwanijk

Copy link
Copy Markdown
Contributor Author

it doesn't add the version number in allowScripts:

It works perfectly fine

Screen.Recording.2026-09-01.at.3.15.02.PM.mov

npm-dev is an alias that I have created for local clone.

@nikolawork

Copy link
Copy Markdown

However it doesn't add the version number in allowScripts

Let's chalk it up to me not setting up the npm version from this PR properly

@nikolawork

Copy link
Copy Markdown

I see that #9940 has a fix solely for the deduping (same fix as you have in ‎lib/utils/allow-scripts-cmd.js) as well as some tests for that specific use case. Do we test for deduping in the current PR as well?

@manzoorwanijk

Copy link
Copy Markdown
Contributor Author

I see that #9940 has a fix solely for the deduping (same fix as you have in ‎lib/utils/allow-scripts-cmd.js) as well as some tests for that specific use case. Do we test for deduping in the current PR as well?

Yes, it covers many other cases as well.

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.

[BUG] Verbose and duplicate entries in allowScripts created when install-strategy=linked

2 participants