{"record":{"id":"bd2bbca29eb10c5c","repo":"jdx/mise","slug":"no-lockfile-url-found-for-on-platform-loc","errorCode":null,"errorMessage":"No lockfile URL found for {} on platform {} (--locked mode requires pre-resolved URLs)","messagePattern":"No lockfile URL found for (.+?) on platform (.+?) \\(--locked mode requires pre-resolved URLs\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/aqua.rs","lineNumber":522,"sourceCode":"                if url.contains(&prefixed_version) || filename.contains(&prefixed_version) {\n                    prefixed_version\n                } else if url.contains(&format!(\"v{}\", tv.version))\n                    || filename.contains(&format!(\"v{}\", tv.version))\n                {\n                    format!(\"v{}\", tv.version)\n                } else {\n                    tv.version.clone()\n                }\n            } else if url.contains(&format!(\"v{}\", tv.version))\n                || filename.contains(&format!(\"v{}\", tv.version))\n            {\n                format!(\"v{}\", tv.version)\n            } else {\n                tv.version.clone()\n            };\n            (url, existing_url_api.clone(), v, filename, None)\n        } else if ctx.locked {\n            bail!(\n                \"No lockfile URL found for {} on platform {} (--locked mode requires pre-resolved URLs)\",\n                self.id,\n                platform_key\n            );\n        } else {\n            let (url, url_api, v, digest) = if pkg.package_type() == AquaPackageType::Http {\n                let (url, resolved_version) =\n                    resolve_aqua_http_url(&pkg, &v, v_prefixed.as_deref(), os(), arch()).await?;\n                (url, None, resolved_version, None)\n            } else if let Some(v_prefixed) = v_prefixed {\n                // Try v-prefixed version first because most aqua packages use v-prefixed versions\n                match self.get_url(&pkg, v_prefixed.as_ref()).await {\n                    // If the url is already checked, use it\n                    Ok((url, url_api, true, digest)) => (url, url_api, v_prefixed, digest),\n                    Ok((url_prefixed, url_api_prefixed, false, digest_prefixed)) => {\n                        let (url, url_api, _, digest) = self.get_url(&pkg, &v).await?;\n                        // If the v-prefixed URL is the same as the non-prefixed URL, use it\n                        if url == url_prefixed {","sourceCodeStart":504,"sourceCodeEnd":540,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/backend/aqua.rs#L504-L540","documentation":"In aqua install_version_, when running with ctx.locked (--locked mode), installs must use a URL already resolved and recorded in the lockfile. If no lockfile entry supplies a URL for this package/platform, the backend bails instead of performing network-based resolution, because locked mode forbids fresh resolution.","triggerScenarios":"Installing an aqua tool with --locked where the mise.lock entry has no pre-resolved download URL for the target platform (lockfile written by an older version, or platform never installed before).","commonSituations":"CI running `mise install --locked` with a stale or incomplete mise.lock; lockfile committed before a new platform (e.g. linux-arm64) was ever resolved; package switched to an HTTP-type aqua package that the older lock predates.","solutions":["Regenerate the lockfile: run `mise install` once without --locked so URLs are resolved and written to mise.lock, commit it, then retry locked installs.","Check mise.lock contains an entry for this package + platform and update mise/mise.lock format if it was produced by an older version.","Drop --locked for this install if fresh resolution is acceptable."],"exampleFix":"# before (CI)\nmise install --locked   # No lockfile URL found for aqua:owner/repo on platform linux-x64\n# after\nmise install            # once, to re-resolve and update mise.lock\ngit add mise.lock && git commit -m \"chore: update mise.lock\"\nmise install --locked   # now finds the pre-resolved URL","handlingStrategy":"fallback","validationCode":"# shell: ensure lockfile has a URL for this package+platform before --locked\njq -e --arg pkg \"aqua:owner/repo\" '.packages[$pkg]' mise.lock >/dev/null || mise install","typeGuard":null,"tryCatchPattern":"if mise install --locked fails with \"No lockfile URL found\"; then\n  mise install            # re-resolve and rewrite mise.lock\n  git add mise.lock\n  mise install --locked\nfi","preventionTips":["Commit an up-to-date mise.lock covering all target platforms used in CI.","Re-run unlocked install after changing tool versions or platforms.","Only use --locked in environments where mise.lock is guaranteed complete."],"tags":["aqua","lockfile","install"],"backgroundTag":"missing-config-value","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"}