Skip to content

Bug: Auto-captured memories stuck in pending state, blocked from auto-recall by governance filter #350

@yzjJosh

Description

@yzjJosh

Plugin Version

1.1.0-beta.10

OpenClaw Version

2026.3.23-2

Bug Description

Auto-captured memories are stored with state: "pending" but the auto-recall governance filter requires state === "confirmed", creating a chicken-and-egg problem where auto-captured memories can never be auto-recalled.

Key code locations (v1.1.0-beta.10):

  1. Auto-capture sets pending state (index.ts:2685):
state: "pending",
memory_layer: "working",
  1. Governance filter blocks non-confirmed (index.ts:2262):
if (meta.state !== "confirmed") {
  stateFilteredCount++;
  return false;
}
  1. Manual store uses confirmed (src/tools.ts - memory_store):
state: "confirmed"
  1. memory_promote tool exists but requires enableManagementTools: true (disabled by default) and has no automatic trigger.

Root cause: The state field was introduced in v1.1.0-beta as part of the "Smart Extraction" feature, but:

  • No documentation explains the state lifecycle
  • No automatic state transition exists from pendingconfirmed
  • The memory_promote tool exists but is gated behind enableManagementTools: true (disabled by default)

Disclosure: This issue was drafted and submitted by an OpenClaw AI agent on behalf of the user (Josh) after investigating the memory-lancedb-pro plugin codebase.

Expected Behavior

One of the following should work:

  1. Auto-captured memories should eventually become eligible for auto-recall
  2. An automatic promotion mechanism should exist (time-based, access-based, or first-retrieval-based)
  3. Documentation should explain that auto-capture requires manual promotion

Comparison with other memory systems:

System State Model Promotion
Mem0 No pending state N/A
Letta/MemGPT Tier-based Automatic by access
Redis Agent Memory TTL-based N/A
OpenAI Memory No state N/A
Governed Memory Quality gates at write N/A

Most systems either validate before storage or make memories immediately available. The pending → confirmed model is unique but incomplete without automatic promotion.

Steps to Reproduce

  1. Enable autoCapture: true and autoRecall: true in plugin config
  2. Have a conversation that triggers auto-capture (e.g., say "remember this: I prefer dark mode")
  3. Check memory database: openclaw memory-pro list --limit 10
  4. Observe the captured memory has state: "pending" in metadata
  5. Continue conversation and check gateway logs for auto-recall
  6. Observe: stateFilteredCount increments, memory is blocked
  7. Memory never appears in <relevant-memories> tag

Workaround:

  • Enable enableManagementTools: true
  • Use memory_promote tool to manually promote memories to "confirmed" state

Error Logs / Screenshots

**Log showing ALL memories blocked (pending state):**


[gateway] memory-lancedb-pro: auto-recall skipped after governance filters (hits=6, dedupFiltered=0, stateFiltered=6, suppressedFiltered=0)


- `hits=6`: 6 memories found by semantic search
- `stateFiltered=6`: ALL 6 blocked by `state !== "confirmed"` filter
- `skipped`: nothing injected

**Log showing ONE memory passing (confirmed state):**


[gateway] memory-lancedb-pro: auto-recall stats hits=6, dedupFiltered=0, stateFiltered=5, suppressedFiltered=0, preBudgetItems=1, postBudgetItems=1, injectedIds=6e148efc-...


- `hits=6`: 6 memories found
- `stateFiltered=5`: 5 blocked (pending state)
- `preBudgetItems=1`: 1 memory passed (the legacy confirmed memory)
- `injectedIds=...`: that 1 memory was successfully injected

**Pattern:** `stateFiltered` count equals number of pending memories blocked. Only confirmed memories pass through.

Embedding Provider

None

OS / Platform

Ubuntu 24.04

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions