{"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/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/platform.rs#L80-L116","documentation":"Platform::validate restricts the optional qualifier — everything after the second hyphen, joined back together — to {gnu, glibc, musl, msvc, baseline, musl-baseline}. Compound qualifiers like musl-baseline are supported, so this error means the joined qualifier string is something else: a distro name, a glibc version, or a misplaced segment. Qualifiers distinguish libc/ABI variants in lockfile platform keys (Platform::libc maps gnu/glibc to gnu and musl to musl).","triggerScenarios":"`mise lock -p linux-x64-alpine`, `-p linux-x64-glibc2.17`, `-p linux-x64-musl-custom`, or ordering mistakes like `-p linux-musl-x64` (musl lands in the arch slot) and double-arch strings like linux-x64-arm64 (arm64 becomes the qualifier).","commonSituations":"Trying to encode the distro or glibc version into the platform key; permuting segment order; leftover tokens from pasted target triples.","solutions":["Use only the listed qualifiers; encode libc as musl/gnu/glibc and ABI as baseline/musl-baseline.","Drop the qualifier entirely (plain linux-x64) if the distinction does not matter — distro is not a lockfile dimension.","Fix segment order: os-arch-qualifier, e.g. linux-x64-musl, not linux-musl-x64."],"exampleFix":"# before\nmise lock -p linux-x64-alpine -p linux-musl-x64\n\n# after\nmise lock -p linux-x64-musl","handlingStrategy":"validation","validationCode":"q=\"$(cut -d- -f3- <<<\"$p\")\"\ncase \"$q\" in\n  \"\"|gnu|glibc|musl|msvc|baseline|musl-baseline) ;;\n  *) echo \"unsupported qualifier: $q\"; exit 2;;\nesac","typeGuard":"fn supported_qualifier(q: &str) -> bool {\n    matches!(q, \"gnu\" | \"glibc\" | \"musl\" | \"msvc\" | \"baseline\" | \"musl-baseline\")\n}","tryCatchPattern":null,"preventionTips":["Treat qualifiers as a closed set; check the allowlist before inventing new values.","Do not encode distro names or glibc versions in platform strings.","Keep the os-arch-qualifier segment order in mind when composing strings."],"tags":["platform","validation","qualifier","libc","musl","lockfile"],"backgroundTag":"unsupported-platform","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}