From 6b8b9cba1862590ab6dbace7e7a6d18ee10bf48f Mon Sep 17 00:00:00 2001 From: David Snelling Date: Wed, 8 Jul 2026 15:49:19 -0700 Subject: [PATCH] docs: RELEASES.md entry for 8.0.17 (canonical count recovery + dead-machinery sweep) --- RELEASES.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/RELEASES.md b/RELEASES.md index 3834d116..2a24e17d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -10,6 +10,29 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so --- +## v8.0.17 — 2026-07-08 (count recovery scans the real layout · ~1,100 lines of dead 7.x machinery removed) + +A cleanup of the vestigial 7.x "hnsw sharding" machinery that turned up two real fixes. + +**1 — Count recovery now scans the layout the database actually uses.** When `counts.json` is +lost or corrupted (container restarts, partial copies), the recovery scan rebuilt the entity/ +relationship counters by counting files in `entities/*/hnsw/` — directories the 8.0 write path +never populates — so an established store recovered to **zero counts** on real data: wrong +`getNounCount()`/stats, a "New installation"-style boot log, and a mis-sized rebuild-strategy +decision at open. The scan now counts the canonical `entities////` tree. +Regression-tested: delete `counts.json` from a populated store → reopen → exact counts. + +**2 — A latent init-time deadlock removed.** The recovery scan's type-distribution sampler called +a guarded accessor (`getNounMetadata` → `ensureInitialized`) from **inside** `init()`, which +re-enters `init()` and hangs the open. It was unreachable before only because the old scan never +found anything to sample; the fix reads the sampled metadata files directly. + +**3 — The dead machinery itself is gone (−1,138 lines).** Twenty-three methods with zero callers: +the 7.x hnsw-layout entity/edge CRUD, the sharding-depth prober + depth-migration engine, and an +orphaned streaming paginator. Verified by reachability analysis before deletion; no public API +touched; the full suite is green. New stores no longer carry the always-empty legacy directories' +scan cost, and the boot log keeps the truthful new-vs-established wording from v8.0.13. + ## v8.0.16 — 2026-07-08 (concurrency fast-follow: atomic `ifAbsent`/`upsert` + exact blob reference counts) Closes the two remaining check-then-act races found in the sweep that followed v8.0.15's CAS fix