jdx/mise · error

{} is not captured; {reason}

Error message

{} is not captured; {reason}

What it means

`mise bootstrap dotfiles save` refuses to save a path that is not part of the dotfiles capture set. The tracked-set lookup found no entry for the path, so mise tells you either that the path is excluded/missing/omitted from capture, or that it has never been tracked at all. This guards the checkpoint store from capturing files the user never enrolled.

Source

Thrown at src/cli/dotfiles/save.rs:99

                if !captured {
                    // saving a deleted manual-save path saves the deletion,
                    // provided the path was captured before (a path that
                    // never existed is not a deletion)
                    let deletion = tracked
                        .entry_for(&path)
                        .is_some_and(|entry| !entry.policy.autosave)
                        && std::fs::symlink_metadata(&path)
                            .is_err_and(|err| err.kind() == std::io::ErrorKind::NotFound)
                        && previously_captured(&store, &entries, &path)?;
                    if deletion {
                        continue;
                    }
                    let reason = if tracked.entry_for(&path).is_some() {
                        "it is excluded, missing, or omitted from capture"
                    } else {
                        "track it with `mise bootstrap dotfiles track`"
                    };
                    bail!("{} is not captured; {reason}", display_path(&path));
                }
            }
        }
        let mut draft = Draft::new(trigger);
        draft.explicit_paths = self
            .paths
            .iter()
            .map(|path| normalize_target(path))
            .collect();
        draft.description = self.description.clone();
        draft.description_source = Some(if trigger == Trigger::Agent {
            DescriptionSource::Agent
        } else {
            DescriptionSource::User
        });
        draft.task = self.task.clone();
        draft.labels = self.label.clone();
        tokio::task::spawn_blocking(move || self.save_checkpoint(&store, &tracked, draft)).await?

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Track the path first with `mise bootstrap dotfiles track <path>`, then save
  2. Check `mise bootstrap dotfiles status` to see which files are captured
  3. Verify the path spelling matches the tracked entry exactly

Example fix

// before
mise bootstrap dotfiles save ~/.zshrc   // fails if untracked
// after
mise bootstrap dotfiles track ~/.zshrc
mise bootstrap dotfiles save ~/.zshrc
Defensive patterns

Strategy: validation

Validate before calling

mise bootstrap dotfiles status --target "$path" || mise bootstrap dotfiles track "$path"

Prevention

When it happens

Trigger: Running `mise bootstrap dotfiles save <path>` (or with explicit paths) where the path has no entry in the TrackedSet: it was never added via `dotfiles track`, it was excluded by capture filters, or the file is missing on disk.

Common situations: User edits a new dotfile (e.g. ~/.config/newtool/config) and tries to save it without tracking first; a path was removed from the tracked set; a typo in the path means no entry matches.

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/211cd2933aa4a597. Report an issue: GitHub.