June 11, 2026
Retrieval & Decay Rewrites, ToolResult Contract Sweep
The retrieval pipeline was replaced with a full-KNN vector lane, per-lane min-max normalized scoring, and a relative floor at 50% of the top score
The retrieval pipeline was replaced with a full-KNN vector lane, per-lane min-max normalized scoring, and a relative floor at 50% of the top score. The consolidation tree is collapsed at read time so leaf, super, and era hits compete in one pool. The radius apparatus, drift machinery, and cosine floor were deleted entirely. Recall telemetry now writes the redesigned memory_recall_log columns.
The decay engine was rewritten to absolute exponential decay anchored on last_relevant_at, with per-level half-lives and an idempotent cycle. Hard-deletion windows remove tombstoned episodes older than 30 days and weak never-consolidated leaves, with full FTS/vector cleanup. A fossil janitor tombstones stranded non-user leaf episodes older than 7 days. Reads are now pure: the episodic reconsolidation chain, activation bumps, and data_graph touch ratchet were deleted.
A schema foundation for the episodic-memory redesign added level, last_relevant_at, tombstoned_at, and facts_extracted_at to episodes; valid_from and valid_to plus a live-facts partial index to data_graph; and swapped the radius-tuning columns in memory_recall_log for floor_cut_count and final_rrf_count. The backfill seeds new columns deterministically and idempotently, and the check-constraint rebuild now copies by explicit column names to survive legacy tables.
Worker gate timestamps now survive restarts: last_user_message_at is persisted durably through a shared DurableTimestamp (MemoryStore fast path plus data_graph system row) and rehydrated on construction. The worker’s last_fired clock was refactored onto the same class. Corrupt stored values are logged and treated as unset, preventing gate starvation.
A ToolResult contract compliance sweep touched multiple abilities. Code evaluation now returns structured {stdout, stderr, exit_code, duration_ms} with kebab error codes and a shared 100 KB truncate. Vision, weather, and save_pattern gained proper error codes, missing-params pre-gates, and success metadata (degraded OCR fallback, stale cache marker, count-echo bodies). The review twins were merged onto a shared ReviewWindowAbility base with loud query-failed handling. Compactors now surface rows_compacted and trail_chars in success meta, and the thinking result contract was pinned with verbatim prose envelope and NOTHING sentinel tests.
UI and test housekeeping included bulk Allow/Ask/Deny buttons in the Policies header, removal of the orphaned Subagent policy tab, consolidation of 35 tool_result test suites into a shared harness (net -438 lines, zero test changes), and porting of five nightly endpoint/log contracts to repo feature tests. A readme badge fix and architecture/FAQ docs updates rounded out the day.
-
Retrieval now uses full-KNN vector lane with min-max normalized scoring and a relative floor at 50% of top score; radius apparatus deleted.
-
Episodic decay is absolute exponential anchored on last_relevant_at, with hard-deletion for tombstoned >30d and weak leaves, and pure reads (no activation bumps).
-
Schema backfill seeds new episodic columns (level, last_relevant_at, tombstoned_at) and bi-temporal data_graph columns (valid_from/valid_to) idempotently.
-
Worker gate last_user_message_at persisted durably via DurableTimestamp, surviving restarts and preventing gate starvation.
-
Code evaluation now returns structured {stdout, stderr, exit_code, duration_ms} with kebab error codes; vision, weather, and save_pattern all adopt proper ToolResult error codes and pre-gates.
-
35 tool_result test suites consolidated into a shared harness, net -438 lines with zero test changes; nightly endpoint/log contracts ported to repo feature tests.