Skip to content

backend: v2.28.0

Choose a tag to compare

@caura-deploy-bot caura-deploy-bot released this 13 Aug 19:42
10d5f80

2.28.0 (2026-08-13)

Features

  • bench: first-stage blend A/B on LoCoMo, and share the harness plumbing (#714) (f4280d7)
  • bench: LoCoMo rerank A/B harness (#712) (9369e6e)
  • broker: gate the four memory operations the broker already calls (#753) (c974bb4)
  • embeddings: nightly sweep that re-embeds NULL-embedding rows (#767) (780e652)
  • memory: conflict-record write machinery — storage + resolver (A55 1d) (#764) (14f1b2b)
  • memory: contradiction classification logic — L1/L2/L3 (A55 1d) (#759) (9b9d3ae)
  • memory: contradiction engine seam + arch flag (A55 Phase 1) (#754) (541cc05)
  • memory: unified contradiction-model schema + read serialization (A55) (#752) (e601021)
  • memory: wire conflict-record write into the detector, flag-gated (A55 1d) (#766) (fab52e4)
  • observability: make the unembedded-row backlog measurable (#776) (af9e2fb)
  • search: index memories.title, at the same weight as content (#731) (621afea)
  • write: honour per-item write_mode on the bulk path (#710) (6ab8f2d)

Bug Fixes

  • capture: mirror the shared pipeline's diagnostics, effort and decline test (#755) (5c0f7f6)
  • crystallizer: match the /lifecycle-candidates contract; drop inline remediation (#765) (154350b)
  • crystallizer: read the embedding-coverage keys the endpoint returns (#763) (7219d80)
  • embedding: chunk bulk embeds to the backend's batch cap, and report bulk-only outages (#721) (d812a9d)
  • embedding: key degraded-provider stats per backend, not per process (#726) (048e2e1)
  • embedding: let bulk callers pass their budget so a slow provider is attributable (#724) (052d700)
  • embedding: set per-phase httpx timeouts, matching the LLM client (#761) (ef8be4b)
  • events: declare the embed-backfill subscription in the manifest (#772) (c5e0543)
  • memory: null the vector when a content-change re-embed fails (#775) (4c87f85)
  • memory: unshadow HTTPException so pipeline failures surface as 500 (#760) (077f30a)
  • reports: anchor working-on lane keywords to word starts (#773) (e4a695e)
  • rerank: chunk the remote candidate pool so the sidecar's cap can't reject it (#709) (c987649)
  • rerank: distinguish permanent config faults from transient failures (#708) (ce3fc51)
  • search: declare the scored-search wire contract once, in common/ (#727) (6483a39)
  • search: deliver every scoring knob to the SQL on both search paths (#723) (9590c4c)
  • search: let SEARCH_OVERFETCH_FACTOR reach the SQL LIMIT (#725) (f94572a)
  • search: move 034's backfill out of the startup path (#732) (9fe4557)
  • search: put fts_score on the cosine scale (#687) (#722) (4f0eb2b)
  • search: reserve candidate and result slots for FTS-only rows (#687) (#700) (4ae972b)
  • search: settle graph_max_hops at 3 across every surface (#730) (0f8d4c8)
  • search: ship the 034 backfill inside the image (#734) (e78cd29)

Performance

  • contradiction: batch the Path C entity-aware per-candidate LLM judge (A61) (#771) (0e4c9f8)
  • contradiction: batch the semantic per-candidate LLM judge (A61) (#770) (86c24c8)
  • db: index the FK columns that reference memories.id / entities.id (#751) (160f271)

Dependencies

  • actions: bump actions/setup-python from 5 to 7 (#640) (0dee432)
  • actions: bump googleapis/release-please-action from 4.4.1 to 5.0.0 (#639) (93a5bbb)
  • actions: bump the actions group across 1 directory with 3 updates (#638) (408f23b)
  • bump the uv-minor-patch group across 4 directories with 11 updates (#747) (a72a5d3)
  • plugin: bump @types/node from 26.1.1 to 26.2.0 in /plugin in the npm-minor-patch group across 1 directory (#688) (a40ca4a)

Documentation

  • write: document embedding_pending and the strong-mode opt-out (#706) (187b5b5)

Code Refactoring

  • search: derive SearchProfileUpdate from the knob table (#736) (a5a55f2)
  • search: one knob table instead of four registration points (#728) (ae56d08)
  • search: one resolver for both search paths, and A47 reaches legacy (#729) (724f4e8)