{"record":{"id":"2954f56c22da0c01","repo":"jdx/mise","slug":"checkpoint-has-no-content-snapshot","errorCode":null,"errorMessage":"checkpoint {} has no content snapshot","messagePattern":"checkpoint (.+?) has no content snapshot","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/dotfiles/history/show.rs","lineNumber":145,"sourceCode":"        }\n        for omitted in &coverage.omitted {\n            miseprintln!(\"  omitted: {} ({})\", omitted.path, omitted.reason);\n        }\n        for incomplete in &coverage.incomplete {\n            miseprintln!(\"  incomplete: {} ({})\", incomplete.path, incomplete.reason);\n        }\n        if let Some(operation) = &c.operation\n            && !operation.journal.is_empty()\n        {\n            miseprintln!(\"\");\n            miseprintln!(\"Journal:\");\n            for line in journal::render(&operation.journal) {\n                miseprintln!(\"  - {line}\");\n            }\n        }\n        if self.files {\n            let Some(tree) = &c.tree.snapshot else {\n                bail!(\"checkpoint {} has no content snapshot\", entry.id);\n            };\n            let Some(repo) = store.repo() else {\n                bail!(\"listing snapshot files requires git\");\n            };\n            miseprintln!(\"\");\n            miseprintln!(\"Files:\");\n            for file in repo.ls_tree(tree)? {\n                let size = file.size.map(|size| size.to_string()).unwrap_or_default();\n                miseprintln!(\n                    \"  {} {:>8} {}\",\n                    file.mode,\n                    size,\n                    crate::system::history::tracked::tree_path_to_display(&file.path)\n                );\n            }\n        }\n        Ok(())\n    }","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/dotfiles/history/show.rs#L127-L163","documentation":"`mise bootstrap dotfiles history show <checkpoint> --files` lists the file contents captured in a checkpoint's git tree. Content snapshots are optional — some checkpoints only record metadata (a journal) without a full tree. When `--files` is requested for a checkpoint whose tree has no snapshot, mise throws \"checkpoint <id> has no content snapshot\".","triggerScenarios":"Running `mise bootstrap dotfiles history show <id> --files` where the selected checkpoint's `c.tree.snapshot` is None — the checkpoint stored only metadata, not file contents.","commonSituations":"History was recorded while snapshotting was disabled or the file was untracked; very old checkpoints created before snapshot capture existed; checkpoint entries created by operations that intentionally skip snapshots.","solutions":["Drop `--files` and inspect the checkpoint's journal instead (the metadata still shows what changed).","Pick a different checkpoint that includes a content snapshot (check with `history ls` / show without --files).","Enable content snapshotting in history settings so future checkpoints include trees, then create a new checkpoint."],"exampleFix":"// before\nmise bootstrap dotfiles history show abc123 --files  # no content snapshot\n// after\nmise bootstrap dotfiles history show abc123           # journal only\nmise bootstrap dotfiles history show def456 --files   # checkpoint with snapshot","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"# try --files, fall back to journal-only view\nif ! mise bootstrap dotfiles history show \"$id\" --files 2>/dev/null; then\n  mise bootstrap dotfiles history show \"$id\"\nfi","preventionTips":["Keep history content snapshots enabled so checkpoints include trees.","Don't rely on `--files` for old or metadata-only checkpoints."],"tags":["dotfiles","history","missing-data"],"backgroundTag":"empty-required-field","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"}