{"record":{"id":"228af153f7d8c79f","repo":"tinyhumansai/openhuman","slug":"memory-driver-driver-id-is-not-the-embedded-ti","errorCode":null,"errorMessage":"memory driver `{driver_id}` is not the embedded TinyCortex driver, so `{invocation}` is unavailable: it operates on the local embedded store directly, and this configuration bound a different driver. Run `openhuman subsystems` to see the bound driver, or change `[subsystems.memory] driver` in your config.","messagePattern":"memory driver `(.+?)` is not the embedded TinyCortex driver, so `(.+?)` is unavailable: it operates on the local embedded store directly, and this configuration bound a different driver\\. Run `openhuman subsystems` to see the bound driver, or change `\\[subsystems\\.memory\\] driver` in your config\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/core/cli_capability.rs","lineNumber":214,"sourceCode":"    capability_verdict(&driver_id, advertised, Some(required), invocation)\n}\n\n/// The pure verdict for the legacy-client gate: does the bound driver class\n/// permit commands that operate on the embedded store directly?\n///\n/// Mirrors [`capability_verdict`]'s default-OPEN posture — `None` from the\n/// caller means \"no legacy gate applies\", and an unresolvable binding has\n/// already been defaulted-OPEN upstream by the caller skipping this entirely.\npub fn legacy_client_verdict(driver_id: &str, class: DriverClass, invocation: &str) -> Result<()> {\n    if class == DriverClass::Embedded {\n        return Ok(());\n    }\n    log::warn!(\n        \"[cli][legacy-client-gate] rejected invocation='{invocation}' driver='{driver_id}' \\\n         class={} — not the embedded engine\",\n        class.as_str()\n    );\n    anyhow::bail!(legacy_client_unavailable_message(driver_id, invocation))\n}\n\n#[cfg(test)]\n#[path = \"cli_capability_tests.rs\"]\nmod tests;\n","sourceCodeStart":196,"sourceCodeEnd":220,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/core/cli_capability.rs#L196-L220","documentation":"legacy_client_verdict rejects CLI invocations that operate directly on the local embedded memory store when the bound driver's class is not Embedded. These legacy commands bypass the provider seam and touch the embedded engine's own storage, so running them against a module-backed or remote driver would read and write the wrong store; the gate fails fast instead. Like the capability gate it mirrors, an unresolvable binding defaults OPEN - denial here means a driver was actually bound and answered with a non-embedded class.","triggerScenarios":"`[subsystems.memory] driver` points at a module-backed or otherwise non-embedded driver while the user runs a legacy client command that manipulates the embedded store directly (maintenance or repair-style invocations).","commonSituations":"Migrating a workspace from embedded to module memory and then re-running old maintenance commands; scripts written for the default embedded driver reused on reconfigured machines.","solutions":["Run `openhuman subsystems` to confirm the bound driver id and class.","Re-bind the embedded TinyCortex driver in `[subsystems.memory]` before using the legacy command.","Or use the driver-agnostic invocation equivalent if one exists for the task."],"exampleFix":"# before\n[subsystems]\nmemory.driver = \"module\"\n# then a legacy embedded-store command is rejected\n\n# after\n[subsystems]\nmemory.driver = \"embedded\"   # legacy embedded-store commands allowed","handlingStrategy":"validation","validationCode":"let (_id, class, _advertised) = resolve_bound_driver().unwrap();\nif class != DriverClass::Embedded {\n    // legacy embedded-store command would be rejected - switch driver or skip","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Before running legacy embedded-store maintenance commands, confirm the bound driver class is Embedded.","Keep maintenance scripts per-driver instead of assuming the default embedded binding.","Use driver-agnostic invocations where they exist."],"tags":["capability-gate","memory","driver","embedded-store","cli"],"backgroundTag":"driver-not-embedded","analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}