{"record":{"id":"1e7b8b92745bc349","repo":"tinyhumansai/openhuman","slug":"unknown-module-module-id","errorCode":null,"errorMessage":"unknown module '{MODULE_ID}'","messagePattern":"unknown module '(.+?)'","errorType":"exception","errorClass":"MemoryError","httpStatus":null,"severity":"error","filePath":"src/openhuman/modules/memory.rs","lineNumber":201,"sourceCode":"    /// pass whatever `memory_subdir_for_suffix` produced without special-casing\n    /// the default.\n    #[must_use]\n    pub fn in_subdir(mut self, memory_subdir: &str) -> Self {\n        if memory_subdir != \"memory\" && !memory_subdir.is_empty() {\n            self.memory_subdir = Some(memory_subdir.to_string());\n        }\n        self\n    }\n\n    /// The object path this driver talks to, opening the subtree on first use.\n    ///\n    /// The root object is served eagerly at module setup, so the shared tree\n    /// costs nothing here. A dedicated subtree is opened once and cached; the\n    /// module is idempotent per subtree, so a lost race re-uses the same store\n    /// rather than opening the database twice.\n    async fn object_path(&self, proxy_root: &tinybus::Proxy) -> Result<String, MemoryError> {\n        let record = registry::find(MODULE_ID)\n            .ok_or_else(|| MemoryError::Other(anyhow::anyhow!(\"unknown module '{MODULE_ID}'\")))?;\n        let Some(subdir) = self.memory_subdir.as_deref() else {\n            return Ok(record.object_path.to_string());\n        };\n        self.resolved_path\n            .get_or_try_init(|| async {\n                log::debug!(\"[modules:memory] opening a dedicated memory subtree\");\n                proxy_root\n                    .call::<String>(\"OpenStore\", (subdir.to_string(),))\n                    .await\n                    .map_err(|error| from_bus(&error))\n            })\n            .await\n            .cloned()\n    }\n\n    /// Ensure the module is serving, and hand back a proxy for its object.\n    ///\n    /// `operation` identifies the forwarded call (e.g. `\"store\"`, `\"recall\"`)","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/modules/memory.rs#L183-L219","documentation":"The memory module driver looked up the TinyMemory module in the compiled-in module registry (`modules::registry`) by its constant id and found no entry. This is a build/configuration mismatch, not a runtime lookup of an arbitrary name — MODULE_ID is a compile-time constant, so this fires when the binary was built without the module registry entry or with a registry revision that does not know this id.","triggerScenarios":"Thrown at src/openhuman/modules/memory.rs:201 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rebuild with the feature set that includes the memory module registry entry (the `modules` feature)","Verify the pinned module id in `modules::registry` matches the id the driver names — a registry re-pin that renamed or dropped the entry causes exactly this","Do not attempt to fix at runtime: no config or RPC can add a registry entry"],"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-14T00:17:10.932Z"}