Skip to content

v2.14.0 — bi-temporal memory + the concurrency/capacity hardening arc

Choose a tag to compare

@tcconnally tcconnally released this 02 Jul 17:08
a56e9fd

Highlights

Bi-temporal memory (schema v9, 55 tools). Facts now carry a queryable valid-time axis (SQL:2011 APPLICATION_TIME) orthogonal to transaction time: mimir_valid_at, mimir_bitemporal, valid-period filters on recall, valid-time on remember/correct/supersede. Plus GraphRAG community detection (mimir_communities / mimir_community_summary / mimir_global_recall, schema v8), mimir_dream sleep-time consolidation, and recall-first context injection.

The concurrency/capacity hardening arc (#371#405). A systematic sweep found and fixed seven instances of one defect family — read-decide-write on the bare pooled connection, missing monotonic timestamp bumps, and nested pool draws — every fix shipped with a regression test proven failing against pre-fix code:

  • Pool-exhaustion collapse (#397, #387): recall/insert/embed/link each held two pooled connections; at 2× pool oversubscription the server measured 174 req/s with 30-second stalls and failed writes, and wedged at 4×. Now one connection per request: ~4,200 req/s, zero errors on the same load. New MIMIR_POOL_TIMEOUT_MS knob.
  • Temporal audit-trail integrity (#371#381): all four entity_history writers now take the IMMEDIATE writer lock before precondition reads and bump timestamps monotonically — no more inverted/zero-width history windows, double snapshots, or backwards recorded_at under concurrency.
  • Link-graph durability (#382): re-remembering a linked entity no longer erases its edges — remember unions caller links with stored links under the writer lock.
  • Efficacy tracking correctness (#385, #391): concurrent mimir_follow calls no longer lose increments, and a follow stamps exactly one resolved row instead of every workspace's row of that key.
  • Maintenance safety (#388, #399, #400): cohere's transaction is drop-safe (an error can no longer permanently poison a pool slot); decay_tick skips no-op writes (was 412MB of WAL per tick on a 45MB DB at 100k entities).
  • mimir_history pagination (#403): limit (default 20) + offset + total — no more multi-MB tool responses from hot keys.
  • New concurrency CI gate: the pool load test at 2× oversubscription plus four concurrency hammer tests now run on every PR.

Also since v2.13.0: rekey-aad guarded against concurrent rewrites (#386), grpc build lane + error sanitization (#359), migration race fixes (#357/#358), RUSTSEC-2026-0187 cleared (#362).

Full details in the CHANGELOG.

🤖 Generated with Claude Code