jdx/mise · error
setup has conflicts; nothing was bootstrapped; use `mise boo
Error message
setup has conflicts; nothing was bootstrapped; use `mise bootstrap dotfiles status` to resolve them
What it means
`mise ssh` (src/cli/ssh.rs:125) aborts bootstrapping when onboarding finished but left unresolved state: the onboarding outcome was `setup_held` or the sync status still lists conflicts, and the command was not a dry run. Nothing is installed; the user is directed to `mise bootstrap dotfiles status` to inspect and resolve the conflicts first.
Source
Thrown at src/cli/ssh.rs:125
)
.await?;
if let Some(directory) = &self.repository_preview_directory {
let preview = outcome
.preview_config
.as_ref()
.ok_or_else(|| eyre::eyre!("missing setup configuration preview"))?;
// The remote runner supplies a new directory inside its
// private staging area; never overwrite an existing tree.
std::fs::create_dir(directory)?;
crate::file::copy_dir_all_preserve_symlinks(preview.path(), directory)?;
}
if !self.repository_dry_run
&& (outcome.setup_held
|| !crate::system::history::sync::run::read_status(store.state_dir())?
.conflicts
.is_empty())
{
bail!(
"setup has conflicts; nothing was bootstrapped; use `mise bootstrap dotfiles status` to resolve them"
);
}
return Ok(());
}
crate::system::remote_repository::install(
&bundle,
&origin,
&revision,
self.repository_update,
self.repository_yes,
self.repository_dry_run,
)?;
return Ok(());
}
let scope = crate::github_relay::Scope::from_flags(
self.github_relay_read_only,
&self.github_relay_repo,View on GitHub (pinned to afd2eddd3a)
Solutions
- Run `mise bootstrap dotfiles status` to list the conflicts and resolve each one.
- Move aside or merge the conflicting local files, then rerun the bootstrap.
- Use `--repository-dry-run` first to preview what would conflict.
- If a prior bootstrap was interrupted, finish or roll back that onboarding before retrying.
Example fix
// before mise ssh host --bootstrap-dotfiles ... // after: inspect and resolve first mise bootstrap dotfiles status # resolve reported conflicts mise ssh host --bootstrap-dotfiles ...
Defensive patterns
Strategy: try-catch
Validate before calling
# detect conflicts before a real run mise ssh host --repository-dry-run ... || true mise bootstrap dotfiles status | grep -i conflict
Try / catch
try {
await $`mise ssh host --bootstrap-dotfiles ...`;
} catch (e) {
if (String(e).includes('setup has conflicts')) {
await $`mise bootstrap dotfiles status`; // inspect & resolve
}
} Prevention
- Always dry-run repository bootstraps first.
- Keep local dotfiles in sync with the repository to avoid conflicts.
- Resolve held/conflicted entries promptly after an interrupted bootstrap.
When it happens
Trigger: Running a non-dry-run `mise ssh` bootstrap where `onboard::run` reports `setup_held`, or `read_status(store.state_dir()).conflicts` is non-empty after onboarding.
Common situations: Dotfiles repository whose setup files conflict with existing local files (existing configs that would be overwritten); a previously interrupted bootstrap leaving held/conflicted entries; re-running bootstrap on a machine with divergent dotfiles.
Related errors
- the setup from {url} is paused; nothing was bootstrapped. `m
- mise executable not found after bootstrap_command
- bootstrap_command left multiple unchanged mise executables a
- bootstrap_command left multiple {kind} mise executables and
- [dotfiles]."{}": source does not exist: {}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/39ac53ed1aa99935.
Report an issue: GitHub.