{"record":{"id":"82fbf6a85aa7050c","repo":"tinyhumansai/openhuman","slug":"no-prebuilt-node-js-distribution-for-host-os-ar","errorCode":null,"errorMessage":"no prebuilt Node.js distribution for host {os}/{arch} — set node.enabled=false or install node manually","messagePattern":"no prebuilt Node\\.js distribution for host (.+?)/(.+?) — set node\\.enabled=false or install node manually","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/runtime/node/downloader.rs","lineNumber":99,"sourceCode":"    } else {\n        format!(\"v{trimmed}\")\n    }\n}\n\n/// Return `(archive_suffix, is_zip)` for the current host. The suffix omits\n/// the `node-vX.Y.Z-` prefix because callers always interpolate the version.\nfn host_archive_suffix() -> Result<(&'static str, bool)> {\n    let os = std::env::consts::OS;\n    let arch = std::env::consts::ARCH;\n    match (os, arch) {\n        (\"macos\", \"aarch64\") => Ok((\"darwin-arm64.tar.xz\", false)),\n        (\"macos\", \"x86_64\") => Ok((\"darwin-x64.tar.xz\", false)),\n        (\"linux\", \"aarch64\") => Ok((\"linux-arm64.tar.xz\", false)),\n        (\"linux\", \"x86_64\") => Ok((\"linux-x64.tar.xz\", false)),\n        (\"linux\", \"arm\") | (\"linux\", \"armv7\") => Ok((\"linux-armv7l.tar.xz\", false)),\n        (\"windows\", \"aarch64\") => Ok((\"win-arm64.zip\", true)),\n        (\"windows\", \"x86_64\") => Ok((\"win-x64.zip\", true)),\n        _ => Err(anyhow!(\n            \"no prebuilt Node.js distribution for host {os}/{arch} — set node.enabled=false or install node manually\"\n        )),\n    }\n}\n\n/// Fetch `SHASUMS256.txt` for the release and return a\n/// `archive_name -> sha256_hex` map. The hex digest is lowercase.\npub async fn fetch_shasums(client: &Client, version: &str) -> Result<HashMap<String, String>> {\n    let version = normalize_version(version);\n    let url = format!(\"{NODEJS_DIST_BASE}/{version}/SHASUMS256.txt\");\n    tracing::debug!(url = %url, \"[node_runtime::downloader] fetching SHASUMS256.txt\");\n\n    let body = client\n        .get(&url)\n        .send()\n        .await\n        .with_context(|| format!(\"GET {url}\"))?\n        .error_for_status()","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/runtime/node/downloader.rs#L81-L117","documentation":"The Node.js distribution downloader has no prebuilt archive mapping for the host's OS/architecture combination (`host_archive_suffix` matched no arm in its table). This fires on platforms nodejs.org does not ship tarballs for — e.g. musl-based or BSD hosts — so managed Node provisioning is impossible on this machine. The message offers the two supported escapes: disable managed Node, or bring your own Node install.","triggerScenarios":"Thrown at src/openhuman/runtime/node/downloader.rs:99 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Install Node.js manually (nvm/system package) — the runtime detects and reuses an existing install","Disable managed provisioning in config: set `node.enabled = false`","Do not wait for a fix: the mapping table only covers platforms with upstream prebuilt tarballs"],"exampleFix":null,"handlingStrategy":"fallback","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-14T05:17:10.506Z"}