{"record":{"id":"a133b9de9a9a19a3","repo":"tinyhumansai/openhuman","slug":"backend-returned-success-but-no-data-for-delete","errorCode":null,"errorMessage":"Backend returned success but no data for DELETE {}","messagePattern":"Backend returned success but no data for DELETE (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/composio/client.rs","lineNumber":568,"sourceCode":"            let msg = envelope\n                .error\n                .unwrap_or_else(|| \"unknown backend error\".into());\n            // Mirrors the integrations envelope-error sites — route through\n            // the observability classifier so user-state envelope failures\n            // (composio \"Toolkit X is not enabled\" / \"Trigger type …\n            // not found\" / \"Missing required fields: …\" — OPENHUMAN-TAURI-3R\n            // / -3S / -34 / -97) demote to a breadcrumb instead of firing\n            // a Sentry event. Genuine backend bugs still surface.\n            crate::core::observability::report_error_or_expected(\n                msg.as_str(),\n                \"composio\",\n                \"delete\",\n                &[(\"path\", path), (\"failure\", \"envelope_error\")],\n            );\n            anyhow::bail!(\"Backend error for DELETE {}: {}\", url, msg);\n        }\n        envelope.data.ok_or_else(|| {\n            anyhow::anyhow!(\"Backend returned success but no data for DELETE {}\", url)\n        })\n    }\n}\n\nfn is_post_oauth_auth_readiness_error(resp: &ComposioExecuteResponse) -> bool {\n    if resp.successful {\n        return false;\n    }\n    let Some(error) = resp.error.as_deref() else {\n        return false;\n    };\n    let normalized = error.trim().to_ascii_lowercase();\n    POST_OAUTH_AUTH_ERROR_STRINGS\n        .iter()\n        .any(|needle| normalized.contains(needle))\n}\n\nfn required_oauth_scopes_for_toolkit(toolkit: &str) -> &'static [&'static str] {","sourceCodeStart":550,"sourceCodeEnd":586,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/composio/client.rs#L550-L586","documentation":"The integrations envelope for a Composio DELETE request reported success but carried no data payload. A contract violation by the backend: the {success,data} envelope handler expects a data member for this route, and its absence means the delete's outcome cannot be confirmed from the response body.","triggerScenarios":"Thrown at src/openhuman/integrations/composio/client.rs:568 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Treat as deleted if the endpoint returns no body on success","Otherwise report the envelope mismatch to the backend"],"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"}