{"record":{"id":"285d8d3f99d8214c","repo":"jdx/mise","slug":"deps-provider-depends-on-unknown-provider","errorCode":null,"errorMessage":"deps provider '{}' depends on unknown provider '{}'","messagePattern":"deps provider '(.+?)' depends on unknown provider '(.+?)'","errorType":"validation","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/deps/deps_ordering.rs","lineNumber":23,"sourceCode":"\n/// Manages a dependency graph of deps providers for execution scheduling.\n/// Thin wrapper around `DepsGraph<String, String>` with deps-specific\n/// validation and error messages.\n#[derive(Debug)]\npub struct DepsOrdering {\n    inner: DepsGraph<String, String>,\n}\n\nimpl DepsOrdering {\n    /// Creates a new DepsOrdering from a list of (provider_id, depends) tuples.\n    pub fn new(providers: &[(String, Vec<String>)]) -> Result<Self> {\n        // Validate that all deps reference known providers before building the graph\n        let known: std::collections::HashSet<&str> =\n            providers.iter().map(|(id, _)| id.as_str()).collect();\n        for (id, deps) in providers {\n            for dep in deps {\n                if !known.contains(dep.as_str()) {\n                    bail!(\n                        \"deps provider '{}' depends on unknown provider '{}'\",\n                        id,\n                        dep\n                    );\n                }\n            }\n        }\n\n        let nodes: Vec<(String, String)> = providers\n            .iter()\n            .map(|(id, _)| (id.clone(), id.clone()))\n            .collect();\n\n        let edges: Vec<(String, String)> = providers\n            .iter()\n            .flat_map(|(id, deps)| deps.iter().map(move |dep| (id.clone(), dep.clone())))\n            .collect();\n","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/deps/deps_ordering.rs#L5-L41","documentation":"`DepsOrdering::new` (src/deps/deps_ordering.rs:7) validates the deps-provider dependency list before building the graph: every id named in a provider's `depends` must be among the provider ids passed in. An unknown reference would make topological ordering impossible, so it bails naming both the referencing and the unknown provider.","triggerScenarios":"Configuring deps providers with `depends` — e.g. `[deps.providers.<id>.depends]` listing another provider id — where the referenced id is not in the provider set being built: typo, case mismatch, or a provider whose config is not loaded/enabled in that environment.","commonSituations":"Typos in provider ids (`npx` vs `npm`); depends referencing a provider defined in a different config layer (global vs project) that is not active; renaming a provider id without updating depends entries; disabling a provider but leaving others depending on it.","solutions":["Fix the id inside `depends` to exactly match a configured provider id (case-sensitive)","If the dependency is intentional, add/enable the missing provider's config so its id is present in the set","Remove the `depends` entry if the ordering constraint is not actually needed"],"exampleFix":"# before\n[deps.providers.npm]\ndepends = ['npx']   # no provider named 'npx'\n\n# after\n[deps.providers.npm]\ndepends = ['node']  # id that actually exists","handlingStrategy":"validation","validationCode":"# lint deps providers: every depends target must be a defined provider id\nimport tomllib, sys\ncfg = tomllib.load(open(\"mise.toml\", \"rb\"))\nproviders = cfg.get(\"deps\", {}).get(\"providers\", {})\nfor pid, p in providers.items():\n    for dep in p.get(\"depends\", []):\n        if dep not in providers:\n            sys.exit(f\"{pid} depends on unknown provider {dep!r}\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Define all related providers in one config file so depends references cannot drift across layers","Rename provider ids with a project-wide search, not file-by-file edits","Add a config lint step to CI for deps provider graphs"],"tags":["mise","deps","config","dependency-ordering"],"backgroundTag":"unknown-dependency-reference","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}