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
- Run `mise dot paths` to list tracked paths and use an exact entry from that list
- Add the path to dot tracking first (`mise dot track`/equivalent) before rolling it back
- 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
- Copy paths verbatim from `mise dot paths`
- Keep tracked paths absolute and symlink-free in scripts
- Track new dotfiles before expecting rollback to cover them
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
- : target must be absolute or start with ~/
- `--all` needs `--to
- at least one target or --changed is required
- bootstrap_command returned an unsafe mise path
- brew-cask: command_wrapper requires a command name without…
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)