jdx/mise · error
sync paused: resolve all
Error message
sync paused: resolve all {} conflict(s) before sharing resumes; `mise dot pull --take-remote-all` chooses the repository's version for every conflict at once, and `mise dot status` says whether any path still needs a different fix What it means
An interactive, non-dry-run `mise dot pull` was run with no path-specific resolution flags while conflicts still exist. Sharing is paused until conflicts are resolved, so the command fails and points to `--take-remote-all` as the blanket resolver and `mise dot status` for inspecting remaining conflicts.
Solutions
- Decide per-path: `mise dot pull --take-remote <path>` or `--keep-local <path>` (after `mise dot save <path>` if keeping local).
- Use `mise dot pull --take-remote-all` to accept the repository's version for every conflict at once.
- Inspect `mise dot status` to see each conflict and what fix it needs.
Example fix
before: mise dot pull (sync paused: 2 conflicts) | after: mise dot pull --take-remote-all, or per path: mise dot pull --take-remote ~/.gitconfig
Defensive patterns
Strategy: try-catch
Validate before calling
mise dot status # only pull with no flags when no conflicts remain
Try / catch
mise dot pull || mise dot pull --take-remote-all # or fail fast in scripts and resolve explicitly
Prevention
- Always pass a resolution strategy in scripts (e.g. --take-remote-all or per-path flags).
- Resolve conflicts promptly after `mise dot status` reports them.
- Use `--dry-run` first to preview conflicts before a real pull.
When it happens
Trigger: `mise dot pull` with `take_remote` and `keep_local` both empty while `status.conflicts` is non-empty, not a dry run, not an automatic pass — any conflicted path without an explicit or blanket decision reaches this bail.
Common situations: User runs plain `mise dot pull` after another machine changed shared dotfiles; a scripted pull lacking resolution flags; conflicts newly introduced by an upstream commit.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- cannot synchronize
- choose only one resolution for
- history is disabled (history.enabled = false)
- is not a conflict
- partial pulls are not supported: apply the complete setup…
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/b05a7b083df3a024.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/history/sync/apply.rs:353
// succeeded while one is still held -- whatever it decided alongside.
// Those decisions are recorded above; naming the rest is what is left.
if !blanket_held.is_empty() {
if !req.dry_run && !req.automatic {
bail!(
"sync paused: resolve all {count} conflict(s) before sharing resumes; a blanket choice cannot decide them all: {held}. Fix each of those paths, then pull again",
count = status.conflicts.len(),
held = blanket_held.join("; "),
);
}
// A preview and a background pass both carry on, so this is the
// only chance either gets to say why a path went undecided.
warn!(
"a blanket choice cannot decide {held}",
held = blanket_held.join("; "),
);
}
if take_remote.is_empty() && keep_local.is_empty() && !req.dry_run && !req.automatic {
bail!(
"sync paused: resolve all {} conflict(s) before sharing resumes; `mise dot pull --take-remote-all` chooses the repository's version for every conflict at once, and `mise dot status` says whether any path still needs a different fix",
status.conflicts.len()
);
}
info!(
"sync paused: {} conflict(s) remain; no files applied or published",
status.conflicts.len()
);
return Ok(ApplyOutcome {
held: status.conflicts.len(),
..Default::default()
});
}
// Only after all version-bound choices are valid may they replace Git's
// conflict objects in the complete tree. Use the committed ciphertext,
// never the decrypted comparison objects held by the resolution record.
if let Some(tree) = &inventory_tree {View on GitHub (pinned to 533346cc37)