{"record":{"id":"3afdf20f1272223e","repo":"jdx/mise","slug":"provider-is-stale","errorCode":null,"errorMessage":"provider '{}' is stale","messagePattern":"provider '(.+?)' is stale","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/deps/install.rs","lineNumber":240,"sourceCode":"            miseprintln!(\"Command: {}\", cmd.description);\n        }\n\n        // Verdict\n        miseprintln!(\"\");\n        if let DepsProviderApplicability::Inactive(reason) = applicability {\n            miseprintln!(\"Status: inactive ({reason})\");\n            bail!(\"provider '{}' is inactive: {reason}\", provider.id());\n        }\n\n        let freshness = engine.check_provider_freshness(provider, effective_env)?;\n        if freshness.is_fresh() {\n            miseprintln!(\"Status: fresh ({})\", freshness.reason());\n        } else {\n            miseprintln!(\"Status: stale ({})\", freshness.reason());\n        }\n\n        if !freshness.is_fresh() {\n            bail!(\"provider '{}' is stale\", provider.id());\n        }\n\n        Ok(())\n    }\n\n    fn list_providers(&self, engine: &DepsEngine) -> Result<()> {\n        let providers = engine.list_providers();\n\n        if providers.is_empty() {\n            miseprintln!(\"No deps providers found for this project\");\n            return Ok(());\n        }\n\n        miseprintln!(\"Available deps providers:\");\n        for provider in providers {\n            let sources = provider\n                .sources()\n                .iter()","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/deps/install.rs#L222-L258","documentation":"After checking applicability, `explain_provider` asks the DepsEngine whether the provider's data/index is fresh via `check_provider_freshness`. When freshness reports stale (with a reason printed as 'Status: stale (...)'), the command bails with 'provider <id> is stale' rather than proceeding with an explanation/install based on outdated data.","triggerScenarios":"Running `mise deps install <provider> --explain` (or a flow through explain_provider) when the provider's cached metadata/index has not been refreshed within the freshness window.","commonSituations":"Working offline or behind a proxy that blocks the refresh, long-lived CI caches, or a provider index last updated before a new upstream release.","solutions":["Refresh the provider data (e.g. re-run the deps update/refresh flow for the provider) and retry","Check network connectivity/proxy settings if refresh fails","Run with the appropriate env set if freshness depends on the effective environment (MISE_* env vars)"],"exampleFix":"// before\nmise deps install npm --explain   # provider 'npm' is stale\n// after\nmise deps update npm && mise deps install npm --explain","handlingStrategy":"retry","validationCode":"status=$(mise deps install \"$PROVIDER\" --explain 2>&1 | grep 'Status:')\ncase \"$status\" in *stale*) mise deps update \"$PROVIDER\";; esac","typeGuard":null,"tryCatchPattern":"if output.contains(&format!(\"provider '{}' is stale\", provider)) {\n    // run the provider refresh/update step, then retry the explain/install\n}","preventionTips":["Run provider refresh/update before long-running or CI jobs","Ensure network access so freshness checks can succeed","Treat stale providers as blockers rather than forcing installs"],"tags":["cli","deps","freshness"],"backgroundTag":"invalid-state-transition","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}