Repository navigation
v2.15.0 — Memories can finally mature
Correctness release, and the most consequential so far for anyone with a brain more than a few weeks old. Two defects meant the system reported health it did not have while quietly failing to do its central job.
⚠️ Your purity score will drop ~23 points. That is the fix working.
| metric | before | after | after optional alias cleanup |
|---|---|---|---|
| connectivity | 1.0 (saturated) | 0.085 | 0.085 |
| diversity | 0.256 | 0.256 | 0.948 |
| purity | — | −23 | +14 |
Connectivity counted alias edges — dedup pointers with weight 0.0 carrying no meaning. On a real brain they were 89.4% of all synapses (137,871 of 154,252), so the metric measured plumbing, not knowledge. Stored purity/grade from before this release is not comparable with after — treat the upgrade as a new baseline.
Memories never matured
Fiber.create mints a dash-form uuid4; storage folds ids to underscore form; the maturation table stored whichever the caller passed. The rows never joined.
Of 1,920 live maturation rows, 1,277 were dash-form — and not one had ever been rehearsed or promoted. Every rehearsed row (77) and every semantic row (9) was underscore-form. get_maturation returned None, rehearse() never ran, the EPISODIC→SEMANTIC spacing gate could never be met, and pattern extraction was blind to the same 1,277 fibers. A blanket except Exception had logged the resulting collisions as "Skipping maturation save" for months.
Lookups now resolve through the record id — canonical in both eras — so legacy rows heal on their next write, no migration required. Expect the first consolidation after upgrading to do noticeably more work.
Decay compounded on itself
Nothing recorded that a synapse had been decayed, so every run re-measured from created_at and re-multiplied an already-decayed weight — quadratic in run count. Ten daily runs applied ~55 days of decay, not 10.
Decay now bills only the interval since _last_decayed. The exponents telescope, so decay per day of wall-clock time matches the documented Ebbinghaus curve. Weights fade slower than in previous builds — the compounding was the bug, not the cure. Rows with nothing to bill are skipped, removing ~57k pointless rewrites per run.
Also fixed
- Dedup re-inserted the same alias edge every consolidation — 2,375 pairs had produced 144,565 rows, growing ~40k/day. Deterministic per-pair ids make it idempotent.
- Connectivity contradicted itself across
smem health,smem_stats, the maintenance handler and topology analysis. One shared definition now. - Knowledge surface reported "not generated" depending on your shell's directory —
$HOMEwas classified as a project root because it holds the global.surrealmemory/. - Warning texts collided units — "connectivity 1.0 (target 3-8)" pairs a 0-1 score with a raw ratio, reading as "far below" when the raw value was 13.5, far above.
LOW_DIVERSITYno longer fires on brains using many synapse types. The live brain uses 17; the warning claiming "1 of 8" was reading an empty scope.
Full changelog: v2.14.0...v2.15.0