jdx/mise · error
changed in the complete repository merge; reconcile again
Error message
{} changed in the complete repository merge; reconcile again What it means
Before adopting a complete repository merge, mise cross-checks each planned restore step's expected object against the merged tree. If a step's restored object in the composed tree no longer equals the pending object (e.g. a divergent text merge produced different content, or a previously recorded resolution is stale), the pull aborts naming the changed path.
Solutions
- Re-run `mise dot pull` to reconcile against the fresh merge.
- Inspect the changed path and resolve the merge explicitly (`mise dot status`, --take-remote/--keep-local).
- If resolutions are stale, re-save the local side (`mise dot save <path>`) and pull again.
Example fix
before: mise dot pull (~/.gitconfig changed in the complete repository merge) | after: mise dot pull --take-remote ~/.gitconfig, or resolve explicitly then retry
Defensive patterns
Strategy: retry
Validate before calling
mise dot status # verify resolutions are current after upstream changes
Try / catch
mise dot pull || mise dot pull # re-reconcile once when the merge changed mid-plan
Prevention
- Re-save local resolutions after upstream updates (`mise dot save <path>`).
- Expect merges of divergent edits to require a second reconciling pull.
- Keep conflict resolutions fresh; stale resolutions trigger this mismatch.
When it happens
Trigger: During `mise dot pull` with an inventory tree present: for any ready step, `repo.restored_object_at(tree, branch_path) != step.pending.object` — a text merge or stale resolution changed the path's content in the full merge.
Common situations: Both sides edited the same file and the three-way merge yielded different content than recorded; an old conflict resolution no longer matches the new upstream tree.
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 while the changes were being applied; nothing more…
- local files were saved after enrollment planning; retry pull
- cannot merge dotfile Git history
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/2b1cbde65c706574.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/history/sync/apply.rs:599
.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 operation
// lock, before the first write.
for directory in &directories {
directory.validate()?;
}
for step in &ready {
if live_object(repo, &step.path)? != step.before
|| live_permissions(&step.path)? != step.before_modeView on GitHub (pinned to 533346cc37)