{"record":{"id":"377336b98a1ce679","repo":"tinyhumansai/openhuman","slug":"failed","errorCode":null,"errorMessage":"{} {} failed: {}","messagePattern":"(.+?) (.+?) failed: (.+?)","errorType":"http","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/client.rs","lineNumber":432,"sourceCode":"        e: reqwest::Error,\n        method: &str,\n        path: &str,\n        url: &str,\n    ) -> anyhow::Error {\n        let mut chain = format!(\"{e}\");\n        let mut src: Option<&(dyn std::error::Error + 'static)> = e.source();\n        while let Some(s) = src {\n            chain.push_str(\" → \");\n            chain.push_str(&s.to_string());\n            src = s.source();\n        }\n        crate::core::observability::report_error_or_expected(\n            chain.as_str(),\n            \"integrations\",\n            method,\n            &[(\"path\", path), (\"failure\", \"transport\")],\n        );\n        anyhow::anyhow!(\"{} {} failed: {}\", method.to_uppercase(), url, chain)\n    }\n\n    fn map_sdk_error(error: SdkError, method: &str, path: &str, url: &str) -> anyhow::Error {\n        let method_upper = method.to_uppercase();\n        match error {\n            SdkError::Http(error) => Self::report_transport_error(error, method, path, url),\n            SdkError::Status { status, body } => {\n                let body_text = match body {\n                    serde_json::Value::String(text) => text,\n                    value => value.to_string(),\n                };\n                let detail = extract_error_detail(&body_text, MAX_ERROR_BODY_LEN);\n                if status == reqwest::StatusCode::UNAUTHORIZED.as_u16() {\n                    return anyhow::anyhow!(handle_session_jwt_unauthorized(\n                        &method_upper,\n                        path,\n                        url,\n                        &detail","sourceCodeStart":414,"sourceCodeEnd":450,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/client.rs#L414-L450","documentation":"Constructed in report_transport_error when a reqwest call to the backend fails at the transport layer (DNS, connect, TLS, timeout). The full error source chain is flattened with arrows and reported to observability with the failing path and 'failure=transport'.","triggerScenarios":"Thrown at src/openhuman/integrations/client.rs:432 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity and the backend base URL/proxy settings","Retry — transient DNS/connect/timeout failures often resolve on their own","Inspect the chained causes in the message to distinguish DNS vs TLS vs timeout"],"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"}