{"record":{"id":"f0a6055511a21c28","repo":"tinyhumansai/openhuman","slug":"invalid-runtime-python-minimum-version-minimum-v","errorCode":null,"errorMessage":"invalid runtime_python.minimum_version `{minimum_version}`","messagePattern":"invalid runtime_python\\.minimum_version `(.+?)`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/runtime/python/downloader.rs","lineNumber":87,"sourceCode":"        .get(&url)\n        .header(reqwest::header::USER_AGENT, \"openhuman-core/runtime_python\")\n        .send()\n        .await\n        .with_context(|| format!(\"GET {url}\"))?\n        .error_for_status()\n        .with_context(|| format!(\"non-success status on {url}\"))?\n        .json::<GithubRelease>()\n        .await\n        .with_context(|| format!(\"decoding release metadata from {url}\"))\n}\n\npub fn select_distribution(\n    release: &GithubRelease,\n    minimum_version: &str,\n    maximum_version: &str,\n) -> Result<PythonDistribution> {\n    let Some(minimum) = parse_python_version(minimum_version) else {\n        bail!(\"invalid runtime_python.minimum_version `{minimum_version}`\");\n    };\n    // Empty string disables the upper bound. A non-empty but unparseable value\n    // is a config error worth surfacing rather than silently ignoring.\n    let maximum = if maximum_version.trim().is_empty() {\n        None\n    } else {\n        match parse_python_version(maximum_version) {\n            Some(v) => Some(v),\n            None => bail!(\"invalid runtime_python.maximum_version `{maximum_version}`\"),\n        }\n    };\n    let target_suffix = host_asset_suffix()?;\n\n    let mut candidates = release\n        .assets\n        .iter()\n        .filter_map(|asset| parse_distribution_asset(asset, &release.tag_name))\n        .filter(|dist| asset_matches_target(&dist.asset_name, target_suffix))","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/runtime/python/downloader.rs#L69-L105","documentation":"select_distribution could not parse runtime_python.minimum_version as a Python version — a raw config syntax error caught before any network call. The offending literal is echoed in backticks.","triggerScenarios":"Thrown at src/openhuman/runtime/python/downloader.rs:87 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix minimum_version in the [runtime_python] config block to a valid version like \"3.12\"","Remove the override to fall back to the built-in default"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}