jdx/mise · error
no matching interrupted operation; `mise bootstrap dotfiles
Error message
no matching interrupted operation; `mise bootstrap dotfiles history --pending` lists them
What it means
Thrown by the dotfiles history `recover` routine when no pending (interrupted) operation record matches the selector the user gave (or no pending records exist at all). The recovery command needs at least one matching interrupted operation to act on.
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 bootstrap dotfiles 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));
}
}View on GitHub (pinned to afd2eddd3a)
Solutions
- List pending operations with `mise bootstrap dotfiles history --pending` and copy the exact identifier
- Re-run recover with the exact operation id shown by --pending
- If there are genuinely no pending operations, nothing needs recovery — skip the command
Example fix
// before mise bootstrap dotfiles history --recover op-1234 # wrong id // after mise bootstrap dotfiles history --pending mise bootstrap dotfiles history --recover <id-from-pending>
Defensive patterns
Strategy: validation
Validate before calling
# only recover when a pending record exists; capture the id from --pending PENDING=$(mise bootstrap dotfiles history --pending) [ -n "$PENDING" ] && mise bootstrap dotfiles history --recover "$PENDING_ID"
Try / catch
if ! mise bootstrap dotfiles history --recover "$OP_ID" 2>&1 | grep -q 'no matching'; then echo "recovered $OP_ID" fi
Prevention
- Always list --pending first and copy identifiers exactly
- Avoid re-running recover after a successful operation
- Clean up pending records as part of post-interrupt workflows
When it happens
Trigger: Running `mise bootstrap dotfiles history --recover` (with or without an operation identifier) when store::list_pending_in returns nothing matching the selector — either no pending operations or the id/uuid is wrong.
Common situations: Typo in the operation identifier or checkpoint uuid; the operation was already recovered or cleaned up; running recover before any interrupted operation exists.
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
- select one operation by its identifier before accepting curr
- operation {} still needs attention; its pending record was p
- no history checkpoint matches {spec:?}
- {plugin_name} is not a valid plugin name
- --changed does not accept target arguments
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/5f4d50c2aa3cda35.
Report an issue: GitHub.