{"record":{"id":"31679f05df8c8a9f","repo":"jdx/mise","slug":"operation-still-needs-attention-its-pending-re","errorCode":null,"errorMessage":"operation {} still needs attention; its pending record was preserved","messagePattern":"operation (.+?) still needs attention; its pending record was preserved","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/dotfiles/recover.rs","lineNumber":97,"sourceCode":"            bail!(\"select one operation by its identifier before accepting current files\");\n        }\n        if self.keep_current\n            && !self.yes\n            && !crate::ui::prompt::confirm(\n                \"Keep these live files and discard this operation's temporary recovery copies?\",\n            )?\n            .is_yes()\n        {\n            info!(\"dotfiles: recovery copies preserved\");\n            return Ok(());\n        }\n        for (_, record) in selected {\n            scope::recover_operation(&store, tracked, &record.checkpoint.uuid, self.keep_current)?;\n            if store::list_pending_in(store.state_dir())?\n                .iter()\n                .any(|(_, pending)| pending.checkpoint.uuid == record.checkpoint.uuid)\n            {\n                bail!(\n                    \"operation {} still needs attention; its pending record was preserved\",\n                    record.checkpoint.uuid\n                );\n            }\n            info!(\"dotfiles: recovered operation {}\", record.checkpoint.uuid);\n        }\n        Ok(())\n    }\n}\n\nfn matches_operation(selector: &str, id: u64, uuid: &str) -> bool {\n    selector.parse::<u64>().ok() == Some(id) || uuid.starts_with(selector)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::matches_operation;\n","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/dotfiles/recover.rs#L79-L115","documentation":"Thrown after attempting to recover an operation when the operation's pending record still exists in the pending store. scope::recover_operation did not fully consume the pending record, meaning the operation still requires user attention and the recovery attempt is reported as incomplete.","triggerScenarios":"Calling recover for an operation whose uuid still appears in store::list_pending_in(store.state_dir()) after scope::recover_operation ran — e.g. recovery was partial or the operation re-flagged itself as pending.","commonSituations":"Recover hitting a conflicting live file it cannot resolve, leaving the record pending; concurrent mise processes touching the pending store; corrupted recovery state.","solutions":["Re-run `mise bootstrap dotfiles history --pending` and inspect what still needs attention for that uuid","Resolve the underlying conflict (accept or discard the operation's files) then recover again","Run recover with --yes or --keep-current to give the resolver a definite answer","If state looks corrupt, back up the history state directory and re-run recovery"],"exampleFix":"// before\nmise bootstrap dotfiles history --recover <op-id>  # still needs attention\n// after\nmise bootstrap dotfiles history --recover <op-id> --keep-current --yes","handlingStrategy":"retry","validationCode":"# after recovery, confirm the uuid no longer appears in --pending\nmise bootstrap dotfiles history --pending | grep -q \"$OP_UUID\" && echo \"still pending\"","typeGuard":null,"tryCatchPattern":"for attempt in 1 2 3; do\n  mise bootstrap dotfiles history --recover \"$OP_ID\" --yes && break\n  sleep 1\ndone\nmise bootstrap dotfiles history --pending | grep -q \"$OP_UUID\" && exit 1","preventionTips":["Re-verify --pending after every recovery attempt","Resolve file conflicts (choose keep/discard) before recovering","Avoid running concurrent mise dotfiles commands on the same machine"],"tags":["cli","dotfiles","recovery","partial-completion"],"backgroundTag":"invalid-state-transition","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}