{"record":{"id":"724d90dd317d6a51","repo":"tinyhumansai/openhuman","slug":"node-runtime-is-disabled-set-node-enabled-true","errorCode":null,"errorMessage":"node runtime is disabled (set node.enabled = true to use skills that require node/npm)","messagePattern":"node runtime is disabled \\(set node\\.enabled = true to use skills that require node/npm\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/runtime/node/bootstrap.rs","lineNumber":158,"sourceCode":"        None\n    }\n\n    /// Resolve the Node.js toolchain, downloading + extracting a managed\n    /// distribution if necessary. Idempotent: the first successful call\n    /// memoises the result; later calls return it without further I/O.\n    pub async fn resolve(&self) -> Result<ResolvedNode> {\n        let mut guard = self.cached.lock().await;\n        if let Some(existing) = guard.as_ref() {\n            tracing::debug!(\n                version = %existing.version,\n                source = ?existing.source,\n                \"[node_runtime::bootstrap] returning cached ResolvedNode\"\n            );\n            return Ok(existing.clone());\n        }\n\n        if !self.config.enabled {\n            bail!(\"node runtime is disabled (set node.enabled = true to use skills that require node/npm)\");\n        }\n\n        if self.config.prefer_system {\n            if let Some(system) = detect_system_node(&self.config.version) {\n                let resolved = resolve_from_system(system)?;\n                *guard = Some(resolved.clone());\n                return Ok(resolved);\n            }\n        }\n\n        let managed = self.install_managed().await?;\n        *guard = Some(managed.clone());\n        Ok(managed)\n    }\n\n    /// Compute the cache root for managed Node.js installs.\n    ///\n    /// Resolution order (first hit wins):","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/runtime/node/bootstrap.rs#L140-L176","documentation":"Raised by NodeBootstrap::resolve when the managed Node.js toolchain is switched off in config: try_cached/probe_installed found nothing (they returned None), so resolve() is the terminal fallback that fails. It is a config gate, not an environment probe — nothing was attempted on disk.","triggerScenarios":"Thrown at src/openhuman/runtime/node/bootstrap.rs:158 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set node.enabled = true in config.toml and retry the skill/turn that needs node or npm","Avoid skills that require the managed Node toolchain if it is intentionally disabled"],"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"}