{"record":{"id":"ea5a501903d2527b","repo":"tinyhumansai/openhuman","slug":"people-refresh-address-book-e","errorCode":null,"errorMessage":"people_refresh_address_book: {e}","messagePattern":"people_refresh_address_book: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/people.rs","lineNumber":384,"sourceCode":"         seeding contacts and their handles. On macOS this may trigger a \\\n         Contacts (TCC) permission prompt. Returns counts of seeded / skipped \\\n         contacts. Only use when the user explicitly asks to import contacts.\"\n    }\n\n    fn parameters_schema(&self) -> serde_json::Value {\n        json!({ \"type\": \"object\", \"properties\": {} })\n    }\n\n    fn permission_level(&self) -> PermissionLevel {\n        PermissionLevel::Execute\n    }\n\n    async fn execute(&self, _args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        log::debug!(\"[tool][people] refresh_address_book invoked\");\n        let guard = people_guard().await?;\n        let outcome = rpc::handle_refresh_address_book(guard.as_people().expect(\"checked\"))\n            .await\n            .map_err(|e| anyhow::anyhow!(\"people_refresh_address_book: {e}\"))?;\n        Ok(ToolResult::success(serde_json::to_string(&outcome.value)?))\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::openhuman::tools::traits::ToolScope;\n\n    #[test]\n    fn names_and_levels() {\n        assert_eq!(PeopleListTool.name(), \"people_list\");\n        assert_eq!(PeopleListTool.permission_level(), PermissionLevel::ReadOnly);\n        assert_eq!(PeopleResolveTool.permission_level(), PermissionLevel::Write);\n        assert_eq!(\n            PeopleRecordInteractionTool.permission_level(),\n            PermissionLevel::Write\n        );","sourceCodeStart":366,"sourceCodeEnd":402,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/people.rs#L366-L402","documentation":"The address-book refresh (macOS CNContactStore seeding via the contacts path) failed after the TCC permission prompt stage. The chained error usually indicates a denied Contacts permission or a store read failure.","triggerScenarios":"Thrown at src/openhuman/memory/tools/people.rs:384 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Grant Contacts access when macOS prompts (System Settings > Privacy)","Retry after permission is granted","Check the contacts feature is enabled on this platform"],"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"}