jdx/mise · error
repository application paused: reconcile repository conflict
Error message
repository application paused: reconcile repository conflicts first: {} What it means
Before applying the incoming repository tree during preparation, mise filters the tracked repository files for unresolved conflict markers. If any path (other than the manifest itself or ineligible files) still needs a conflict decision, applying the tree would clobber those decisions, so mise pauses application and lists the unresolved paths.
Source
Thrown at src/system/history/sync/run.rs:1011
return Ok(None);
};
if heads.base.as_ref() == Some(remote) {
return Ok(None);
}
let (merged, conflicts) = repo.merge_tree(local, remote)?;
let tree = tracked.manifest.write(repo, &merged)?;
let roots = Roots::current();
if repo.output_tree_of(local)? == tree && conflicts.is_empty() {
return Ok(None);
}
let unresolved: Vec<_> = conflicts
.into_iter()
.filter(|path| {
path != crate::system::history::manifest::PATH && !eligible(&roots, tracked, path)
})
.collect();
if !unresolved.is_empty() {
bail!(
"repository application paused: reconcile repository conflicts first: {}",
unresolved.join(", ")
);
}
Ok(Some(tree))
}
/// A bootstrap finished: the declarations that arrived through sync are
/// applied now, so `status` stops asking for one.
pub(crate) fn bootstrap_completed() {
let state_dir: &Path = &crate::dirs::STATE;
let status = match read_status(state_dir) {
Ok(status) => status,
Err(err) => {
warn!("history: could not record that the bootstrap ran: {err:#}");
return;
}
};View on GitHub (pinned to afd2eddd3a)
Solutions
- Resolve the listed conflicts (run `mise bootstrap dotfiles pull` interactively or use the conflict-resolution command to pick a side per path)
- Check `mise bootstrap dotfiles status` for pending conflicts and clear each one
- If a path should not be tracked at all, untrack it so it stops blocking application
Example fix
// before error: repository application paused: reconcile repository conflicts first: ~/.gitconfig, ~/.tmux.conf // after $ mise bootstrap dotfiles pull # choose versions for ~/.gitconfig and ~/.tmux.conf $ mise bootstrap dotfiles sync
Defensive patterns
Strategy: validation
Validate before calling
mise bootstrap dotfiles status # confirm no pending repository conflicts before syncing
Prevention
- Resolve conflicts immediately when a pull reports them instead of deferring
- Don't skip interactive conflict prompts during `pull` on headless machines — use a non-interactive resolution policy
When it happens
Trigger: `incoming_repository_tree` (called from `prepare`) finds `unresolved` non-empty: tracked repository paths carry conflict entries that the user has not resolved via the conflict-resolution flow.
Common situations: A pull brought conflicting versions of tracked dotfiles and the user skipped the conflict prompts; automated sync left conflicts pending on a headless machine; user edited files while a conflict decision was outstanding.
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
- sync paused: resolve all {} conflict(s) before sharing resum
- nothing can be applied until the held paths are decided
- {target_raw}: tracked in place; pass `--mode copy` after `mi
- {target_raw}: target is already managed by [dotfiles] edits;
- cannot synchronize: {reason}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/6fa6ad2b2ba45632.
Report an issue: GitHub.