Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Vendored npm refusal of a lockfileVersion 4 lock says to remove `patchedDependencies` and re-run `npm install`, but npm 12 keeps the lock at v4, so the advice loops and vendoring stays refused

Abierto
#1,576 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
Medio día
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
json, rust

Línea de trabajo

Start in crates/socket-patch-core/src/vendor/npm_lock.rs: the lock_version_gate check on lockfileVersion 4 (around line 442) and the user-facing v4 refusal text (around lines 443-457). Reproduce with the steps in the issue, where npm 12 keeps a lock at v4 after npm patch rm. Done when either the remedy text names a working downgrade such as npm install --lockfile-version 3, or the gate accepts a v4 lock that has no patchedDependencies and no patched records, and vendoring then succeeds.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

agent:triaged bug bughunt pm:npm priority:p1

[agent] Found by the scheduled npm bug-hunt routine (ledger #302).

Summary

Vendored mode refuses an npm 12 lockfileVersion: 4 lock with vendor_lockfile_version_unsupported (the #711 fix). The refusal tells the user to "remove the patchedDependencies entries and regenerate the lock with npm install". That doesn't work. Once npm 12.1+ has written a v4 lock, npm patch rm, a plain npm install and an rm -rf node_modules && npm install all leave it at lockfileVersion: 4, even though package.json has no patchedDependencies and no entry carries a patched record. The next vendor / scan --mode vendored refuses again with the same text, so following the advice loops.

The gate's own comment (npm_lock.rs:443-446) already says "re-running npm install keeps it at 4", but the user-facing text recommends doing exactly that.

What does work is npm install --lockfile-version 3 (or deleting package-lock.json and reinstalling). With that, vendoring succeeds and a fresh npm ci installs the patched bytes.

Impact

A user who has ever used npm patch (npm >= 12.1) can't move to vendored mode by following the CLI's instructions. Each attempt exits 1 with the same refusal. This is the same "advice loops" class as #1072. The refusal also fires on a v4 lock that no longer has any native patch, and its text there ("would drop or break that patch") points at a patch that doesn't exist.

Repro (npm 12.2.0 or 12.1.0, Linux, main e76cb9b)

mkdir p && cd p
echo '{"name":"p","version":"0.0.0","private":true}' > package.json
npm install [email protected] [email protected]
npm patch ms --edit-dir ../edit && sed -i '1i /* NATIVE */' ../edit/index.js && npm patch commit ../edit
# package-lock.json: lockfileVersion 4
# stage a [email protected] patch in .socket/manifest.json (or use get/scan --mode vendored)
socket-patch vendor --json            # vendor_lockfile_version_unsupported (expected: a native patch is present)

# Follow the advice:
npm patch rm ms                        # package.json no longer has patchedDependencies
npm install                            # lockfileVersion is still 4
rm -rf node_modules && npm install     # still 4
socket-patch vendor --json            # vendor_lockfile_version_unsupported again, same text

# What actually works:
npm install --lockfile-version 3       # lockfileVersion 3
socket-patch vendor --json            # applied
rm -rf node_modules && npm ci          # left-pad installs the patched bytes

I drove vendor with the repo's prebuilt patch-service fixture (tests/prebuilt_common) over the real installed bytes. Every npm step is a real npm install.

Expected vs actual

  • Expected: a refusal's remedy, followed literally, clears the refusal. docs/testing/npm-compatibility.md ("npm 12 notes") documents the refusal as "naming npm patch". The remedy should name a step that downgrades the lock, such as npm install --lockfile-version 3 once patchedDependencies is gone. Alternatively, the gate could accept a v4 lock that has no patchedDependencies and no patched records, since that lock has the v3 shape.
  • Actual: the remedy ("remove the patchedDependencies entries and regenerate the lock with npm install") leaves the lock at v4, and vendoring refuses forever with the same text.

Matrix (Linux, Node 22.22, main e76cb9b)

npm lfv after npm patch after npm patch rm + npm install after rm -rf node_modules + npm install vendor after the advice after npm install --lockfile-version 3
12.2.0 4 4 4 refused (repro ×2) 3, vendor applied, npm ci patched
12.1.0 4 4 4 refused 3, vendor applied

npm <= 12.0 never writes v4, so it isn't affected. macOS and Windows weren't probed (the routine's probe branches are blocked); the behaviour is npm's lock writer plus a platform-independent text.

Suspect code

  • crates/socket-patch-core/src/vendor/npm_lock.rs:449-457 (lock_version_gate, the v4 detail text)
  • The gate keys only on lockfileVersion == 4 (npm_lock.rs:442), not on whether patchedDependencies / patched records still exist.

No probe runs: Linux only.

Lenguaje dominante
Rust
Estrellas
8
Forks
1
Merge medio
16 h 18 min
PR fusionados (30 d)
587

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de SocketDev/socket-patch

Todos los issues de SocketDev/socket-patch

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.