jdx/mise · error · eyre::Report
automatic cross-platform provisioning is unavailable from a
Error message
automatic cross-platform provisioning is unavailable from a debug mise build; set mise_bin, remote_mise, or bootstrap_command
What it means
Thrown by RemoteArtifactResolver::ensure_official_local when mise needs to provision a remote host whose platform differs from the local one and none of mise_bin, remote_mise, or bootstrap_command is configured. Automatic provisioning works by downloading the official signed release artifact for the remote platform, and before doing that it verifies the running local binary against the minisign-verified SHASUMS256.txt manifest. A debug build (cfg!(debug_assertions), e.g. target/debug/mise from cargo run) can never match an official release checksum, so the check refuses up front instead of downloading the manifest and failing later.
Source
Thrown at src/system/remote.rs:1028
return Err(error).wrap_err_with(|| {
format!("official mise release artifact {asset} failed verification")
});
}
progress.finish();
info!(
"using signed official mise {} artifact {asset}",
env!("CARGO_PKG_VERSION")
);
self.artifacts.insert(asset, path.clone());
Ok(path)
}
async fn ensure_official_local(&mut self, local: &Path) -> Result<()> {
if self.official_local_verified {
return Ok(());
}
if cfg!(debug_assertions) {
bail!(
"automatic cross-platform provisioning is unavailable from a debug mise build; set mise_bin, remote_mise, or bootstrap_command"
);
}
let local_os = normalize_os(std::env::consts::OS);
let local_arch = normalize_arch(std::env::consts::ARCH);
let candidates = official_release_assets(&local_os, &local_arch)?;
let actual = crate::hash::file_hash_sha256(local, None)?;
let manifest = self.manifest().await?;
let official = candidates.iter().any(|asset| {
manifest
.checksum(asset)
.is_ok_and(|expected| expected.eq_ignore_ascii_case(&actual))
});
if !official {
bail!(
"automatic cross-platform provisioning refuses to replace a custom mise build with an official binary because {} does not match the signed mise {} release checksums; set mise_bin, remote_mise, or bootstrap_command",
local.display(),
env!("CARGO_PKG_VERSION")View on GitHub (pinned to 6f52dcdf99)
Solutions
- Set one of mise_bin, remote_mise, or bootstrap_command on the host entry in [bootstrap.remote.hosts.<name>] so provisioning is explicit
- Install and run an official mise release build (or cargo build --release of the same version) before using automatic cross-platform provisioning
- If mise is already installed on the remote, set remote_mise = "mise" to skip provisioning entirely
Example fix
# before (mise.toml) [bootstrap.remote.hosts.ci] host = "ci@build-1" # after [bootstrap.remote.hosts.ci] host = "ci@build-1" remote_mise = "mise" # or: bootstrap_command = "curl https://mise.run | sh", or mise_bin = "./target/release/mise"
Defensive patterns
Strategy: fallback
Validate before calling
// Before running any remote flow, require explicit provisioning in dev builds
let automatic = host.mise_bin.is_none()
&& host.remote_mise.is_none()
&& host.bootstrap_command.is_none();
if cfg!(debug_assertions) && automatic {
eyre::bail!(
"debug builds cannot auto-provision; set mise_bin/remote_mise/bootstrap_command for host '{}'",
host.name
);
} Type guard
fn has_explicit_provisioning(host: &RemoteHost) -> bool {
host.mise_bin.is_some() || host.remote_mise.is_some() || host.bootstrap_command.is_some()
} Try / catch
match run_remote(&host, &opts).await {
Err(e) if e.to_string().contains("debug mise build") => {
// dev-only: skip or fall back to a host entry with explicit provisioning
warn_once!("host '{}' needs mise_bin/remote_mise/bootstrap_command in dev builds", host.name);
}
other => other?,
} Prevention
- In dev workflows, always configure mise_bin (e.g. ./target/release/mise) on test hosts
- Gate cross-platform provisioning tests behind a release-built binary in CI
- Document that cfg!(debug_assertions) builds cannot fetch official artifacts
When it happens
Trigger: Running a debug-compiled mise (cargo run, target/debug/mise) and triggering remote/bootstrap against a host with a different OS/arch while [bootstrap.remote.hosts.<name>] sets none of mise_bin, remote_mise, or bootstrap_command.
Common situations: Contributors developing mise itself and testing the remote flow; CI pipelines that build unoptimized debug binaries; users of a locally checked-out repo running the binary from target/debug.
Related errors
- automatic cross-platform provisioning refuses to replace a c
- mise {} has no official precompiled artifact for {os}/{arch}
- remote platform response is incomplete
- remote platform response is invalid
- remote upload to '{}' failed with {status}
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/bfab2a5300793f96.
Report an issue: GitHub.