{"record":{"id":"ae8a6f2c3c536e2c","repo":"tinyhumansai/openhuman","slug":"message-not-found-on-provider-message-id","errorCode":null,"errorMessage":"message not found on {provider}: {message_id}","messagePattern":"message not found on (.+?): (.+?)","errorType":"http","errorClass":"BackendApiError::MessageNotFound","httpStatus":404,"severity":"error","filePath":"src/api/rest.rs","lineNumber":736,"sourceCode":"                    return Err(anyhow::Error::new(\n                        BackendApiError::ChannelEditUnsupported {\n                            provider,\n                            message_id,\n                        },\n                    ));\n                }\n\n                if let Some((provider, message_id)) = channel_message {\n                    tracing::info!(\n                        domain = \"backend_api\",\n                        operation = \"authed_json\",\n                        provider = provider,\n                        message_id = message_id,\n                        \"[backend_api] message-not-found 404 on {} {} — surfacing typed error\",\n                        method.as_str(),\n                        url.path(),\n                    );\n                    return Err(anyhow::Error::new(BackendApiError::MessageNotFound {\n                        provider: provider.to_string(),\n                        message_id: message_id.to_string(),\n                    }));\n                }\n                // Defense-in-depth: DELETE 404s on any channel-message path that\n                // parse_message_path could not parse (e.g. exotic URL variant with extra\n                // segments). Still an expected backend state — suppress the Sentry event\n                // without propagating a typed error. Targets OPENHUMAN-TAURI-R7.\n                // PATCH is handled above and returns the typed\n                // `ChannelEditUnsupported` for both the parsed and unparsed shapes.\n                if method == Method::DELETE\n                    && url.path().contains(\"/channels/\")\n                    && url.path().contains(\"/messages/\")\n                {\n                    tracing::debug!(\n                        domain = \"backend_api\",\n                        operation = \"authed_json\",\n                        \"[backend_api] channel-message 404 on {} {} — path not matched by \\","sourceCodeStart":718,"sourceCodeEnd":754,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/api/rest.rs#L718-L754","documentation":"For tagged channel-message calls, a 404 is classified as the message no longer existing on the provider (deleted or inaccessible) and surfaced as the typed BackendApiError::MessageNotFound; logged at info because it is an expected eventual-consistency outcome, not a bug.","triggerScenarios":"Thrown at src/api/rest.rs:736 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Handle MessageNotFound by dropping stale references to that message","Re-fetch the conversation state before retrying edits"],"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-14T00:17:10.932Z"}