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
- Run `mise bootstrap dotfiles paths` to list tracked paths and correct the argument
- Track the file first (`mise bootstrap dotfiles add <path>` or equivalent) before rolling it back
- 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
- List tracked paths (`dotfiles paths`) before scripting rollbacks
- Normalize paths (~ expansion, absolute) exactly as mise does
- Track new files before attempting to restore them
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
- {target_raw} is not tracked
- {raw}: target must be absolute or start with ~/
- {target_raw}: target must be absolute or start with ~/
- {target_raw}: target must be absolute or start with ~/
- remote task path is not a regular file or directory: {}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/24f43bc02731f8ad.
Report an issue: GitHub.