jdx/mise · error

is not tracked; `mise dot paths` lists what is

Error message

{} is not tracked; `mise dot paths` lists what is

What it means

Rollback only works on paths that dotfiles history tracks. Each requested path is normalized and looked up in the tracked-path registry; if it isn't there, the command aborts rather than silently ignoring it.

Solutions

  1. Run `mise dot paths` to list tracked paths and use an exact entry from that list
  2. Add the path to dot tracking first (`mise dot track`/equivalent) before rolling it back
  3. Check spelling and use the same path form (absolute, no symlink indirection) as shown by `mise dot paths`

Example fix

// before
mise dot rollback ~/.zshrc
// after
mise dot paths        # confirms ~/.config/zsh/.zshrc is the tracked path
mise dot rollback ~/.config/zsh/.zshrc
Defensive patterns

Strategy: validation

Validate before calling

const tracked = await mise.dot.paths();
for (const p of req.paths) {
  if (!tracked.includes(p)) throw new Error(`${p} is not tracked`);
}

Prevention

When it happens

Trigger: `mise dot rollback <path>` where `<path>` was never added to dot tracking (or is spelled/normalized differently than the tracked entry), detected via `tracked.entry_for(path) == None`.

Common situations: Typos or non-normalized paths (relative vs absolute, symlinks, trailing slashes) in the rollback command; rolling back a dotfile after removing it from tracking; running rollback in a fresh checkout where the path was never tracked.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/1bb77f56ee2ceacf. Report an issue: GitHub.

Appendix: source

Thrown at src/system/history/replay.rs:134

            "name the paths to roll back, or `--to <ref> --all` for everything the checkpoint covers"
        );
    }
    if req.to.is_none() && req.all {
        bail!("`--all` needs `--to <ref>`");
    }
    let (store, tracked, entries) = crate::cli::dotfiles::history::open().await?;
    let repo = store
        .repo()
        .ok_or_else(|| eyre::eyre!("rolling back requires git"))?;
    let live = live_tree(repo, &tracked)?;
    let paths: Vec<PathBuf> = req
        .paths
        .iter()
        .map(|path| normalize_target(path))
        .collect();
    for path in &paths {
        if tracked.entry_for(path).is_none() {
            bail!(
                "{} is not tracked; `mise dot paths` lists what is",
                display_path(path)
            );
        }
    }
    let targets = match &req.to {
        Some(reference) => {
            let entry = crate::cli::dotfiles::history::resolve(
                reference,
                &entries,
                (paths.len() == 1)
                    .then(|| display_path(&paths[0]))
                    .as_deref(),
            )?;
            refuse_unusable(&entry)?;
            let paths = if req.all {
                covered_paths(&entry.checkpoint)
            } else {

View on GitHub (pinned to 533346cc37)