jdx/mise · error
cannot upgrade {} because not every request binding was reso
Error message
cannot upgrade {} because not every request binding was resolved What it means
During a v0 lockfile format upgrade, `mise lock` must bind every tool request in the config to a concrete resolved entry. This error is thrown when `bind_requests` fails to bind at least one request, meaning the upgraded lockfile would be incomplete, so the upgrade is aborted instead of writing a partial lockfile.
Source
Thrown at src/cli/lock.rs:539
let (results, resolution_errors) = self
.process_tools(&settings, &tools, &target_platforms, &mut lockfile)
.await?;
let resolution_succeeded = resolution_errors.is_empty();
all_resolution_errors.extend(resolution_errors);
let platform_regressions =
self.platform_regression_errors(&lockfile, &stale_versions, &results);
if !platform_regressions.is_empty() {
all_platform_regressions.extend(platform_regressions);
continue;
}
let format_changed =
self.upgrade && lockfile.lockfile_version() == 0 && resolution_succeeded;
if format_changed {
self.prepare_lockfile_format(&lockfile_path, &mut lockfile);
if !self.bind_requests(&mut lockfile, &tools, &target_platforms) {
bail!(
"cannot upgrade {} because not every request binding was resolved",
display_path(&lockfile_path)
);
}
} else {
self.bind_requests(&mut lockfile, &tools, &target_platforms);
}
// Prune stale versions AFTER provenance checks complete
self.prune_stale_versions(&mut lockfile, &tools);
if !self.upgrade {
self.show_stale_version_prune_message(&lockfile_path, &stale_versions, false)?;
}
let successful = results
.iter()
.filter(|result| matches!(result.status, LockTaskStatus::Updated))
.count();View on GitHub (pinned to afd2eddd3a)
Solutions
- Re-run `mise lock --upgrade` after fixing any resolution warnings; transient network failures during resolution are the most common cause.
- Compare the [tools] selectors in mise.toml with the lockfile entries and remove/rename stale requests.
- Run `mise install` to ensure all requested tools resolve and install before upgrading.
- As a last resort, delete the v0 lockfile and regenerate it fresh with `mise lock`.
Example fix
// before: stale selector in mise.toml [tools] node = "lts/dubnium" # no longer resolvable // after [tools] node = "22"
Defensive patterns
Strategy: validation
Validate before calling
# ensure every configured tool resolves before upgrading mise ls --missing || true mise install
Prevention
- Resolve and install all tools (`mise install`) before `mise lock --upgrade`.
- Remove stale tool requests from mise.toml that no longer match lockfile entries.
- Run lock upgrades on a machine with network access so resolution succeeds fully.
- Prefer regenerating the v0 lockfile over incremental upgrades when many entries changed.
When it happens
Trigger: Run `mise lock --upgrade` on a version-0 lockfile where resolution succeeded overall (`resolution_succeeded` is true) but `bind_requests` returns false — some configured tool request cannot be matched to a resolved version/platform entry in `tools` or `target_platforms`.
Common situations: Configs with platform-specific or aliased tool requests whose resolved counterparts are missing; lockfiles created by an older mise with entries that no longer match current config selectors; partial resolution after network or registry errors.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- cannot upgrade {} because no configured tools were resolved
- mise upgrade --monorepo is not implemented yet
- locked mode requires lockfile to be enabled hint: Remove `lo
- {}
- lockfile {} changed while the format upgrade was being prepa
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/bf4396e164f4abb7.
Report an issue: GitHub.