Repository navigation
v1.19.4
🧠 Memory & Learning hardening — a brain you can trust
v1.19.4 is a deep reliability pass on Termpolis's persistent shared memory, driven by a 12-dimension adversarial audit of the memory + learning subsystem. 55 confirmed defects fixed, every one test-first (the 35 primary findings + the anchor bug, plus 19 verified from the audit's second-wave backlog) — the difference between "memory that mostly works" and "memory that never silently loses, corrupts, mis-ranks, or misreports what you told it."
Shared memory is the feature — it lets a new session (or a different agent) pick up without re-explaining context. That only holds if the brain is honest. This release makes it so.
The anchor fix
- Memories are stamped with real conversation time, not ingest time. Re-ingesting an old transcript no longer makes it rank as "most recent" — list and search now order by when the conversation actually happened.
It never silently loses data
- Writes that don't reach disk are reported as such (no more "success" on a swallowed IO error), and are retried rather than masked by the dedup guard.
- Init failure degrades to a local writable store instead of silently dropping every write for the whole session; a
degradedstatus surfaces it. - Crash-safe append log: high-value writes are fsync'd, a torn final line is repaired on launch (so it can't swallow the next good write), and corrupt lines are counted + surfaced instead of vanishing.
- Atomic whole-file rewrites (encryption toggle, sync-off snapshot, clear) — an interrupted rewrite can no longer truncate your shard.
- Oversized writes are flagged, not silently truncated; whitespace-significant content (Python, YAML, diffs) is no longer false-deduped.
It never silently corrupts across devices
- A bad clock or one corrupt line can't wipe the brain everywhere — the clear epoch is clamped and backed by a device-local durable floor.
- Deletes and clears survive losing the shard that carried them, are skew-proof (identity-based), and a deleted memory can't resurface through its content-hash twin.
- The encryption salt is never overwritten on a transient read hiccup (which used to lock you out of your own encrypted memory), and is write-once so two devices with the same passphrase derive the same key.
- A restored backup / cloned VM gets a fresh device identity, preserving the single-writer invariant the sync model relies on.
It never silently mis-ranks or misleads
- Superseded decisions stop resurfacing — memory_search and the session primer now honor the
supersedeslinks the agent creates. - The primer is honest about ordering and dates (relative-age markers; no false "most relevant first").
- Project scoping is precise — two repos named
apino longer cross-contaminate; Gemini memories are finally project-scoped; curated writes are scoped to your working directory by default. - The semantic embedder self-heals from a transient hiccup instead of latching into keyword-only mode for the session, validates its output dimension, and back-fills vectors captured during an outage.
- memory_anticipate / memory_pool draw from the real lesson set instead of a keyhole onto the newest rows, so the fleet stops re-deriving solutions it already found.
Learning stays sound
The offline recall benchmark (real bge model + IR metrics) holds with zero regression, and no learning mechanism ships on that isn't measurably net-positive.
Also in this release
- "🧠 Loaded N memories" launch banner for Codex/Gemini/Qwen.
- Memory-brain embedding runs off the PTY main thread (typing-lag fix).
Quality
Every fix ships with a failing-test-first regression guard. Full suite green; lint + build + typecheck clean; coverage gate green across Windows, macOS, and Linux.
Full Changelog: v1.19.3...v1.19.4