jdx/mise · error
no matching interrupted operation; `mise dot history…
Error message
no matching interrupted operation; `mise dot history --pending` lists them
What it means
`mise dot recover` filters pending (interrupted) operation records by the optional operation selector; if no pending record matches, it bails and points the user at `mise dot history --pending` to list available identifiers.
Solutions
- Run `mise dot history --pending` to list actual interrupted operations and their identifiers
- Copy the exact operation id/uuid from that listing into `mise dot recover <id>`
- If there are no pending operations, nothing needs recovery — the command correctly reports none
- Ensure the operation wasn't already recovered or discarded
Example fix
# before mise dot recover abc123 # typo'd uuid # after mise dot history --pending mise dot recover 3f2a... # exact uuid from listing
Defensive patterns
Strategy: validation
Validate before calling
pending=$(mise dot history --pending) echo "$pending" # pick the exact id before recovering
Try / catch
if ! mise dot recover "$OP_ID" 2>/dev/null; then mise dot history --pending fi
Prevention
- Copy identifiers directly from `mise dot history --pending` output
- Recover pending operations promptly before they are cleaned up
- Never hardcode checkpoint uuids in scripts; read them dynamically
- Check pending list before assuming an operation is still pending
When it happens
Trigger: Running `mise dot recover [operation]` when the `selected` list is empty: no interrupted operations exist at all, or the supplied id/uuid does not match any pending record (typo, operation already recovered/discarded).
Common situations: Recovering after all pending operations were already handled; stale script referencing an old checkpoint uuid; running recover on a machine with no interrupted operations; UUID typo.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- no matching interrupted operation; `mise bootstrap dotfiles…
- select one operation by its identifier before accepting…
- no dotfiles matched target filter
- is not tracked
- a glob is required
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/b383062ba1eda123.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/dotfiles/recover.rs:58
fn recover(self, tracked: &TrackedSet) -> Result<()> {
let store = Store::open()?;
let _lock = scope::recovery_lock(&store)?;
let pending = store::list_pending_in(store.state_dir())?;
if pending.is_empty() {
info!("dotfiles: no interrupted operations");
return Ok(());
}
let selected = pending
.iter()
.filter(|(_, record)| {
self.operation.as_ref().is_none_or(|selector| {
matches_operation(selector, record.id, &record.checkpoint.uuid)
})
})
.collect::<Vec<_>>();
if selected.is_empty() {
bail!("no matching interrupted operation; `mise dot history --pending` lists them");
}
for (_, record) in &selected {
miseprintln!("Interrupted operation {}", record.checkpoint.uuid);
if let Some(operation) = &record.checkpoint.operation {
let paths = operation
.journal
.iter()
.filter_map(|entry| match entry {
JournalEntry::PathChanged { path, .. } => Some(path),
_ => None,
})
.collect::<BTreeSet<_>>();
for path in paths {
miseprintln!(" {}", crate::file::display_path(path));
}
}
}
if selected.len() > 1 && (self.keep_current || self.operation.is_some()) {View on GitHub (pinned to 533346cc37)