Mem0 report verification
Type: agentic-system-analyses/types/agentic-system-verification.md
Verification
The reports support a bounded account of implemented retention, selection and model-input delivery, not demonstrated truth, successful operation or benefit. I independently traced consequential producer/consumer behavior in SRC-1 rather than treating the analysts' validation statements as semantic verification. HEAD matched the reviewed revision and the source checkout was clean. No target code, test, provider or service was executed. The supplied structural report has no findings; all four correction-answer inputs are empty.
Records and source support
- Runtime components and configuration: RT-CMP-openai-llm and RT-CMP-openai-embedding correctly separate external numerical components from stored outputs. SRC-1,
mem0/llms/openai.pyandmem0/embeddings/openai.py, support inference-only adapters, mutable endpoint configuration and unpinned aliases, not training or immutable provider weights. RT-OBJ-custom-instructions, RT-OBJ-config-overrides and RT-RTE-runtime-config are supported by SRC-1,mem0/configs/prompts.py,server/server_state.py,server/main.pyandmem0/utils/factory.py. Installation, generated proposals, trusted imports and best-effort override persistence remain separate. Configuration assignment precedes replacement construction; no rollback guarantee follows. - Python progression and delivery: RT-RTE-chat-memories, RT-RTE-extract-add, RT-RTE-direct-write, RT-BAP-answer-context and RT-BAP-extraction-context agree with SRC-1,
README.md,mem0/memory/main.pyandmem0/configs/prompts.py. The README forwards text-only recall, generates an answer, then awaits addition before returning. Extraction-provider failure raises; parse-empty extraction can still save messages and return normally. The inferred write filters returned records by adapter insertion success, but does not atomically commit vectors, history, entities and messages. Raw/procedural writes and explicit mutations are genuine counterpaths to a universal extraction gate. The workflow account and both workflow annotations preserve these different success boundaries; no independent correctness check or driver recovery is invented. - Python retained parts: MEM-OBJ-memory-data, MEM-OBJ-memory-access, MEM-OBJ-memory-vectors, MEM-OBJ-messages, MEM-OBJ-history, MEM-OBJ-entity-links and MEM-OBJ-procedural-memory retain distinct content, access, numerical and trace roles. SRC-1,
mem0/memory/main.pyandmem0/memory/storage.py, support their storage and consumers. Recent-ten eviction is not a token budget; mutation history is not automatic rollback or an answer reader. Deletion does not erase the raw tail or old history text. - Selection and control counterpaths: RT-RTE-server-access correctly limits authentication to endpoint admission, not authenticated memory ownership, against SRC-1,
server/auth.pyandserver/main.py. RT-RTE-hosted-client is request delegation, not hosted implementation evidence. RT-RTE-proxy-chat retains the incompatible top-level search arguments and hosted formatter assumption visible in SRC-1,mem0/proxy/main.pyandmem0/client/main.py. Its wiring status does not claim a working recall branch. Public search excludes expired candidates, while private extraction retrieval, direct get and raw admin listing supply distinct counterpaths. Semantic candidates remain the scoring pool; lexical scores do not independently enlarge it. MEM-RTE-typescript-memory correctly preserves the separate TypeScript insertion-accounting defect and scoped search implementation in SRC-1,mem0-ts/src/oss/src/memory/index.ts; Python's confirmed-record guarantee is not exported to it. - Host routes: RT-RTE-openclaw-hooks and RT-RTE-openclaw-add correctly distinguish skills-mode foreground facts from legacy capture. SRC-1,
integrations/openclaw/index.ts,integrations/openclaw/recall.ts,integrations/openclaw/tools/memory-add.tsandintegrations/openclaw/providers.ts, support channel delivery, approximate budgeting, identity exceptions and OSS direct-fact translation. MEM-OBJ-evidence-store, MEM-RTE-coding-flush and MEM-RTE-coding-recall distinguish local evidence/bookkeeping, selected extraction batches, opaque hosted results and later context. SRC-1,integrations/claude-code-plugin/core/memory_core.pyandintegrations/claude-code-plugin/core/hook_runner.py, support polling/retry, filtering and pre-format seen-ID marking; successful bookkeeping is not complete delivered text. The sidekick's separate worktree/conversation is doctrine inintegrations/claude-code-plugin/agents/sidekick.md, not an observed isolation guarantee. MEM-RTE-hermes-memory and MEM-RTE-pi-memory agree with their shipped entry points and lifecycle code: inferred trace capture differs from direct tools, and timeout/filtering can withhold recall. Host invocation and service compliance remain unobserved. - Epistemic overlay: EPI-OBJ-data, EPI-OBJ-text-lemmatized, EPI-RTE-extraction-checks, EPI-RTE-keyword-index and EPI-RTE-memory-selection accurately distinguish propositions, lossy matching terms, procedural checks, operative rejection and ranking. SRC-1,
mem0/memory/main.pyandmem0/utils/lemmatization.py, do not license truth acceptance from those operations. EPI-RTE-memory-withdrawal, EPI-RTE-event-status and EPI-RTE-cli-import preserve target-match gates, advisory status and request-based import counts rather than independent warrant. Their cited OpenClaw tool and Python CLI bodies support those distinctions. EPI-CLM-evidence-bound, EPI-CLM-platform-scores and EPI-CLM-atomic-update retain the source declarations without upgrading them. The hiking example is a doctrine-level non-entailment witness, not an observed error; the README's platform qualification and separate vector/history writes support the reported mismatches. Indeterminate instance semantics and lack of system-complete acceptance coverage are appropriately scoped.
All declared records were assessed, including their retained anchors and evidence strengths. No evidenced-absence records are declared. Implementation, conditional activation and unobserved operation remain separate; no exercised learning or self-improvement conclusion is smuggled in through persistence. The two explicit Part of: relations are supported: procedural output belongs to the direct/procedural write container, and eligibility checking is a subroute of inferred addition. Cross-kind containment does not imply identity.
Reconciliation and omission disposition
The reconciliation correctly supersedes the duplicate epistemic data object with the memory payload object without deleting its distinctions. Lemmatized text is a valid access-payload part, not the whole payload; the encoder is not its stored output; search is not its chat caller. Other host routes have distinct crossings and selectors. All seven memory integration issues receive a disposition. No unresolved cross-report contradiction was found, and there is no correction answer to accept or decline. Source doctrine/implementation mismatches remain identified rather than being settled by selecting the stronger status.
Omission questions were selected from the frozen top-level tree, integration inventory and producer/consumer dependencies: could alternate callers overturn the extraction-gate account; could private or cached reads invalidate withdrawal claims; could provider translation turn requested direct facts or category TTL into different guarantees; and could shipped evaluators or development procedures alter the no-observed-benefit or scoped no-acceptance conclusions? Direct source tracing confirmed the known write/read counterpaths and OSS fact translation. OpenClaw's add adapter does not forward category-derived expiry, reinforcing the reports' refusal to infer TTL enforcement from triage labels. CLI import counts request outcomes. Native host compaction, alternate stores and other framework consumers remain insufficiently inspected for parity or exhaustive enumeration, as the reports already state.
The shipped integration/testing skills add a doctrine-level implementation/review/remediation workflow, not an execution trace or a demonstrated truth-acceptance route for retained memories. Their omission is local to the workflow inventory and is retained below. Optional expansion stopped because the selected challenges have supported dispositions, no material emitted claim remains unsupported, and further adapter/evaluator inventory would not justify broadening this partial-loop account. This does not establish absence in unsearched paths or override the boundary's unavailable hosted backend and evaluation submodule.
Blockers
none
Limits
- RT-RTE-chat-memories, RT-RTE-runtime-config and the workflow account do not inventory the shipped integration-development workflow. SRC-1,
skills/mem0-integrate/SKILL.mdandskills/mem0-test-integration/SKILL.md, prescribe approved plans, fresh-context implementation, review, output assertions and bounded remediation. Readers should withhold an exhaustive comparison of Mem0's shipped delegation, evaluation and recovery procedures; the selective chat workflow and lack of observed efficacy remain supported. These are doctrine/design, not verified execution or automatic improvement of Mem0 itself.| 10 | Self-healing loop. Runs
/mem0-test-integration --ci, categorizes the failure, spawns a bounded remediation subagent, reverts on regression. | Pre-existing test failure, stop, exit 6. Never "fix" it. | ---skills/mem0-integrate/SKILL.md - MEM-RTE-coding-recall's phrase “first sufficiently long prompt” leaves a local trigger ambiguity. SRC-1,
integrations/claude-code-plugin/core/hook_runner.pyandintegrations/claude-code-plugin/core/memory_core.py, check first-prompt identity before minimum length and record that first prompt even if short. Readers should not infer deferred automatic recall on a later long prompt after an ineligible short first prompt. Implemented conditional first-prompt delivery and explicit MCP recall remain supported; this does not undermine the system's positive read-back finding.is_first_prompt = not store.has_event(repo.identity, session_id, "user_prompt") store.record_event(repo, session_id, "user_prompt", {"text": prompt}) ---
integrations/claude-code-plugin/core/memory_core.py