{"record":{"id":"ac82d37d22745918","repo":"jdx/mise","slug":"package-manager-does-not-support-pruning","errorCode":null,"errorMessage":"package manager '{}' does not support pruning","messagePattern":"package manager '(.+?)' does not support pruning","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/system/prune.rs","lineNumber":76,"sourceCode":"            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            _ => self.run_plugin().await,\n        }\n    }\n\n    async fn run_plugin(self) -> Result<()> {\n        let discovered = system::packages::all_managers()\n            .into_iter()\n            .find(|manager| manager.name() == self.manager)\n            .ok_or_else(|| eyre::eyre!(\"unknown bootstrap package manager '{}'\", self.manager))?;\n        if !discovered.is_plugin() {\n            bail!(\n                \"package manager '{}' does not support pruning\",\n                self.manager\n            );\n        }\n        if let Some(reason) = discovered.unavailable_reason_async().await {\n            bail!(\"{} is not available: {reason}\", self.manager);\n        }\n        let manager = PackagePluginManager::new(self.manager.clone())?;\n        let config = Config::get().await?;\n        let configured = system::package_requests_for_manager_from_config_and_tracked_config_files(\n            &config,\n            &self.manager,\n        )\n        .await?;\n        let plan = manager.prune_plan(&configured).await?;\n        if plan.is_empty() {\n            if !self.dry_run {\n                manager.apply_prune_plan(&plan).await?;","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/system/prune.rs#L58-L94","documentation":"`mise system prune --manager <name>` looks up the manager among discovered managers (`system::packages::all_managers()`); if found but `is_plugin()` is false — i.e. it is a built-in manager, not a plugin — pruning is not implemented for it and mise bails. Only plugin-based package managers support prune here.","triggerScenarios":"Running `mise system prune --manager brew` (or any built-in/non-plugin manager) — built-ins lack the prune pathway the plugin manager provides via `PackagePluginManager`.","commonSituations":"Assuming prune works uniformly across managers; docs/scripts written for a plugin manager applied to brew/apt; confusion between `system packages` declarative removal and `system prune`.","solutions":["Prune only plugin-based managers (`mise system prune --manager <plugin-name>`).","For built-ins, remove packages declaratively via `mise system packages` with absent desired state, or use the manager's own CLI (e.g. `brew autoremove`).","Verify which managers are plugins via `mise system packages` output/docs."],"exampleFix":"// before\nmise system prune --manager brew\n// after (built-ins: use native CLI)\nbrew autoremove","handlingStrategy":"fallback","validationCode":"# Prune only plugin managers; check docs or discovery output first\nmise system prune --manager myplugin --dry-run 2>/dev/null || echo \"prune unsupported for this manager\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the manager's native CLI (brew autoremove, apt autoremove) for built-in managers.","Use declarative removal via system packages for built-ins instead of prune.","Don't assume prune parity across managers."],"tags":["cli","system-packages","prune","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}