{"record":{"id":"7098c8bff25198c6","repo":"jdx/mise","slug":"no-dotfiles-matched-target-filter-7098c8","errorCode":null,"errorMessage":"no dotfiles matched target filter: {}","messagePattern":"no dotfiles matched target filter: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/dotfiles/status.rs","lineNumber":96,"sourceCode":"                    },\n                    req.origin.config.display_user(),\n                    state_str,\n                ]);\n            }\n        }\n\n        let all_edits = system::edits::edits_from_config(&config)?;\n        let edits = all_edits\n            .iter()\n            .filter(|req| system::edits::matches_target(req, &self.targets))\n            .cloned()\n            .collect::<Vec<_>>();\n        if files.is_empty()\n            && edits.is_empty()\n            && !self.targets.is_empty()\n            && (!all_files.is_empty() || !all_edits.is_empty())\n        {\n            eyre::bail!(\n                \"no dotfiles matched target filter: {}\",\n                self.targets.join(\", \")\n            );\n        }\n        let mut edit_rows: Vec<Vec<String>> = vec![];\n        let mut json_edits = vec![];\n        for req in &edits {\n            let state = match system::edits::check(&config, req) {\n                Ok(state) => state,\n                Err(err) => FileState::Differs(format!(\"{err}\")),\n            };\n            let state_str = match &state {\n                FileState::Applied => \"applied\".to_string(),\n                FileState::Missing => \"missing\".to_string(),\n                FileState::SourceMissing => \"source missing\".to_string(),\n                FileState::Differs(reason) => format!(\"differs ({reason})\"),\n            };\n            any_missing |= state != FileState::Applied;","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/cli/dotfiles/status.rs#L78-L114","documentation":"Thrown by `mise bootstrap dotfiles status [TARGET]...` when target filters were given, nothing matched, and the config does define at least one dotfile file or edit. It distinguishes 'your filter matched nothing' (hard error) from 'no dotfiles configured' (info message), so a typo in a script cannot silently report an empty, all-good status.","triggerScenarios":"Calling `mise bootstrap dotfiles status zshrc` or with a glob filter where both `files` and `edits` are empty after filtering while `all_files`/`all_edits` are non-empty. Happens with typos, wrong shell expansion (quoted `~` or globs that never expand), or a target defined in a config file that is not loaded in this directory.","commonSituations":"CI scripts that check one dotfile's state by name and the name drifts; running inside a subdirectory where the mise.toml defining the entry is not trusted or loaded; passing `'~/.zshrc'` in single quotes so the shell never expands `~` and the literal string matches nothing.","solutions":["Run `mise bootstrap dotfiles status` with no filters to list the exact target names, then re-run with the correct one","Check shell quoting: leave `~` and globs unquoted, or pass the literal path exactly as the config declares it","If the entry lives in a project config, run from that directory (or `mise trust` it) so the config is actually loaded","If no dotfiles should be configured, drop the filters — that path prints an info line instead of failing"],"exampleFix":"# before\n$ mise bootstrap dotfiles status '~/.zshrc'   # quoted ~ never expands\nerror: no dotfiles matched target filter: ~/.zshrc\n\n# after\n$ mise bootstrap dotfiles status ~/.zshrc","handlingStrategy":"validation","validationCode":"# Verify a target is configured before filtering\nmise bootstrap dotfiles status | grep -qF \"$TARGET\" || { echo \"unknown target: $TARGET\" >&2; exit 2; }\nmise bootstrap dotfiles status \"$TARGET\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Quote filters so ~ and globs still match the config spelling","Run unfiltered `status` once when onboarding a script to confirm target names","Treat non-zero exits from filtered status as a script bug, not an empty state"],"tags":["mise","dotfiles","filter","no-match"],"backgroundTag":"filter-no-match","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T20:17:18.057Z"}