{"record":{"id":"07627ea10244d603","repo":"tinyhumansai/openhuman","slug":"people-unavailable-e","errorCode":null,"errorMessage":"people unavailable: {e}","messagePattern":"people unavailable: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/people.rs","lineNumber":31,"sourceCode":"\nuse async_trait::async_trait;\nuse chrono::Utc;\nuse serde_json::json;\n\nuse crate::openhuman::memory::api::provider::{MemoryProvider, PersonHandle, PersonInteraction};\nuse crate::openhuman::memory::guard::MemoryGuard;\nuse crate::openhuman::memory::ops::guard::active_memory_guard;\nuse crate::openhuman::memory::people::rpc;\nuse crate::openhuman::tools::traits::{PermissionLevel, Tool, ToolResult};\n\n/// The guarded driver for this call, checked to serve the people family.\n///\n/// Returns the guard rather than the family handle because the accessor\n/// borrows from it.\nasync fn people_guard() -> anyhow::Result<std::sync::Arc<MemoryGuard>> {\n    let guard = active_memory_guard()\n        .await\n        .map_err(|e| anyhow::anyhow!(\"people unavailable: {e}\"))?;\n    if guard.as_people().is_none() {\n        return Err(anyhow::anyhow!(\n            \"people unavailable: memory driver does not support the people family\"\n        ));\n    }\n    Ok(guard)\n}\n\nfn read_required_str(args: &serde_json::Value, key: &str) -> anyhow::Result<String> {\n    args.get(key)\n        .and_then(serde_json::Value::as_str)\n        .map(str::trim)\n        .filter(|s| !s.is_empty())\n        .map(str::to_string)\n        .ok_or_else(|| anyhow::anyhow!(\"missing required string argument `{key}`\"))\n}\n\n/// Read `person_id` as the opaque token the contract defines it to be.","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/people.rs#L13-L49","documentation":"Shared guard helper for the people agent tools: people_guard() acquires the active memory guard and checks it serves the people family; any failure (no active memory guard, driver not bound, or family unsupported) is re-wrapped as `people unavailable: {e}`. Fires on every people_* tool call when the memory driver lacks people capability, before any operation runs.","triggerScenarios":"Thrown at src/openhuman/memory/tools/people.rs:31 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry after the memory subsystem binds its driver","Check the chained binding error in logs","Confirm a people-capable memory backend is configured"],"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-14T05:17:10.506Z"}