{"record":{"id":"cb248c0ea2a49c64","repo":"jdx/mise","slug":"no-history-checkpoint-matches-spec","errorCode":null,"errorMessage":"no history checkpoint matches {spec:?}","messagePattern":"no history checkpoint matches (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/store.rs","lineNumber":926,"sourceCode":"        })?;\n        return entries\n            .iter()\n            .find(|entry| entry.id == id)\n            .map(|entry| entry.id)\n            .ok_or_else(|| eyre!(\"no history checkpoint matches {spec:?}\"));\n    } else {\n        spec\n    };\n    if prefix.is_empty() {\n        bail!(\"invalid checkpoint reference {spec:?}\");\n    }\n    let matches: Vec<&Entry> = entries\n        .iter()\n        .filter(|entry| entry.checkpoint.uuid.starts_with(prefix))\n        .collect();\n    match matches.as_slice() {\n        [one] => Ok(one.id),\n        [] => bail!(\"no history checkpoint matches {spec:?}\"),\n        _ => bail!(\"{spec:?} matches more than one checkpoint; use a longer prefix\"),\n    }\n}\n\npub(crate) fn now_rfc3339() -> String {\n    chrono::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Millis, true)\n}\n\npub(crate) fn new_uuid() -> String {\n    uuid::Uuid::now_v7().to_string()\n}\n\npub(crate) fn write_json<T: Serialize>(path: &Path, value: &T) -> Result<()> {\n    let mut text = serde_json::to_string_pretty(value)?;\n    text.push('\\n');\n    if let Some(parent) = path.parent() {\n        file::create_dir_all(parent)?;\n    }","sourceCodeStart":908,"sourceCodeEnd":944,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/history/store.rs#L908-L944","documentation":"Checkpoint references are matched by UUID prefix against the stored history entries. If no entry's checkpoint UUID starts with the given prefix, the reference names nothing in the current history and this error is thrown, echoing the spec so the user can see what was searched. The history may have been rewritten, or the prefix may be a typo.","triggerScenarios":"Calling the checkpoint-resolution API with a UUID prefix that matches zero entries — stale ID from a previous history, typo, or a full ID from a checkpoint that no longer exists after a history reset.","commonSituations":"Restoring a checkpoint recorded before a `mise dot` history reset or machine migration; mis-typing a UUID character; referencing a checkpoint from a different project's store.","solutions":["Run `mise dot log` to list current checkpoints and verify the prefix exists.","Copy the checkpoint ID fresh from the log output instead of from notes/history.","If the history was reset, re-create the state you want and make a new checkpoint.","Check you're operating in the correct project/store directory."],"exampleFix":"// before\nlet id = resolve_checkpoint(\"a1b2\")?; // no match\n// after: resolve from live listing\nlet spec = list_checkpoints()?.first().checkpoint.uuid[..6].to_string();\nlet id = resolve_checkpoint(&spec)?;","handlingStrategy":"validation","validationCode":"let known: Vec<String> = list_checkpoints()?.iter().map(|c| c.checkpoint.uuid.clone()).collect();\nif !known.iter().any(|u| u.starts_with(prefix)) {\n    eprintln!(\"prefix {prefix:?} matches nothing; see `mise dot log`\");\n}","typeGuard":null,"tryCatchPattern":"match resolve_checkpoint(spec) {\n    Ok(id) => use(id),\n    Err(e) if e.to_string().contains(\"no history checkpoint matches\") => {\n        eprintln!(\"unknown checkpoint; list current ones with `mise dot log`\");\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Re-copy checkpoint IDs from `mise dot log` after any history reset","Double-check UUID characters when typing prefixes","Confirm you're in the correct project/store before referencing checkpoints"],"tags":["cli","checkpoint","not-found","dotfiles"],"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"}