{"record":{"id":"5f4d50c2aa3cda35","repo":"jdx/mise","slug":"no-matching-interrupted-operation-mise-bootstrap","errorCode":null,"errorMessage":"no matching interrupted operation; `mise bootstrap dotfiles history --pending` lists them","messagePattern":"no matching interrupted operation; `mise bootstrap dotfiles history --pending` lists them","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/dotfiles/recover.rs","lineNumber":58,"sourceCode":"\n    fn recover(self, tracked: &TrackedSet) -> Result<()> {\n        let store = Store::open()?;\n        let _lock = scope::recovery_lock(&store)?;\n        let pending = store::list_pending_in(store.state_dir())?;\n        if pending.is_empty() {\n            info!(\"dotfiles: no interrupted operations\");\n            return Ok(());\n        }\n        let selected = pending\n            .iter()\n            .filter(|(_, record)| {\n                self.operation.as_ref().is_none_or(|selector| {\n                    matches_operation(selector, record.id, &record.checkpoint.uuid)\n                })\n            })\n            .collect::<Vec<_>>();\n        if selected.is_empty() {\n            bail!(\n                \"no matching interrupted operation; `mise bootstrap dotfiles history --pending` lists them\"\n            );\n        }\n        for (_, record) in &selected {\n            miseprintln!(\"Interrupted operation {}\", record.checkpoint.uuid);\n            if let Some(operation) = &record.checkpoint.operation {\n                let paths = operation\n                    .journal\n                    .iter()\n                    .filter_map(|entry| match entry {\n                        JournalEntry::PathChanged { path, .. } => Some(path),\n                        _ => None,\n                    })\n                    .collect::<BTreeSet<_>>();\n                for path in paths {\n                    miseprintln!(\"  {}\", crate::file::display_path(path));\n                }\n            }","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/dotfiles/recover.rs#L40-L76","documentation":"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.","triggerScenarios":"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.","commonSituations":"Typo in the operation identifier or checkpoint uuid; the operation was already recovered or cleaned up; running recover before any interrupted operation exists.","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"],"exampleFix":"// before\nmise bootstrap dotfiles history --recover op-1234  # wrong id\n// after\nmise bootstrap dotfiles history --pending\nmise bootstrap dotfiles history --recover <id-from-pending>","handlingStrategy":"validation","validationCode":"# only recover when a pending record exists; capture the id from --pending\nPENDING=$(mise bootstrap dotfiles history --pending)\n[ -n \"$PENDING\" ] && mise bootstrap dotfiles history --recover \"$PENDING_ID\"","typeGuard":null,"tryCatchPattern":"if ! mise bootstrap dotfiles history --recover \"$OP_ID\" 2>&1 | grep -q 'no matching'; then\n  echo \"recovered $OP_ID\"\nfi","preventionTips":["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"],"tags":["cli","dotfiles","recovery","not-found"],"backgroundTag":"record-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}