tinyhumansai/openhuman · error · MemoryError

unknown module '{MODULE_ID}'

Error message

unknown module '{MODULE_ID}'

What it means

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.

Source

Thrown at src/openhuman/modules/memory.rs:201

    /// pass whatever `memory_subdir_for_suffix` produced without special-casing
    /// the default.
    #[must_use]
    pub fn in_subdir(mut self, memory_subdir: &str) -> Self {
        if memory_subdir != "memory" && !memory_subdir.is_empty() {
            self.memory_subdir = Some(memory_subdir.to_string());
        }
        self
    }

    /// The object path this driver talks to, opening the subtree on first use.
    ///
    /// The root object is served eagerly at module setup, so the shared tree
    /// costs nothing here. A dedicated subtree is opened once and cached; the
    /// module is idempotent per subtree, so a lost race re-uses the same store
    /// rather than opening the database twice.
    async fn object_path(&self, proxy_root: &tinybus::Proxy) -> Result<String, MemoryError> {
        let record = registry::find(MODULE_ID)
            .ok_or_else(|| MemoryError::Other(anyhow::anyhow!("unknown module '{MODULE_ID}'")))?;
        let Some(subdir) = self.memory_subdir.as_deref() else {
            return Ok(record.object_path.to_string());
        };
        self.resolved_path
            .get_or_try_init(|| async {
                log::debug!("[modules:memory] opening a dedicated memory subtree");
                proxy_root
                    .call::<String>("OpenStore", (subdir.to_string(),))
                    .await
                    .map_err(|error| from_bus(&error))
            })
            .await
            .cloned()
    }

    /// Ensure the module is serving, and hand back a proxy for its object.
    ///
    /// `operation` identifies the forwarded call (e.g. `"store"`, `"recall"`)

View on GitHub (pinned to 7491200858)

Solutions

  1. Rebuild with the feature set that includes the memory module registry entry (the `modules` feature)
  2. 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
  3. Do not attempt to fix at runtime: no config or RPC can add a registry entry
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/openhuman/modules/memory.rs:201 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/1e7b8b92745bc349. Report an issue: GitHub.