jdx/mise · error
local files were saved after enrollment planning; retry pull
Error message
local files were saved after enrollment planning; retry pull
What it means
During a setup-adoption pull (enrollment into sharing), mise verifies that the live local tree is exactly the tree that was planned at enrollment time. If composing the planned restore onto the current output tree differs from the actual local tree, files were modified after enrollment planning, so the pull refuses rather than adopting a tree built from stale assumptions.
Solutions
- Re-run `mise dot pull` to regenerate enrollment planning against the current files (as the message says, retry).
- If retries keep failing, re-run the enrollment/setup step so planning matches the live tree.
- Avoid editing tracked files between enrollment and the first successful pull.
Example fix
before: edit ~/.bashrc after enrollment planning, then mise dot pull (fails) | after: run mise dot pull so the plan is regenerated against current files
Defensive patterns
Strategy: retry
Validate before calling
mise dot status # ensure no edits land between enrollment and the first pull
Try / catch
mise dot pull || mise dot pull # bounded retry when the enrollment race is transient
Prevention
- Don't edit tracked files between enrollment and the first successful pull.
- Run the first pull immediately after enrollment, before other tooling touches configs.
- Quiesce config-rewriting daemons (theme switchers, package managers) during enrollment.
When it happens
Trigger: First `mise dot pull` after enrollment (restore steps pending) where any tracked file's content or mode changed between enrollment planning and the pull — detected by `repo.compose(output_tree_of(current), restore_planned) != output_tree_of(local)`.
Common situations: Editing dotfiles after enrollment but before the first pull; a package manager rewrote a tracked config in between; another tool touched enrolled files.
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 during setup adoption; retry pull
- changed before application; nothing was written
- changed in the complete repository merge; reconcile again
- changed while the changes were being applied; nothing more…
- cannot synchronize
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/bb346950a4d2a806.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/history/sync/apply.rs:592
.as_deref()
.ok_or_else(|| eyre::eyre!("local history disappeared"))?;
// The operation's own protective commit may save the unsaved
// versions that an explicit --take-remote decision will replace.
// Permit only changes at those preflighted paths; any other saved
// change requires a fresh complete plan.
let restore_planned = ready
.iter()
.map(|step| {
Ok(crate::system::history::shadow::Overlay {
path: step.pending.branch_path.clone(),
object: repo.object_at(local, &step.pending.branch_path)?,
})
})
.collect::<Result<Vec<_>>>()?;
if repo.compose(&repo.output_tree_of(current)?, &restore_planned)?
!= repo.output_tree_of(local)?
{
bail!("local files were saved after enrollment planning; retry pull");
}
// Do not let a divergent text merge or a stale resolution differ
// from the complete tree that will be adopted.
for step in &ready {
if repo.restored_object_at(tree, &step.pending.branch_path)? != step.pending.object
{
bail!(
"{} changed in the complete repository merge; reconcile again",
display_path(&step.path)
);
}
}
let candidate = heads
.candidate(repo, tree)?
.ok_or_else(|| eyre::eyre!("setup branch disappeared"))?;
audit_incoming_history(repo, &candidate.commit)?;
}
// Validate the complete batch again after acquiring the operationView on GitHub (pinned to 533346cc37)