{"record":{"id":"98e3146706efe5eb","repo":"jdx/mise","slug":"unsupported-qualifier-supported-gnu-glibc","errorCode":null,"errorMessage":"Unsupported qualifier '{}'. Supported: gnu, glibc, musl, msvc, baseline, musl-baseline","messagePattern":"Unsupported qualifier '(.+?)'\\. Supported: gnu, glibc, musl, msvc, baseline, musl-baseline","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/platform.rs","lineNumber":98,"sourceCode":"                \"Unsupported OS '{}'. Supported: linux, macos, windows, android\",\n                self.os\n            ),\n        }\n\n        // Validate architecture\n        match self.arch.as_str() {\n            \"x64\" | \"arm64\" | \"x86\" | \"loongarch64\" | \"riscv64\" => {}\n            _ => bail!(\n                \"Unsupported architecture '{}'. Supported: x64, arm64, x86, loongarch64, riscv64\",\n                self.arch\n            ),\n        }\n\n        // Validate qualifier if present\n        if let Some(qualifier) = &self.qualifier {\n            match qualifier.as_str() {\n                \"gnu\" | \"glibc\" | \"musl\" | \"msvc\" | \"baseline\" | \"musl-baseline\" => {}\n                _ => bail!(\n                    \"Unsupported qualifier '{}'. Supported: gnu, glibc, musl, msvc, baseline, musl-baseline\",\n                    qualifier\n                ),\n            }\n        }\n\n        Ok(())\n    }\n\n    /// Convert to platform key format used in lockfiles\n    pub(crate) fn to_key(&self) -> String {\n        match &self.qualifier {\n            Some(qualifier) => format!(\"{}-{}-{}\", self.os, self.arch, qualifier),\n            None => format!(\"{}-{}\", self.os, self.arch),\n        }\n    }\n\n    /// Parse multiple platform strings, validating each one","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/platform.rs#L80-L116","documentation":"mise validates platform qualifiers (libc/environment strings) used in platform targets like `x86_64-linux-musl`. This bail fires when a qualifier string is not one of the six allowed values, preventing ambiguous or typo'd platform specs from silently resolving to the wrong artifacts.","triggerScenarios":"Calling mise with a platform target string containing a qualifier outside {gnu, glibc, musl, msvc, baseline, musl-baseline}, e.g. `mise use <tool>@<version>-linux-android` or a malformed platform spec in config.","commonSituations":"Typos in .tool-versions or mise.toml platform keys; copying qualifiers from other ecosystems (e.g. 'gnuabi64', 'gnueabi', 'android', 'mingw'); hand-writing platform-pinned tool versions for cross-compilation.","solutions":["Change the qualifier to one of the supported values: gnu, glibc, musl, msvc, baseline, or musl-baseline","Fix typos in the platform string (e.g. 'musi' -> 'musl')","If you need a libc/ABI not listed, remove the qualifier and pin a platform-independent version instead"],"exampleFix":"// before\n[tools]\n\"node:20.5.0\" = { platform = \"x86_64-linux-androideabi\" }\n// after\n[tools]\n\"node:20.5.0\" = { platform = \"x86_64-linux-musl\" }","handlingStrategy":"validation","validationCode":"const QUALIFIERS = [\"gnu\",\"glibc\",\"musl\",\"msvc\",\"baseline\",\"musl-baseline\"];\nfunction qualifierOk(platform: string): boolean {\n  const parts = platform.split(\"-\");\n  return parts.length < 3 || QUALIFIERS.includes(parts.slice(2).join(\"-\"));\n}","typeGuard":"function isSupportedQualifier(q: string): q is \"gnu\"|\"glibc\"|\"musl\"|\"msvc\"|\"baseline\"|\"musl-baseline\" {\n  return [\"gnu\",\"glibc\",\"musl\",\"msvc\",\"baseline\",\"musl-baseline\"].includes(q as any);\n}","tryCatchPattern":"null","preventionTips":["Copy platform strings from mise docs rather than other ecosystems","Validate platform specs with `mise ls-remote --platform` or a dry run before committing configs","Lint mise.toml/.tool-versions files in CI for known qualifier values"],"tags":["platform","validation","configuration"],"backgroundTag":"invalid-enum-value","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}