Skip to content

Recall fails to surface most recent handoffs #394

@CalebisGross

Description

@CalebisGross

Problem

recall with type: "handoff" does not reliably surface the most recent handoff. In today's session (2026-04-11), querying for handoffs returned memories from April 4 and April 7, but not the handoff created 30 minutes prior (08:54 today).

Observed behavior

  1. recall with type: "handoff" and query "handoff 2026-04-11 EXP-30 llama.cpp verdict suspended" — returned handoffs from April 4, April 7, April 7 (three old ones). The 08:54 handoff was absent.
  2. recall without type filter and query "session handoff 2026-04-11 08:54" — returned an unrelated memory about the Model Control Center.
  3. recall_session showed the handoff existed in the session list (summary only, no content).
  4. check_memory on the handoff ID returned truncated content (cut off after ~100 chars of the body).
  5. Only the raw REST API (GET /api/v1/memories/:id) returned the full handoff content.

Expected behavior

The most recent handoff should be the first result when querying for handoffs, especially within minutes of creation. Handoffs are high-salience (0.95) and explicitly designed to be surfaced by recall_project and type-filtered recall.

Root cause hypotheses

  • Recency scoring too weak for type-filtered queries: The spread activation recency bonus may not be weighting recently-created memories strongly enough relative to older memories with more associations/access counts.
  • FTS ranking dominance: Older handoffs have richer concept overlap from repeated encoding cycles, so FTS scores them higher despite being stale.
  • check_memory content truncation: Separate bug — check_memory should return the full content, not truncate it. This forced a workaround through the REST API.

Impact

This is a session-start blocker. The entire point of create_handoff is continuity between sessions. If the most recent handoff doesn't surface on recall, agents waste time hunting for it (as happened today — ~6 recall attempts before resorting to the raw API).

Reproduction

  1. Create a handoff via create_handoff
  2. Wait for encoding (< 1 min)
  3. recall with type: "handoff" and a query matching the handoff content
  4. Observe that older handoffs rank higher than the one just created

Metadata

Metadata

Assignees

No one assigned

    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