docs: RELEASES.md entry for 8.3.1 (full-removal deletes + family-scoped gate)
This commit is contained in:
parent
366f9a91f5
commit
c0c68ac6a6
1 changed files with 38 additions and 1 deletions
39
RELEASES.md
39
RELEASES.md
|
|
@ -10,10 +10,47 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## v8.3.1 — 2026-07-14 (full-removal deletes + family-scoped migration gate)
|
||||||
|
|
||||||
|
Two production-reported fixes in the write/index spine, plus an operator repair path. No API changes;
|
||||||
|
all behavior changes make previously-wrong states honest.
|
||||||
|
|
||||||
|
- **Deleting an entity now removes it completely — no more "ghost" leftovers on disk.** A canonical
|
||||||
|
noun delete removed the metadata (content) leg but left the entity's `vectors.json` and its `<id>/`
|
||||||
|
directory behind. Consequences observed in a production deployment: deleted rows were
|
||||||
|
indistinguishable on disk from damage scars, enumerated counts inflated monotonically with every
|
||||||
|
delete (the leftovers were counted forever), and locator-style reads hit unreadable ghost rows.
|
||||||
|
`remove()`/`removeMany()`/`deleteNoun`/`deleteVerb` now remove **both legs and the entity
|
||||||
|
container**, with a full two-leg before-image rollback inside the transaction. The generation log
|
||||||
|
still holds the delete's before-image, so `asOf()` time-travel reconstructs deleted entities exactly
|
||||||
|
as before — this is live-HEAD hygiene, not a history change. This also fixes **duplicate `readdir`
|
||||||
|
entries for re-created VFS paths** at the root: with no ghost state, a delete always unposts its
|
||||||
|
index rows, so a delete→recreate cycle lists the path exactly once (regression-tested across
|
||||||
|
repeated cycles).
|
||||||
|
|
||||||
|
- **`repairIndex()` prunes ghost/scar directories left by earlier versions.** Stores that deleted
|
||||||
|
entities under ≤8.3.0 may hold orphaned entity directories (a vector-only leg, or an empty dir).
|
||||||
|
`brain.repairIndex()` now sweeps them: it removes only containers with **no metadata content leg**
|
||||||
|
(never a directory that still holds content), logs every removal, and recomputes type/subtype
|
||||||
|
counts afterward so totals stop counting ghosts.
|
||||||
|
|
||||||
|
- **Reads no longer hang behind an unrelated index migration (family-scoped gate).** During a native
|
||||||
|
provider's one-time background migration, *every* read — including plain `get()`, VFS
|
||||||
|
`readdir`/`readFile`, and metadata-only `find({ where })` — blocked on the whole-brain migration
|
||||||
|
lock until timeout, even when the migrating index was irrelevant to the read. The gate is now
|
||||||
|
scoped to the index families a read actually consults: canonical reads (`get`, `batchGet`, VFS
|
||||||
|
content) never wait; a `find` waits only on the families its query shape needs (vector for
|
||||||
|
semantic, metadata for `where`/type, graph for `connected`); graph traversals wait only on the
|
||||||
|
graph family. Writes and unclassified operations keep the conservative whole-brain wait. A read
|
||||||
|
that *does* need the migrating family still blocks (bounded by `migrationWaitTimeoutMs`) and
|
||||||
|
surfaces the retryable `MigrationInProgressError` — never a partial result.
|
||||||
|
|
||||||
|
No breaking API change. Each fix ships with regression tests.
|
||||||
|
|
||||||
## v8.3.0 — 2026-07-13 (faster index heals + the cross-layer integrity contract)
|
## v8.3.0 — 2026-07-13 (faster index heals + the cross-layer integrity contract)
|
||||||
|
|
||||||
Three additive changes. The first is an immediate, standalone performance win; the other two are the
|
Three additive changes. The first is an immediate, standalone performance win; the other two are the
|
||||||
brainy side of the write/index-spine integrity contract (ADR-004), inert until a native accelerator
|
brainy side of the write/index-spine integrity contract, inert until a native accelerator
|
||||||
that implements the matching hooks is present — so this release changes nothing for a JS-only brain
|
that implements the matching hooks is present — so this release changes nothing for a JS-only brain
|
||||||
beyond the speedup.
|
beyond the speedup.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue