mise lock silently keeps stale version for npm: backend tools when npm CLI is not installed
#10563
Unanswered
zeitlinger
asked this question in
Troubleshooting and bug reports
Replies: 1 comment 1 reply
-
I might understand it wrongly, but I believe mise doesn't know if it's an actual version or not until resolving the version with remote version lists. This should be fixed in Renovate. Also, I'm not sure if |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
When running
mise lock <npm-tool>on a host withoutnode/npminstalled, the npm backend's_list_remote_versionsfails withNo such file or directory (os error 2). The error is logged as aWARN, the tool is silently dropped from the resolved toolset, andmise lockwrites the lockfile without updating the npm tool's version — even though the user pinned an exact version inmise.toml.This breaks Renovate's automated mise lockfile updates: Renovate bumps the toml version, runs
mise lock <tool>, and commits a lockfile where the npm tool's version field is left at the old value. CI consuming the lockfile then fails with<pkg>@<new-version> is not in the lockfile.Reproduction
Same symptom for unfiltered
mise lock— thenpm:renovatelockfile entry is deleted entirely as "stale".Mise version
2026.6.12 linux-x64(also reproduces on2026.6.10).Why I think this is a bug
For an exact version in
mise.toml("npm:renovate" = "43.232.0"),mise lockdoesn't actually need to enumerate remote versions — the version is already known. Calling_list_remote_versions(which shells out tonpm view <pkg> versions time --json) is unnecessary and turns a missingnpmCLI into a silent failure.Real-world impact
Renovate's mise lockfile-update integration runs
mise lock <updated-tool>inside Renovate's container. That container hasmisebut notnode/npm. Every Renovate PR that bumps annpm:-backend tool produces a broken lockfile and fails CI.Example: prometheus/client_java#2239 — Renovate bumps
npm:renovate43.220.0 → 43.232.0 in mise.toml, butmise.lockretains 43.220.0, breaking CI.Suggested direction
Two options I see:
npmbackend, skip_list_remote_versions(and theensure_npm_for_version_checkdep check) when the requested version is an exact pin — fall through to lock-only metadata that doesn't need thenpmCLI.mise lock, when a tool resolves successfully viamise.toml's exact version, fall back to using the toml version for the lock entry even if the remote version list lookup fails.Happy to put up a PR if you can confirm preferred direction.
Beta Was this translation helpful? Give feedback.
All reactions