jdx/mise · error
incoming setup has not been completely applied; run `mise…
Error message
incoming setup has not been completely applied; run `mise dot pull` before publishing
What it means
Publication verifies that the composed merge of the merged tree plus overlays equals the target tree, proving the incoming state was fully applied locally. If the recomposed tree differs, some incoming changes were never applied, and mise aborts the publish with instructions to pull first.
Solutions
- Run `mise dot pull` to fully apply the incoming setup, then retry the publish.
- Inspect files managed by sync for manual edits/deletions that diverge from the incoming tree and restore or commit them via pull.
- If an interrupted operation left partial state, re-run `mise dot pull` to complete application before publishing.
Example fix
// before: publishing with partially-applied incoming state mise dot sync // error: incoming setup has not been completely applied // after mise dot pull // completes application of incoming setup mise dot sync // now merged == tree and publish proceeds
Defensive patterns
Strategy: validation
Validate before calling
// verify the incoming tree was fully applied before publishing
let merged = repo.compose(&merged, &overlays)?;
if merged != tree {
eprintln!("run `mise dot pull` first");
return;
} Try / catch
match sync() {
Err(e) if e.to_string().contains("incoming setup has not been completely applied") => { pull(); sync(); }
other => other,
} Prevention
- Always `mise dot pull` after switching origins or branches before syncing.
- Do not manually edit or delete files managed by history sync.
- Re-run pull after any interrupted sync/pull to complete partial application.
When it happens
Trigger: Calling publish when the local working/merged state is missing part of the incoming tree — e.g. partial application after an interrupted pull, manual edits that diverge from the incoming manifest, or overlays that no longer reproduce the merged tree.
Common situations: A previous `mise dot pull` was interrupted mid-apply; the user manually deleted or edited files managed by sync; the incoming setup changed (new origin or branch) without pulling.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- cannot check staged changes: git is unavailable
- cannot check staged changes in
- cannot replace local history while
- could not reuse the fetched setup preview
- enrollment conflict in
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/16a1256479ff16f7.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/history/sync/publish.rs:79
.collect::<Vec<_>>()
.join(", ")
);
}
// Accepted choices were validated against saved, live, and remote
// versions. Carry their already-encrypted saved objects, not a new
// plaintext publication representation.
let overlays = conflicts
.into_iter()
.map(|path| {
Ok(crate::system::history::shadow::Overlay {
object: repo.object_at(local, &path)?,
path,
})
})
.collect::<Result<Vec<_>>>()?;
let merged = repo.compose(&merged, &overlays)?;
if merged != tree {
bail!(
"incoming setup has not been completely applied; run `mise dot pull` before publishing"
);
}
}
let Some(candidate) = heads.candidate(repo, &tree)? else {
return Ok(None);
};
if !allow_plaintext_history {
super::files::audit_history(repo, &candidate.commit, &Default::default())?;
}
candidate.adopt(repo)?;
Ok(Some(candidate.commit))
}
pub(crate) fn push(
remote: &Remote<'_>,
branch: &str,
commit: &str,View on GitHub (pinned to 533346cc37)