{"record":{"id":"98cb711c02ecf19a","repo":"jdx/mise","slug":"version-order-must-be-source-or-semver","errorCode":null,"errorMessage":"version_order must be \"source\" or \"semver\"","messagePattern":"version_order must be \"source\" or \"semver\"","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/options.rs","lineNumber":29,"sourceCode":"pub(crate) enum VersionOrder {\n    #[default]\n    Source,\n    Semver,\n}\n\nimpl VersionOrder {\n    #[cfg(test)]\n    pub(crate) fn from_options(options: &ToolVersionOptions) -> Result<Self> {\n        Self::from_options_or(options, Self::Source)\n    }\n\n    pub(crate) fn from_options_or(options: &ToolVersionOptions, default: Self) -> Result<Self> {\n        match options.opts.get(\"version_order\") {\n            None => Ok(default),\n            Some(toml::Value::String(value)) => match value.as_str() {\n                \"source\" => Ok(Self::Source),\n                \"semver\" => Ok(Self::Semver),\n                _ => bail!(\"version_order must be \\\"source\\\" or \\\"semver\\\"\"),\n            },\n            Some(_) => bail!(\"version_order must be \\\"source\\\" or \\\"semver\\\"\"),\n        }\n    }\n\n    pub(crate) fn order(self, versions: Vec<String>) -> Vec<String> {\n        self.order_by(versions, String::as_str)\n    }\n\n    pub(crate) fn order_by<T, F>(self, versions: Vec<T>, version: F) -> Vec<T>\n    where\n        F: for<'a> Fn(&'a T) -> &'a str,\n    {\n        if self == Self::Source {\n            return versions;\n        }\n\n        let mut opaque = Vec::new();","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/options.rs#L11-L47","documentation":"VersionOrder::from_options_or parses the `version_order` tool option. This throw site handles the non-string TOML value case (Some(_) arm): if version_order is present but is not a TOML string (e.g. an integer, boolean, or table), it bails demanding the string \"source\" or \"semver\".","triggerScenarios":"Setting `version_order = 1`, `version_order = true`, or `version_order = [\"semver\"]` in tool options — any non-string TOML value passed to from_options_or.","commonSituations":"Typo in mise.toml omitting quotes around \"semver\" so TOML parses it as a bare key/table; programmatic construction of ToolVersionOptions with a non-string value.","solutions":["Quote the value: `version_order = \"semver\"` or `version_order = \"source\"` in mise.toml.","Remove the option if ordering customization is not needed (the default applies).","Ensure any code building ToolVersionOptions inserts a toml::Value::String for this key."],"exampleFix":"// before (mise.toml)\nversion_order = semver   # parsed as non-string\n\n// after\nversion_order = \"semver\"","handlingStrategy":"validation","validationCode":"# validate version_order is a quoted string in TOML\nmise config get ./mise.toml | grep version_order","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always quote TOML string values: version_order = \"semver\"","Run `mise doctor` or the mise.toml JSON schema validation in editors","Enable TOML language server schema checking for mise.toml"],"tags":["config","version-order","type-mismatch","toml"],"backgroundTag":"type-mismatch","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"}