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
- Run `mise dot pull` again, as the message says, to rebuild the plan and apply the remaining changes safely.
- Inspect the named path; if the interim edit matters, `mise dot save <path>` before pulling.
- 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
- Run only one mise dot operation at a time.
- Quiesce processes that rewrite config files during pulls.
- After a mid-apply abort, always re-pull before manual edits to avoid confusing baselines.
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
- changed before application; nothing was written
- changed during setup adoption; retry pull
- changed in the complete repository merge; reconcile again
- local files were saved after enrollment planning; retry pull
- cannot synchronize
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)