{"record":{"id":"bf4396e164f4abb7","repo":"jdx/mise","slug":"cannot-upgrade-because-not-every-request-bindin","errorCode":null,"errorMessage":"cannot upgrade {} because not every request binding was resolved","messagePattern":"cannot upgrade (.+?) because not every request binding was resolved","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/lock.rs","lineNumber":539,"sourceCode":"            let (results, resolution_errors) = self\n                .process_tools(&settings, &tools, &target_platforms, &mut lockfile)\n                .await?;\n            let resolution_succeeded = resolution_errors.is_empty();\n            all_resolution_errors.extend(resolution_errors);\n\n            let platform_regressions =\n                self.platform_regression_errors(&lockfile, &stale_versions, &results);\n            if !platform_regressions.is_empty() {\n                all_platform_regressions.extend(platform_regressions);\n                continue;\n            }\n\n            let format_changed =\n                self.upgrade && lockfile.lockfile_version() == 0 && resolution_succeeded;\n            if format_changed {\n                self.prepare_lockfile_format(&lockfile_path, &mut lockfile);\n                if !self.bind_requests(&mut lockfile, &tools, &target_platforms) {\n                    bail!(\n                        \"cannot upgrade {} because not every request binding was resolved\",\n                        display_path(&lockfile_path)\n                    );\n                }\n            } else {\n                self.bind_requests(&mut lockfile, &tools, &target_platforms);\n            }\n\n            // Prune stale versions AFTER provenance checks complete\n            self.prune_stale_versions(&mut lockfile, &tools);\n            if !self.upgrade {\n                self.show_stale_version_prune_message(&lockfile_path, &stale_versions, false)?;\n            }\n\n            let successful = results\n                .iter()\n                .filter(|result| matches!(result.status, LockTaskStatus::Updated))\n                .count();","sourceCodeStart":521,"sourceCodeEnd":557,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/lock.rs#L521-L557","documentation":"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.","triggerScenarios":"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`.","commonSituations":"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.","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`."],"exampleFix":"// before: stale selector in mise.toml\n[tools]\nnode = \"lts/dubnium\"  # no longer resolvable\n\n// after\n[tools]\nnode = \"22\"","handlingStrategy":"validation","validationCode":"# ensure every configured tool resolves before upgrading\nmise ls --missing || true\nmise install","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["lockfile","cli","upgrade","binding"],"backgroundTag":"invalid-state-transition","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}