{"record":{"id":"ef92589916a19470","repo":"tinyhumansai/openhuman","slug":"memory-tools-list-no-tool-memory","errorCode":null,"errorMessage":"memory_tools_list: {NO_TOOL_MEMORY}","messagePattern":"memory_tools_list: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/tool_memory/list.rs","lineNumber":63,"sourceCode":"            \"properties\": {\n                \"tool_name\": {\n                    \"type\": \"string\",\n                    \"description\": \"Exact tool name (e.g. `bash`, `web_search`).\"\n                }\n            }\n        })\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        let parsed: Args = serde_json::from_value(args)\n            .map_err(|e| anyhow::anyhow!(\"invalid arguments for memory_tools_list: {e}\"))?;\n        log::debug!(\"[tool][memory_tools] list tool_name={}\", parsed.tool_name);\n        let guard = active_memory_guard()\n            .await\n            .map_err(|e| anyhow::anyhow!(\"memory_tools_list: {e}\"))?;\n        let rules = guard\n            .as_tool_memory()\n            .ok_or_else(|| anyhow::anyhow!(\"memory_tools_list: {NO_TOOL_MEMORY}\"))?\n            .tool_rules(&parsed.tool_name)\n            .await\n            .map_err(|e| anyhow::anyhow!(\"memory_tools_list: {e}\"))?;\n        log::debug!(\n            \"[tool][memory_tools] list via guard tool_name={} rules={}\",\n            parsed.tool_name,\n            rules.len()\n        );\n        let json = serde_json::to_string(&rules)?;\n        Ok(ToolResult::success(json))\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use std::ffi::OsString;\n","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/tool_memory/list.rs#L45-L81","documentation":"The memory guard was acquired but the tool-memory capability family is unavailable (`NO_TOOL_MEMORY`). This sentinel means the bound driver — typically the null/fallback provider when no memory module is loaded — does not implement tool-rule storage, so listing pinned rules for a tool is structurally impossible in this configuration rather than transiently failing.","triggerScenarios":"Thrown at src/openhuman/memory/tools/tool_memory/list.rs:63 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the memory module is loaded and provides the tool_memory family","Check memory driver binding status","Treat as a capability gap: skip tool-rule features when running without the memory module"],"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-14T05:17:10.506Z"}