search:
- rerank=True (default) keeps today's behavior; rerank=False skips the
local cross-encoder, graph rerank and the coding facts' BM25 rerank for
that call (carried on ReadRequest, so concurrent calls are independent).
- MMR now runs only when the caller's limit is below MMR_MAX_TOP_K (20).
It is O(k^2 * pool) Jaccard and made large result pages slow.
- scene="all" searches chat, working and coding concurrently with one
shared embedding and fuses them by Reciprocal Rank Fusion (k=60) over
each lane's own rank, so no lane is buried by its score scale. Items
carry scene, kind, memory_id, content, fused score, lane score/rank,
source and times. A failed or disabled lane is reported in "errors".
list_memories:
- scene="coding"|"working" honour include_sources/exclude_sources with
the filtered total.
- scene="all" lists the three scenes newest first with limit/offset over
the merged order, per-scene totals and the same unified item fields.
update/delete:
- kind/variant disambiguate like get(); an experience update replaces
its solution (task= also replaces the task and its search vectors), a
fact update replaces the statement; delete removes experiences and
facts with their vectors. Chat calls are unchanged.
- The HTTP server maps an ambiguous id to 409 and a bad namespace to 400
instead of 500, passes kind/variant through, and strips the query
string from PUT/DELETE paths, which leaked it into the memory id.
memory_stats now reads productivity times (written as naive UTC) as UTC.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>