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

  1. Run `mise dotfiles ls` (or inspect the tracked set) to confirm the exact path or an ancestor directory is tracked
  2. Track the path first with `mise dotfiles track <path>` if it should be managed, then untrack it
  3. 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

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


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)