{"record":{"id":"a3f41a965d5d7a3c","repo":"tinyhumansai/openhuman","slug":"runtime-python-server-closed-stdout","errorCode":null,"errorMessage":"runtime python server closed stdout","messagePattern":"runtime python server closed stdout","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/runtime/python_server/server.rs","lineNumber":185,"sourceCode":"            id,\n            method\n        );\n        inner\n            .stdin\n            .write_all(line.as_bytes())\n            .await\n            .context(\"writing runtime python server request\")?;\n        inner\n            .stdin\n            .flush()\n            .await\n            .context(\"flushing runtime python server request\")?;\n\n        loop {\n            let next = tokio::time::timeout(REQUEST_TIMEOUT, inner.stdout.next_line()).await;\n            let line = match next {\n                Ok(Ok(Some(line))) => line,\n                Ok(Ok(None)) => bail!(\"runtime python server closed stdout\"),\n                Ok(Err(error)) => {\n                    return Err(error).context(\"reading runtime python server response\")\n                }\n                Err(_) => bail!(\"runtime python server request timed out\"),\n            };\n            let response: PythonServerResponse = match serde_json::from_str(&line) {\n                Ok(response) => response,\n                Err(error) => {\n                    log::warn!(\n                        \"[runtime_python_server] unparseable response skipped: {error}; line_len={}\",\n                        line.len()\n                    );\n                    continue;\n                }\n            };\n            if response.id.as_deref() != Some(id.as_str()) {\n                log::debug!(\n                    \"[runtime_python_server] skipped response for different id={:?}\",","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/runtime/python_server/server.rs#L167-L203","documentation":"request_once got EOF on the runtime python server's stdout while waiting for a response — the server process crashed mid-request. Unparseable lines are skipped, so this genuinely means the pipe closed.","triggerScenarios":"Thrown at src/openhuman/runtime/python_server/server.rs:185 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the drained server stderr / core logs for the crash cause","Re-provision the venv if dependencies are broken","Retry the request — a fresh server is spawned on the next call after the cache is reset"],"exampleFix":null,"handlingStrategy":"retry","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"}