{"record":{"id":"951e302873a4270f","repo":"jdx/mise","slug":"pnpm-lockfile-dependency-name-at-version-h","errorCode":null,"errorMessage":"pnpm lockfile dependency {name:?} at {version:?} has no package snapshot","messagePattern":"pnpm lockfile dependency (.+?) at (.+?) has no package snapshot","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/task/workspace/node.rs","lineNumber":444,"sourceCode":"    }\n    let packages = candidates\n        .into_iter()\n        .flat_map(|candidate| {\n            available\n                .iter()\n                .filter(move |package| {\n                    *package == &candidate\n                        || package\n                            .strip_prefix(&candidate)\n                            .is_some_and(|suffix| suffix.starts_with('('))\n                })\n                .cloned()\n        })\n        .collect::<BTreeSet<_>>();\n    if !packages.is_empty() {\n        return Ok(packages.into_iter().collect());\n    }\n    eyre::bail!(\"pnpm lockfile dependency {name:?} at {version:?} has no package snapshot\")\n}\n\nfn workspace_tasks(\n    manifest: &PackageJson,\n    package_manager: &str,\n    source: &Path,\n    turbo: Option<&TurboJson>,\n    workspace_root: &Path,\n) -> BTreeMap<String, WorkspaceTask> {\n    manifest\n        .scripts\n        .iter()\n        .map(|(name, script)| {\n            let command = shell_words::join([package_manager, \"run\", name, \"--\"]);\n            (\n                name.clone(),\n                WorkspaceTask {\n                    command,","sourceCodeStart":426,"sourceCodeEnd":462,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/task/workspace/node.rs#L426-L462","documentation":"resolve_package_keys maps a dependency name+version to entries in the lockfile's packages/importers snapshots by matching keys like `name@version` (with several prefix variants). If no snapshot key matches after trying all forms, mise cannot link the dependency into the workspace graph and fails fast.","triggerScenarios":"Calling dependency_package_keys on a pnpm-lock.yaml whose packages: section lacks an entry for the resolved `name@version` — e.g. the dependency was removed from packages but is still referenced, an alias/peer dep whose snapshot key uses a different form, or a truncated lockfile.","commonSituations":"Stale lockfiles after dependency upgrades; peer dependencies or aliased packages (`npm:name@x`) recorded differently than the lookup expects; pnpm store prune or partial checkout dropping packages entries; lockfile format drift between pnpm major versions.","solutions":["Run `pnpm install` to resynchronize pnpm-lock.yaml so every referenced dependency has a packages snapshot","Verify the lockfile contains a `packages:` entry matching `name@version` for the offending dependency (check for alias forms like `npm:pkg@version`)","Delete pnpm-lock.yaml and regenerate if entries appear inconsistent after a pnpm major-version upgrade"],"exampleFix":"// before: dependency references version absent from packages\n// after running `pnpm install`, lockfile contains:\npackages:\n  left-pad@1.3.0:\n    resolution: {integrity: sha512-...}","handlingStrategy":"fallback","validationCode":"// verify snapshot presence before resolution\nconst key = `${name}@${version}`;\nif (!(key in lockfile.packages)) console.warn(`missing snapshot for ${key}; run pnpm install`);","typeGuard":null,"tryCatchPattern":"catch (e) { if (String(e).includes('has no package snapshot')) { execSync('pnpm install'); retry(); } else throw e; }","preventionTips":["Commit lockfiles together with package.json changes","Run pnpm install after any dependency change before running mise tasks","Watch for aliased deps (npm:...) which snapshot under different keys"],"tags":["pnpm","lockfile","node","resolution"],"backgroundTag":"entity-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}