What it targets
The cleanup action is deliberately narrow. A memory must be:- active, not archived
store: "sensory"source: "external"enrichmentSkippedReason: "sensory_skip"- tagged with both
openclawandauto-capture - not linked to a knowledge base
- not protected by sensory retention policy
- older than the configured age threshold
- at or below the configured access-count threshold
How to run it
Use dry-run first:dryRun: false:
matched, deleted, scanned, done, and sample metadata. It also writes an audit log and adjusts dashboard graph totals.
Verify
After cleanup:- rerun the dry-run and confirm
matched: 0 - check graph status and confirm actionable enrichment is not held down by
sensory_skip - rerun the recall-quality smoke that exposed the issue
- keep
kb_chunkskips separate; KB child chunks normally skip graph enrichment because the parent chunk carries graph context
Source of truth
convex/crystal/sensoryPurge.tsconvex/crystal/sensoryPolicy.tsconvex/crystal/dashboardTotals.ts