jdx/mise · error

No matching complete lockfile artifact list found for

Error message

No matching complete lockfile artifact list found for {} on platform {} (--locked mode)

What it means

In `--locked` install mode, mise requires every artifact for the tool version to be pinned by a complete lockfile artifact list. When the lockfile has no artifact entry matching the requested platform (or additional asset patterns cannot be matched against lockfile artifacts), github.rs bails instead of falling back to unpinned resolution. This prevents installing a binary whose integrity was never recorded.

Solutions

  1. Run `mise lock` (without --locked) to regenerate the lockfile including artifacts for this platform
  2. Remove --locked / set locked=false for this install
  3. Verify the platform key matches one present in the lockfile (regenerate on the target OS/arch)

Example fix

// before
mise install --locked node@22.1.0   # fails: no locked artifacts for linux-x64
// after
mise lock node@22.1.0 && mise install --locked node@22.1.0
Defensive patterns

Strategy: validation

Validate before calling

// bash: ensure lockfile has artifacts for this platform before --locked install
grep -q "linux-x64" mise.lock && grep -q "artifacts" mise.lock || { echo 'run: mise lock'; exit 1; }

Prevention

When it happens

Trigger: Running `mise install --locked` (or locked=true) for a GitHub-backend tool where tv.lock_platforms lacks an artifacts list covering the current platform key, or `additional_patterns` were configured but no locked artifact matches them.

Common situations: Upgrading a tool to a version that was never locked (`mise lock` not run); lockfile generated on a different OS/arch; adding extra_patterns or additional assets after the lockfile was created.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/22a00115d35fe414. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/github.rs:905

                    &additional_patterns,
                    &platform.additional_artifacts,
                ) =>
            {
                platform
                    .additional_artifacts
                    .iter()
                    .map(|artifact| ReleaseAsset {
                        name: get_filename_from_url(&artifact.url),
                        url: artifact.url.clone(),
                        url_api: artifact.url_api.clone().unwrap_or_default(),
                        digest: None,
                    })
                    .collect()
            }
            _ if ctx.locked
                && (!additional_patterns.is_empty() || locked_additional_artifacts_present) =>
            {
                eyre::bail!(
                    "No matching complete lockfile artifact list found for {} on platform {} (--locked mode)",
                    tv.style(),
                    platform_key
                )
            }
            _ => {
                let mut assets = Vec::new();
                for pattern in &additional_patterns {
                    assets.push(
                        self.resolve_asset_url_for_target_with_pattern(
                            &tv,
                            &opts,
                            &repo,
                            &current_target,
                            Some(pattern),
                        )
                        .await?,
                    );

View on GitHub (pinned to 533346cc37)