jdx/mise · error
is not tracked
Error message
{target_raw} is not tracked What it means
`mise dotfiles untrack` throws this when the given target path has no entry in the tracked-dotfiles set. Untracking a directory child requires an owning tracked entry; if neither the path itself nor any tracked parent directory covers it, mise refuses because there is nothing to untrack.
Solutions
- Run `mise dotfiles ls` (or inspect the tracked set) to confirm the exact path or an ancestor directory is tracked
- Track the path first with `mise dotfiles track <path>` if it should be managed, then untrack it
- Check for path typos or symlink/relative-vs-absolute path mismatches between what you typed and what was tracked
Example fix
// before mise dotfiles untrack ~/.vimrc // never tracked // after mise dotfiles track ~/.vimrc && mise dotfiles untrack ~/.vimrc // or untrack the tracked parent instead: mise dotfiles untrack ~/.config
Defensive patterns
Strategy: validation
Validate before calling
mise dotfiles ls | grep -x "$HOME/.vimrc" || echo 'not tracked'
Prevention
- List tracked paths before untracking
- Track paths consistently via a single parent directory to simplify untracking
When it happens
Trigger: Running `mise dotfiles untrack <path>` where <path> was never enrolled via `mise dotfiles track`, and no explicitly tracked directory contains it as a child (tracked.entry_for(&path) returns None in the None arm of the match).
Common situations: Typos in the path, untracking a file that was only managed by Git without a parent tracked directory, or trying to untrack something already removed from tracking in an earlier run.
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
- no dotfiles matched target filter
- no matching interrupted operation; `mise bootstrap dotfiles…
- no matching interrupted operation; `mise dot history…
- a glob is required
- `--all` needs `--to
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/e453ffc53a00c0b1.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/dotfiles/untrack.rs:80
"dotfiles: {key} is declared in {}; switched off in {}",
display_path(declared_in),
display_path(&local)
);
touched.push(local.clone());
} else {
let mut doc = super::track::read_document(declared_in)?;
if let Some(table) = doc["dotfiles"].as_table_mut() {
table.remove(&req.target_raw);
}
file::write(declared_in, doc.to_string())?;
info!("dotfiles: {key} removed from {}", display_path(declared_in));
touched.push(declared_in.clone());
}
}
None => {
// A child of an explicitly tracked directory: exclude it.
let Some(owner) = tracked.entry_for(&path) else {
bail!("{target_raw} is not tracked");
};
if owner.path == path {
// Keep explicit intent visible to an enclosing capture
// too, even when enrollment came only from Git.
let mut doc = super::track::read_document(&local)?;
let mut table = toml_edit::InlineTable::new();
table.insert("mode", Value::from("track"));
table.insert("enabled", Value::from(false));
doc["dotfiles"][&key] = Item::Value(Value::InlineTable(table));
if let Some(parent) = local.parent() {
file::create_dir_all(parent)?;
}
file::write(&local, doc.to_string())?;
touched.push(local.clone());
continue;
}
let glob = if path.is_dir() {
format!("{key}/**")View on GitHub (pinned to 533346cc37)