jdx/mise · error

sync paused: resolve all

Error message

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

What it means

When a blanket conflict choice is made, it promises to decide every conflict. If some paths were held — typically because their live side is unusable or their local baseline is missing/stale — the non-interactive, non-dry-run pull fails, listing exactly which paths remain undecided. The decisions that did succeed are still recorded; only the pass aborts.

Solutions

  1. Read the listed held paths from the message and fix each (e.g. `mise dot save <path>` for unsaved or missing baselines, or make the live side a regular file/symlink).
  2. Re-run `mise dot pull` after fixing.
  3. Alternatively resolve the problem paths individually with `--take-remote <path>` instead of a blanket flag.

Example fix

before: mise dot pull --keep-local-all (held: ~/.vimrc has unsaved changes) | after: mise dot save ~/.vimrc && mise dot pull --keep-local-all
Defensive patterns

Strategy: try-catch

Validate before calling

mise dot status  # confirm every conflict is resolvable (regular file/symlink, saved baseline) before a blanket flag

Try / catch

mise dot pull --take-remote-all || mise dot status  # on failure, read the held paths from the error and fix each

Prevention

When it happens

Trigger: `mise dot pull` (without --dry-run, not in automatic/background mode) with a blanket resolution flag where `blanket_held` is non-empty: held paths include files whose live side could not be read (UnusableLive), or keep-local paths with no saved baseline or unsaved changes.

Common situations: A file was replaced by a directory or fifo so the blanket choice cannot read it; keep-local blanket on a machine that never saved some files; a headless run where neither dry-run nor automatic suppression applies.

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


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/f920cb9839904d88. Report an issue: GitHub.

Appendix: source

Thrown at src/system/history/sync/apply.rs:339

                }
            }
            for pending in &status.pending_applications {
                if let Some(path) = roots.locate(&pending.branch_path).path() {
                    table.add_row(vec![
                        display_path(path),
                        "held: sharing paused for the entire setup".to_string(),
                        pending.branch_path.clone(),
                    ]);
                }
            }
            table.print()?;
        }
        // A blanket choice promises to decide every conflict, so it has not
        // 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()
            );
        }

View on GitHub (pinned to 533346cc37)