v0.8.2 — non-blocking HNSW index builds
Third fork release. Makes HNSW index builds non-blocking for readers.
Non-blocking HNSW index builds
Building/rebuilding an HNSW index (::hnsw create) used to hold the base relation's exclusive write lock for the entire build, so every concurrent read blocked until it finished — in production, 10–20+ minutes (76 min for a 151K × 1536 index). The stall was cozo's per-relation lock, not RocksDB.
The build is now done off-lock on RocksDB: the heavy graph construction runs under a read-only snapshot with no relation lock held, and the lock is taken only briefly to set up and to publish. The finished graph is bulk-published via SstFileWriter/IngestExternalFile, ingested before its metadata is committed (so a reader can never observe an index before its keys exist); rows mutated during the build are folded in by a short reconcile pass under a brief final lock.
Measured (release): a 40,000-vector build takes ~5.6 s, during which 90,507 concurrent reads of the same relation completed, the slowest in 0.8 ms — previously those reads would have queued behind the whole ~5.6 s build.
Default-on and transparent (same ::hnsw create). RocksDB only; other backends keep the in-transaction build unchanged via the new Storage::ingest_sorted fallback. No mnestic-rocks change (stays 0.1.8).
All 169 inherited lib tests + integration/feature suites pass; cargo clippy -p mnestic -- -D warnings clean. See CHANGELOG-FORK.md for full detail.