jdx/mise · error

{} is not tracked; `mise bootstrap dotfiles paths` lists wha

Error message

{} is not tracked; `mise bootstrap dotfiles paths` lists what is

What it means

rollback can only restore paths that the dotfiles history store tracks. Before computing the restore plan, every normalized requested path is checked against the tracked entries; an untracked path would have no git history to restore from, so mise bails and points at `mise bootstrap dotfiles paths` to list what is tracked.

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 bootstrap dotfiles 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 afd2eddd3a)

Solutions

  1. Run `mise bootstrap dotfiles paths` to list tracked paths and correct the argument
  2. Track the file first (`mise bootstrap dotfiles add <path>` or equivalent) before rolling it back
  3. Check for typos or path normalization differences (e.g. ~ vs absolute path)

Example fix

// before
mise bootstrap dotfiles rollback ~/nonexistent-zshrc
// after
mise bootstrap dotfiles paths            # confirm tracked paths
mise bootstrap dotfiles rollback ~/.zshrc
Defensive patterns

Strategy: validation

Validate before calling

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

Type guard

const isTracked = (path: string, tracked: string[]) =>
  tracked.includes(normalizeTarget(path));

Try / catch

try {
  await rollback(req);
} catch (e) {
  const m = String(e).match(/^(\S+) is not tracked/);
  if (m) {
    console.error(`Run 'mise bootstrap dotfiles paths'; '${m[1]}' is not managed.`);
  } else throw e;
}

Prevention

When it happens

Trigger: Calling rollback with a path that was never added to dotfiles tracking (entry_for(path) is None after normalize_target), e.g. typos, non-normalized paths, or files managed outside mise.

Common situations: Typos in a path; file was removed from tracking earlier; user assumes any file in a tracked directory is tracked; dotfiles store was recreated with a different path set.

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@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/24f43bc02731f8ad. Report an issue: GitHub.