jdx/mise · error
setup has conflicts; nothing was bootstrapped; use `mise…
Error message
setup has conflicts; nothing was bootstrapped; use `mise dot status` to resolve them
What it means
`mise dot` bootstrapping aborts because the remote repository setup step reported a conflict (`setup_held`) or the sync status file contains unresolved conflicts. Nothing was changed/bootstrapped, so the user must inspect the conflict state first. mise deliberately refuses to guess at a resolution.
Solutions
- Run `mise dot status` to list the conflicts and their files.
- Resolve or discard the conflicting local/remote changes indicated by the status output.
- Clear the conflict state (re-sync or reset via mise dot subcommands) and re-run the bootstrap.
- Use --dry-run first to inspect what setup would do before applying it.
Example fix
// before mise dot # fails: setup has conflicts // after mise dot status # inspect conflicts mise dot sync --resolve theirs # or resolve manually mise dot # re-run bootstrap
Defensive patterns
Strategy: validation
Validate before calling
const status = JSON.parse(require('child_process').execSync('mise dot status --output json').toString());
if (status.conflicts?.length) { throw new Error('resolve conflicts before bootstrap: ' + status.conflicts.join(', ')); } Type guard
function hasConflicts(status) { return Array.isArray(status?.conflicts) && status.conflicts.length > 0; } Prevention
- Run `mise dot status` before bootstrapping in scripts
- Resolve conflicts immediately after sync failures
- Avoid concurrent mise dot runs on the same state directory
When it happens
Trigger: Running `mise dot` (ssh/remote repository bootstrap) when the setup outcome is 'held' (setup_held) or `read_status(store.state_dir()).conflicts` is non-empty.
Common situations: A previous sync or bootstrap left the remote repository state file in a conflicted state; two machines edited the same managed files; a partial/failed prior bootstrap left status conflicts behind.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- bootstrap from repository failed with
- bootstrap plan contains resources with unknown state
- choose only one resolution for
- conflicting bootstrap secret declarations for
- conflicting bootstrap service declarations for
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/11491b06308e9f65.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/ssh.rs:126
)
.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 dot 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 533346cc37)