{"record":{"id":"d28d3916cdb267c6","repo":"jdx/mise","slug":"packslip-host-requirements-not-met-failures-se","errorCode":null,"errorMessage":"packslip host requirements not met: {failures}; set ignore_requirements=true for this tool to override","messagePattern":"packslip host requirements not met: (.+?); set ignore_requirements=true for this tool to override","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/packslip_requirements.rs","lineNumber":31,"sourceCode":"pub(crate) struct Report {\n    pub(crate) failures: Vec<String>,\n    pub(crate) warnings: Vec<String>,\n}\n\nimpl Report {\n    pub(crate) fn enforce(&self, ignore: bool) -> Result<()> {\n        for warning in &self.warnings {\n            warn!(\"packslip requirement: {warning}\");\n        }\n        if self.failures.is_empty() {\n            return Ok(());\n        }\n        let failures = self.failures.join(\"; \");\n        if ignore {\n            warn!(\"overriding packslip host requirements: {failures}\");\n            Ok(())\n        } else {\n            bail!(\n                \"packslip host requirements not met: {failures}; set ignore_requirements=true for this tool to override\"\n            )\n        }\n    }\n}\n\n/// Compare arbitrarily large numeric components without overflow or semver.\nfn numeric_cmp(actual: &str, min: &str) -> Option<Ordering> {\n    fn parts(s: &str) -> Option<Vec<&str>> {\n        s.split('.')\n            .map(|p| {\n                if p.is_empty() || !p.bytes().all(|c| c.is_ascii_digit()) {\n                    return None;\n                }\n                let p = p.trim_start_matches('0');\n                Some(if p.is_empty() { \"0\" } else { p })\n            })\n            .collect()","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/packslip_requirements.rs#L13-L49","documentation":"packslip-verified tools can declare host requirements (e.g. minimum OS/CPU features). Before trusting the signed list, mise checks the host against these requirements and throws if any fail, unless the tool's ignore_requirements flag is set.","triggerScenarios":"Installing a packslip tool whose signed release list declares requirements that the current host fails, and the tool's configuration does not set ignore_requirements=true.","commonSituations":"Running on older hardware lacking required CPU features; using an OS variant not covered by the tool's requirements; running inside a slim container/VM missing required kernel features.","solutions":["Upgrade the host OS or hardware to meet the stated requirements","Set ignore_requirements=true for this tool in its tool configuration to override","Run on a different machine that satisfies the requirements"],"exampleFix":"// before\n[tools]\naqua:org/tool = { version = \"1.2\", }\n// after\n[tools]\naqua:org/tool = { version = \"1.2\", ignore_requirements = true }","handlingStrategy":"validation","validationCode":"let reqs = tool_requirements(aqua_tool)?;\nlet failures = reqs.iter().filter(|r| !host_satisfies(r)).collect::<Vec<_>>();\nif !failures.is_empty() {\n    eprintln!(\"host fails: {failures:?}; set ignore_requirements=true or upgrade host\");\n}","typeGuard":null,"tryCatchPattern":"match result {\n    Err(e) if e.to_string().starts_with(\"packslip host requirements not met\") => {\n        eprintln!(\"run on a compliant host or set ignore_requirements=true\");\n    }\n    other => other?,\n}","preventionTips":["Review a tool's declared requirements before adopting it","Test installs on your oldest supported machine image","Only set ignore_requirements=true when you understand the risk","Keep CI/host images on supported OS versions"],"tags":["packslip","requirements","host","platform"],"backgroundTag":"unsupported-platform","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"}