{"record":{"id":"f8a25d61092de8bb","repo":"jdx/mise","slug":"manager-is-excluded-by-the-system-packages-ma-f8a25d","errorCode":null,"errorMessage":"manager '{}' is excluded by the system_packages.managers setting","messagePattern":"manager '(.+?)' is excluded by the system_packages\\.managers setting","errorType":"validation","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/cli/system/prune.rs","lineNumber":44,"sourceCode":"\n    /// Print what would be removed without deleting anything\n    #[clap(long, short = 'n')]\n    dry_run: bool,\n\n    /// Skip the confirmation prompt\n    #[clap(long, short)]\n    yes: bool,\n}\n\nimpl SystemPrune {\n    pub async fn run(self) -> Result<()> {\n        if Settings::get()\n            .system_packages\n            .managers\n            .as_ref()\n            .is_some_and(|enabled| !enabled.contains(&self.manager))\n        {\n            bail!(\n                \"manager '{}' is excluded by the system_packages.managers setting\",\n                self.manager\n            );\n        }\n        match self.manager.as_str() {\n            \"brew\" => self.run_brew().await,\n            \"brew-cask\" => self.run_brew_cask().await,\n            _ => unreachable!(),\n        }\n    }\n\n    #[cfg(unix)]\n    async fn run_brew(self) -> Result<()> {\n        debug_assert_eq!(self.manager, \"brew\");\n        let manager = brew::BrewManager::new();\n        if !manager.is_available() {\n            bail!(\"brew is not available: {}\", manager.unavailable_reason());\n        }","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/system/prune.rs#L26-L62","documentation":"Thrown by `mise bootstrap packages prune --manager <m>` when the requested package manager is not in the user's `system_packages.managers` setting. That setting acts as an allowlist: once it is set, only managers listed there may be bootstrapped or pruned. The guard in SystemPrune::run (src/cli/system/prune.rs:44) fires before any plan is computed or package touched.","triggerScenarios":"Running `mise bootstrap packages prune --manager brew` (or `--manager brew-cask`) while settings contain e.g. `system_packages.managers = [\"apt\"]` — any defined list that does not include the requested manager name.","commonSituations":"Copying a mise.toml from a Linux machine (apt-only allowlist) to a macOS machine and running brew prune; removing brew from the allowlist earlier and forgetting; typo'd manager name inside the managers array.","solutions":["Add the manager to the allowlist: `mise settings set system_packages.managers '[brew, brew-cask]'` (or edit mise.toml) and keep any managers already present","Alternatively prune a manager that is already in the list, e.g. `mise bootstrap packages prune --manager <listed-manager>`","Or remove the `system_packages.managers` setting entirely so no allowlist filtering happens","Verify the effective value first with `mise settings get system_packages.managers`"],"exampleFix":"# before\nsystem_packages.managers = [\"apt\"]\n$ mise bootstrap packages prune --manager brew\n# error: manager 'brew' is excluded by the system_packages.managers setting\n\n# after\nsystem_packages.managers = [\"apt\", \"brew\"]\n$ mise bootstrap packages prune --manager brew","handlingStrategy":"validation","validationCode":"# before pruning, confirm the manager passes the allowlist\nmgr=\"brew\"\nallowed=\"$(mise settings get system_packages.managers 2>/dev/null)\"\nif [ -n \"$allowed\" ] && ! printf '%s' \"$allowed\" | grep -qw \"$mgr\"; then\n  echo \"skip: $mgr excluded by system_packages.managers\" >&2\n  exit 0\nfi\nmise bootstrap packages prune --manager \"$mgr\"","typeGuard":null,"tryCatchPattern":"mise bootstrap packages prune --manager \"$mgr\" || case $? in *) echo \"prune failed for $mgr — check system_packages.managers allowlist\" >&2; exit 1;; esac","preventionTips":["Keep one canonical system_packages.managers per OS (mise.macos.toml / mise.linux.toml) instead of a shared list","Document the allowlist next to bootstrap scripts so operators know prune targets must be members","Assert the setting contains every manager your scripts prune, in a config-lint step"],"tags":["mise","system-packages","prune","settings","allowlist","brew"],"backgroundTag":"config-allowlist-exclusion","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}