{"record":{"id":"eeea11772b0b5720","repo":"tinyhumansai/openhuman","slug":"invalid-runtime-python-maximum-version-maximum-v","errorCode":null,"errorMessage":"invalid runtime_python.maximum_version `{maximum_version}`","messagePattern":"invalid runtime_python\\.maximum_version `(.+?)`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/runtime/python/downloader.rs","lineNumber":96,"sourceCode":"        .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))\n        .filter(|dist| dist.version >= minimum)\n        // Exclusive upper bound — keeps selection off newer pre-release series\n        // (e.g. 3.15.x betas, which parse as a bare `3.15.0`).\n        .filter(|dist| maximum.as_ref().is_none_or(|max| dist.version < *max))\n        .collect::<Vec<_>>();\n\n    if candidates.is_empty() {\n        bail!(\n            \"no managed python-build-standalone asset found for host suffix `{target_suffix}` with version >= {}{} in release {}\",","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/runtime/python/downloader.rs#L78-L114","documentation":"select_distribution found runtime_python.maximum_version non-empty but unparseable. Empty string is the sanctioned way to disable the upper bound; anything else must parse, so a typo here is surfaced rather than silently ignored.","triggerScenarios":"Thrown at src/openhuman/runtime/python/downloader.rs:96 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set maximum_version to a valid version (e.g. \"3.13\") or to an empty string to disable the bound","Fix the typo in the [runtime_python] config block"],"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"}