jdx/mise · error

checkpoint {} has no content snapshot

Error message

checkpoint {} has no content snapshot

What it means

`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".

Source

Thrown at src/cli/dotfiles/history/show.rs:145

        }
        for omitted in &coverage.omitted {
            miseprintln!("  omitted: {} ({})", omitted.path, omitted.reason);
        }
        for incomplete in &coverage.incomplete {
            miseprintln!("  incomplete: {} ({})", incomplete.path, incomplete.reason);
        }
        if let Some(operation) = &c.operation
            && !operation.journal.is_empty()
        {
            miseprintln!("");
            miseprintln!("Journal:");
            for line in journal::render(&operation.journal) {
                miseprintln!("  - {line}");
            }
        }
        if self.files {
            let Some(tree) = &c.tree.snapshot else {
                bail!("checkpoint {} has no content snapshot", entry.id);
            };
            let Some(repo) = store.repo() else {
                bail!("listing snapshot files requires git");
            };
            miseprintln!("");
            miseprintln!("Files:");
            for file in repo.ls_tree(tree)? {
                let size = file.size.map(|size| size.to_string()).unwrap_or_default();
                miseprintln!(
                    "  {} {:>8} {}",
                    file.mode,
                    size,
                    crate::system::history::tracked::tree_path_to_display(&file.path)
                );
            }
        }
        Ok(())
    }

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Drop `--files` and inspect the checkpoint's journal instead (the metadata still shows what changed).
  2. Pick a different checkpoint that includes a content snapshot (check with `history ls` / show without --files).
  3. Enable content snapshotting in history settings so future checkpoints include trees, then create a new checkpoint.

Example fix

// before
mise bootstrap dotfiles history show abc123 --files  # no content snapshot
// after
mise bootstrap dotfiles history show abc123           # journal only
mise bootstrap dotfiles history show def456 --files   # checkpoint with snapshot
Defensive patterns

Strategy: fallback

Try / catch

# try --files, fall back to journal-only view
if ! mise bootstrap dotfiles history show "$id" --files 2>/dev/null; then
  mise bootstrap dotfiles history show "$id"
fi

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/2954f56c22da0c01. Report an issue: GitHub.