{"record":{"id":"b320a7e2c74b3da4","repo":"tinyhumansai/openhuman","slug":"thread-message-append-e","errorCode":null,"errorMessage":"thread_message_append: {e}","messagePattern":"thread_message_append: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/threads/tools.rs","lineNumber":449,"sourceCode":"            \"type\": \"object\",\n            \"properties\": {\n                \"thread_id\": { \"type\": \"string\" },\n                \"message\": { \"type\": \"object\", \"description\": \"ConversationMessageRecord.\" }\n            },\n            \"required\": [\"thread_id\", \"message\"]\n        })\n    }\n\n    fn permission_level(&self) -> PermissionLevel {\n        PermissionLevel::Write\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        log::debug!(\"[tool][threads] message_append invoked\");\n        let req: AppendConversationMessageRequest = parse_req(args, \"thread_message_append\")?;\n        let outcome = ops::message_append(req)\n            .await\n            .map_err(|e| anyhow::anyhow!(\"thread_message_append: {e}\"))?;\n        Ok(ToolResult::success(serde_json::to_string(&outcome.value)?))\n    }\n}\n\n/// Patch a message's metadata.\npub struct ThreadMessageUpdateTool;\n\n#[async_trait]\nimpl Tool for ThreadMessageUpdateTool {\n    fn name(&self) -> &str {\n        \"thread_message_update\"\n    }\n\n    fn description(&self) -> &str {\n        \"Patch a message's `extra_metadata` in a thread. Requires `thread_id` \\\n         and `message_id`; `extra_metadata` is the new metadata object.\"\n    }\n","sourceCodeStart":431,"sourceCodeEnd":467,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/threads/tools.rs#L431-L467","documentation":"Generic wrapper from thread_message_append: appending a message record to a thread failed after the request deserialized. The underlying {e} is the memory-conversations write error — commonly a missing thread or an invalid message record.","triggerScenarios":"Thrown at src/openhuman/threads/tools.rs:449 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Confirm thread_id exists (thread_read)","Ensure 'message' is a well-formed ConversationMessageRecord","Read {e} for the concrete validation or persistence failure"],"exampleFix":null,"handlingStrategy":"try-catch","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"}