{"record":{"id":"8cb9bd5e4d607187","repo":"tinyhumansai/openhuman","slug":"people-add-alias-e","errorCode":null,"errorMessage":"people_add_alias: {e}","messagePattern":"people_add_alias: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/people.rs","lineNumber":286,"sourceCode":"            \"required\": [\"person_id\", \"kind\", \"value\"]\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][people] add_alias invoked\");\n        let person_id = parse_person_id(&args)?;\n        let handle = parse_handle(&args)?;\n        let guard = people_guard().await?;\n        guard\n            .as_people()\n            .expect(\"checked\")\n            .add_handle_alias(&person_id, &handle)\n            .await\n            .map_err(|e| anyhow::anyhow!(\"people_add_alias: {e}\"))?;\n        Ok(ToolResult::success(serde_json::to_string(\n            &json!({ \"ok\": true }),\n        )?))\n    }\n}\n\n/// Record an interaction (append-only, feeds scoring).\npub struct PeopleRecordInteractionTool;\n\n#[async_trait]\nimpl Tool for PeopleRecordInteractionTool {\n    fn name(&self) -> &str {\n        \"people_record_interaction\"\n    }\n\n    fn description(&self) -> &str {\n        \"Log an interaction with a `person_id` to feed the closeness score. \\\n         `is_outbound` marks who initiated; `length` is a depth proxy (e.g. \\","sourceCodeStart":268,"sourceCodeEnd":304,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/people.rs#L268-L304","documentation":"Error-surfacing wrapper in the people_add_alias tool's execute: the add_handle_alias driver call failed after arguments parsed and the guard was acquired. The alias was not added; typical causes are an unknown person_id or a driver-level rejection. It is a re-wrap, so the underlying driver error follows the prefix.","triggerScenarios":"Thrown at src/openhuman/memory/tools/people.rs:286 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check for duplicate handle aliases in the chained error","Retry transient store failures","Verify the person exists before adding an alias"],"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"}