{"record":{"id":"432de95e2129919f","repo":"tinyhumansai/openhuman","slug":"memory-hybrid-search-memory-driver-does-not-suppo","errorCode":null,"errorMessage":"memory_hybrid_search: memory driver does not support the retrieval family","messagePattern":"memory_hybrid_search: memory driver does not support the retrieval family","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/search/hybrid_search.rs","lineNumber":139,"sourceCode":"        let limit = parsed.limit.clamp(1, 50);\n\n        log::debug!(\n            \"[tool][memory_hybrid_search] query_len={} ns={} mode={} limit={}\",\n            parsed.query.len(),\n            parsed.namespace,\n            parsed.mode,\n            limit,\n        );\n\n        // Reads through the bound driver. This used to call\n        // `UnifiedMemory::new(&config.workspace_dir, …)` — constructing a\n        // *whole second engine* over the workspace the loaded module already\n        // owns, the most severe instance of the split brain this port removes.\n        let guard = active_memory_guard()\n            .await\n            .map_err(|e| anyhow::anyhow!(\"memory_hybrid_search: {e}\"))?;\n        let retrieval = guard.as_retrieval().ok_or_else(|| {\n            anyhow::anyhow!(\n                \"memory_hybrid_search: memory driver does not support the retrieval family\"\n            )\n        })?;\n\n        // Self-echo guard (agent-agnostic, mirrors `UnifiedMemory::recall`):\n        // exclude documents auto-saved for the ambient chat thread (set by\n        // the web channel around the turn) so a search issued mid-turn\n        // never retrieves the very request that triggered it. `None`\n        // outside a chat turn — unchanged behavior for cron/CLI/tests.\n        let exclude_session_id =\n            crate::openhuman::agent::tinyagents::thread_context::current_thread_id();\n        if let Some(ref excluded) = exclude_session_id {\n            log::debug!(\n                \"[tool][memory_hybrid_search] applying same-session exclusion exclude_session_id={excluded}\"\n            );\n        }\n        let hits = retrieval\n            .recall_namespace_scored(","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/search/hybrid_search.rs#L121-L157","documentation":"The guard acquired for hybrid search has as_retrieval() == None — the bound driver lacks the retrieval family, so the multi-signal query cannot be routed. Driver capability mismatch after limit clamping.","triggerScenarios":"Thrown at src/openhuman/memory/tools/search/hybrid_search.rs:139 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a retrieval-capable memory driver","Diagnose why the bound driver lacks MemoryRetrieval","Fall back to a simpler search mode the driver supports"],"exampleFix":null,"handlingStrategy":"type-guard","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"}