{"record":{"id":"2019d4f3969aada2","repo":"jdx/mise","slug":"backend-min-version-requires-version-order-semv","errorCode":null,"errorMessage":"backend min_version requires version_order = \"semver\"","messagePattern":"backend min_version requires version_order = \"semver\"","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/registry.rs","lineNumber":428,"sourceCode":"        .ok_or_else(|| eyre::eyre!(\"registry tool must be a TOML table\"))?;\n    let backends = table\n        .get(\"backends\")\n        .and_then(toml::Value::as_array)\n        .ok_or_else(|| eyre::eyre!(\"backends must be an array\"))?\n        .iter()\n        .map(parse_registry_backend)\n        .collect::<Result<Vec<_>>>()?;\n    ensure!(!backends.is_empty(), \"backends must not be empty\");\n\n    let missing_version_order = !table.contains_key(\"version_order\");\n    let version_order = match table.get(\"version_order\").and_then(toml::Value::as_str) {\n        Some(\"source\") => VersionOrder::Source,\n        Some(\"semver\") => VersionOrder::Semver,\n        Some(_) => bail!(\"version_order must be \\\"source\\\" or \\\"semver\\\"\"),\n        None => VersionOrder::Source,\n    };\n\n    ensure!(\n        version_order == VersionOrder::Semver || backends.iter().all(|b| b.min_version.is_none()),\n        \"backend min_version requires version_order = \\\"semver\\\"\"\n    );\n    let aliases = string_array(table.get(\"aliases\"), \"aliases\")?;\n    let bins = if table.contains_key(\"bins\") {\n        string_array(table.get(\"bins\"), \"bins\")?\n    } else {\n        BAKED_REGISTRY\n            .get(short)\n            .map(|tool| tool.bins.to_vec())\n            .unwrap_or_default()\n    };\n    let overrides = string_array(table.get(\"overrides\"), \"overrides\")?;\n    let os = string_array(table.get(\"os\"), \"os\")?;\n    let idiomatic_files = parse_registry_idiomatic_files(table.get(\"idiomatic_files\"))?;\n    let detect = string_array(table.get(\"detect\"), \"detect\")?;\n    let description = table\n        .get(\"description\")","sourceCodeStart":410,"sourceCodeEnd":446,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/registry.rs#L410-L446","documentation":"Registry tools can specify `version_order = \"source\"` (default) or `\"semver\"`. Backend-level `min_version` constraints rely on semver comparisons, so mise requires that any backend with a `min_version` be defined on a tool whose version_order is \"semver\". Using min_version under source ordering would silently do nothing sensible, so it is rejected at parse time.","triggerScenarios":"parse_registry_tool finding a backend entry with a `min_version` field while the tool's `version_order` is unset or \"source\".","commonSituations":"A registry contributor copies a backend block (with min_version) from a semver-ordered tool into a source-ordered tool (e.g. tools with date-based or named versions), or adds min_version without realizing version_order defaults to \"source\".","solutions":["Add `version_order = \"semver\"` to the tool's TOML table if its versions are semver-compatible.","Otherwise remove the backend's `min_version` field, since source-ordered tools cannot use it.","If the tool mixes version schemes, keep min_version only on backends whose tool is semver-ordered."],"exampleFix":"// before\n[deno]\n[[backends]]\ntype = \"github\"\nsource = \"denoland/deno\"\nmin_version = \"1.40.0\"\n\n// after\n[deno]\nversion_order = \"semver\"\n\n[[backends]]\ntype = \"github\"\nsource = \"denoland/deno\"\nmin_version = \"1.40.0\"","handlingStrategy":"validation","validationCode":"// pre-check: min_version only allowed with semver ordering\nlet order = table.get(\"version_order\").and_then(toml::Value::as_str).unwrap_or(\"source\");\nif order != \"semver\" && backends.iter().any(|b| b.min_version.is_some()) {\n    return Err(\"set version_order = \\\"semver\\\" or drop min_version\".into());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only add `min_version` to tools that declare (or should declare) version_order = \"semver\".","Remember version_order defaults to \"source\"; state it explicitly when using semver features.","Check version scheme (date-based/named vs semver) before copying backend blocks between tools."],"tags":["registry","toml","validation","versioning"],"backgroundTag":"conflicting-config-options","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"}