jdx/mise · error

the packslip lists {a} and {b} for this host and mise will n

Error message

the packslip lists {a} and {b} for this host and mise will not guess between them{hint}

What it means

A packslip manifest lists two artifacts that both match the host, and mise deliberately refuses to pick one. `select_artifact` returns `Selection::Ambiguous(a, b)` for the strict host match and the code bails with both names plus a hint listing the `variant` option values that would disambiguate.

Source

Thrown at src/backend/packslip.rs:337

    host: &HostPlatform,
    variant: Option<&str>,
) -> Result<&'a Artifact> {
    let strict = host.as_host();
    let variants = artifacts
        .iter()
        .filter_map(|a| a.variant.as_deref())
        .unique()
        .join(", ");
    let hint = match variant {
        Some(v) => format!(" with variant {v:?}"),
        None if !variants.is_empty() => {
            format!("; set `variant` to one of {variants} if one of those is meant for you")
        }
        None => String::new(),
    };
    match packslip::select_artifact(artifacts, &strict, variant, &FORMAT_PREFERENCE) {
        Ok(artifact) => return Ok(artifact),
        Err(Selection::Ambiguous(a, b)) => bail!(
            "the packslip lists {a} and {b} for this host and mise will not guess between them{hint}"
        ),
        Err(Selection::NoMatch) => {}
    }
    if host.libc.as_deref() == Some("gnu") {
        let musl = Host {
            libc: Some("musl"),
            ..strict
        };
        match packslip::select_artifact(artifacts, &musl, variant, &FORMAT_PREFERENCE) {
            Ok(artifact) => {
                debug!(
                    "no gnu build fits this host; taking the musl build {}, which is static",
                    artifact.name
                );
                return Ok(artifact);
            }
            Err(Selection::Ambiguous(a, b)) => bail!(

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Set the `variant` tool option to one of the artifact names listed in the hint.
  2. Check the release manifest and pick the artifact matching your libc (gnu vs musl).
  3. Report the ambiguous manifest to the upstream project if both entries are duplicates.

Example fix

// before
[tools]
"packslip:github.com/owner/tool" = "2.1"
// after
[tools]
"packslip:github.com/owner/tool" = { version = "2.1", variant = "gnu" }
Defensive patterns

Strategy: validation

Validate before calling

// before install, inspect the manifest for host-matching artifacts
// and count candidates; if >1, require a variant option
if (matchingArtifacts.length > 1 && !toolOpts.variant)
  throw new Error(`set variant to one of: ${matchingArtifacts.map(a => a.name).join(", ")}`);

Try / catch

match result {
  Err(e) if e.to_string().contains("mise will not guess between them") => {
    let names = extract_two_artifact_names(&e.to_string());
    bail!("set `variant` to one of {:?}", names);
  }
  other => other?,
}

Prevention

When it happens

Trigger: Installing a packslip tool whose release manifest contains two artifacts equal-preference for the host (e.g. two libc or arch variants) without a `variant` tool option set.

Common situations: Projects shipping both gnu and musl (or generic and tuned) builds for the same triple; manifests updated upstream to add a new variant; users on hosts where prior versions had one artifact and now have two.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/3870c45469d7e2fd. Report an issue: GitHub.