jdx/mise · error

changed while the changes were being applied; nothing more…

Error message

{} changed while the changes were being applied; nothing more was written. Run `mise dot pull` again

What it means

This is the incremental guard during the apply loop: before writing each step, the live file is re-checked against the planned baseline. If an earlier step's writes or a concurrent edit changed this path after the plan was made, the loop stops — already-written changes stay, but nothing further is written, because undo would otherwise restore the planned version over the newer edit.

Solutions

  1. Run `mise dot pull` again, as the message says, to rebuild the plan and apply the remaining changes safely.
  2. Inspect the named path; if the interim edit matters, `mise dot save <path>` before pulling.
  3. Ensure only one mise dot operation runs at a time; external editors can still race the lock.

Example fix

before: mise dot pull (~/.bashrc changed mid-apply) | after: mise dot save ~/.bashrc (keep the interim edit if desired) && mise dot pull
Defensive patterns

Strategy: retry

Validate before calling

flock /tmp/mise-dot.lock mise dot pull  # serialize sync operations against concurrent writers

Try / catch

mise dot pull || mise dot pull  # remaining steps are re-planned and applied on retry

Prevention

When it happens

Trigger: Mid-application of the ready step list in `mise dot pull`: for the current step, `live_object(repo, path) != step.before` or `live_permissions(path) != step.before_mode` at that moment.

Common situations: A long-running apply interrupted by an editor autosave, symlink target change, or another process rewriting a later-listed tracked file; two mise instances racing on the same machine.

Understand the failure class

Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.

Related errors


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

Appendix: source

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

                || live_permissions(&step.path)? != step.before_mode
            {
                bail!(
                    "{} changed before application; nothing was written",
                    display_path(&step.path)
                );
            }
        }
        for directory in &mut directories {
            directory.apply()?;
        }
        for step in &ready {
            // the file may have changed since the plan was made: an edit
            // that landed meanwhile is never overwritten (undo would bring
            // back the planned version, not it)
            if live_object(repo, &step.path)? != step.before
                || live_permissions(&step.path)? != step.before_mode
            {
                bail!(
                    "{} changed while the changes were being applied; nothing more was written. Run `mise dot pull` again",
                    display_path(&step.path)
                );
            }
            let pending =
                journal::begin_changes("history", &display_path(&step.path), [step.path.clone()])?;
            touched.push(step.path.clone());
            let affected = display_path(&step.path);
            scope.with_operation(|op| op.affected.push(affected.clone()));
            match &step.pending.object {
                Some((mode, oid)) => {
                    replay::write_path_with_mode(repo, &step.path, mode, oid, step.desired_mode)?
                }
                None => replay::remove(&step.path)?,
            }
            journal::commit_changes(pending);
            let mut next = step.pending.next.clone();
            let oid = step.pending.object.clone();

View on GitHub (pinned to 533346cc37)