Skip to content

feat: recall review — interactive human-in-the-loop preview of aging/dedup/prune candidates (borrowed from mnemon gc) #232

Description

@edheltzel

Context

From the 2026-07-13 mnemon competitive review (red-team validated — Recall memory breadcrumb #3984, learning #668). The red team rated this the best-value borrow in the entire candidate list: a thin verb over machinery Recall already shipped, not a new subsystem.

Prior art this builds on (do not duplicate): aging policy #139 / epic #53, consolidation #141, migration #140, dedup/prune #45 #80 #145. mnemon reference: cmd/gc.go — suggest mode lists non-immune insights below an effective-importance threshold; gc --keep <id> boosts retention (access bump + timestamp refresh), and actual deletion stays a separate explicit act.

Proposal

A read-only-by-default review verb:

recall review            # list records that the next aging/consolidation pass would demote/merge, ranked
recall review --keep <id>  # pin: boost so aging skips it
recall review --limit 20 --type decisions
  • Reuses the existing aging/dedup scoring — the verb PREVIEWS what recall age / recall consolidate / recall prune would do, it does not introduce a second scoring model (DRY).
  • --keep is the only mutation: a retention boost consistent with the demote-not-delete locked decision (nothing is deleted).
  • Gives the user agency over memory curation without babysitting — 'review what's about to fade.'

Acceptance criteria

  • recall review lists demotion/merge candidates with the same scoring the real aging pass uses (no parallel heuristic)
  • --keep <id> boosts retention and is reflected in the next recall review output
  • Default invocation performs zero writes
  • Works via CLI; MCP exposure optional follow-up
  • bun tests covering: candidate listing matches aging policy, keep-boost behavior, no-write default

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageMaintainer needs to evaluate this issuerisk:lowwork that is non-ambiguous, no human judgement as `agent:ready`type:featureNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions