jdx/mise · error

{} is not a conflict

Error message

{} is not a conflict

What it means

The --take-remote/--keep-local resolution flags only accept paths that are currently registered as conflicts in the sync status. This error is thrown when a passed path does not correspond to any known conflict, so there is nothing to resolve. It aborts before any state is written.

Source

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

                        &conflict.branch_path,
                        remote.as_ref(),
                    )?,
                    live_mode: live_permissions(&local)?,
                    local: saved,
                    remote,
                    live,
                    take_remote: take_remote.contains(&local),
                },
            );
        }
    }
    for path in take_remote.iter().chain(keep_local.iter()) {
        if !status
            .conflicts
            .iter()
            .any(|conflict| roots.locate(&conflict.branch_path).path() == Some(path.as_path()))
        {
            bail!("{} is not a conflict", display_path(path));
        }
    }
    run::refresh(store, tracked, &mut status)?;
    if !req.dry_run {
        run::write_status(state_dir, &status)?;
    }
    if !status.conflicts.is_empty() {
        if req.dry_run {
            // Preview the whole paused setup even when reconciliation
            // cannot yet produce an applicable write set.
            let mut table = MiseTable::new(false, &["Path", "Action", "Group"]);
            for conflict in &status.conflicts {
                if let Some(path) = roots.locate(&conflict.branch_path).path() {
                    table.add_row(vec![
                        display_path(path),
                        "held: unresolved conflict".to_string(),
                        conflict.branch_path.clone(),
                    ]);

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Run `mise bootstrap dotfiles pull --dry-run` to list the currently held conflicts and use exactly those paths.
  2. If the conflict was already resolved, run a plain pull without the resolution flags to apply the remaining plan.
  3. Verify the path matches the recorded conflict path (same root and normalization) — check for symlinks, ~ expansion, or wrong home directory in the environment.

Example fix

# before
mise bootstrap dotfiles pull --take-remote ~/.bashrc   # not in conflict
# after: list real conflicts first
mise bootstrap dotfiles pull --dry-run
mise bootstrap dotfiles pull --take-remote ~/.zshrc
Defensive patterns

Strategy: validation

Validate before calling

# list current conflicts before resolving
mise bootstrap dotfiles pull --dry-run
# only pass paths shown as 'held: unresolved conflict'

Type guard

const isCurrentConflict = (path, conflicts) => conflicts.some(c => resolve(c.branchPath) === path);

Try / catch

try {
  await pull({ takeRemote: [path] });
} catch (e) {
  if (/is not a conflict$/.test(e.message.trim()) || /is not a conflict/.test(e.message)) {
    // conflict already resolved or wrong path: list and retry
    const conflicts = await dryRun();
    if (!isCurrentConflict(path, conflicts)) return;
  } else throw e;
}

Prevention

When it happens

Trigger: Running `mise bootstrap dotfiles pull --take-remote <path>` (or --keep-local) where `status.conflicts` contains no conflict whose branch_path locates to that exact path — the path was never in conflict, was already resolved, or is spelled/located differently than the recorded conflict path.

Common situations: Retrying a resolution command after the conflict was already resolved in a prior run; passing an absolute path when the conflict is recorded at a different root mapping; typos in the path; resolving against a fresh clone where no pull has produced conflicts yet.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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