docs: RELEASES.md entry for 8.4.0 (generation fact log + family stamp)

This commit is contained in:
David Snelling 2026-07-15 11:18:27 -07:00
parent 2888ae6b40
commit 4a60b43983

View file

@ -10,6 +10,41 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so
--- ---
## v8.4.0 — 2026-07-15 (the generation fact log — a sequential, self-verifying commit stream)
A minor release, fully backward-compatible (all additions; no behavior change for existing APIs).
This is infrastructure: it changes nothing about how you query today, and lays the substrate that
makes index heals and incremental catch-up sequential-read problems instead of directory walks.
- **Every committed write now also appends a "fact" — an after-image commit record.** Alongside the
existing before-image history, each committed generation (single-op and `transact()` alike) appends
what each touched entity/relationship *became* — or a body-less tombstone for a removal — to an
append-only, checksummed segment log under `_generations/facts/`. Crash-safe by construction: a
torn tail is detected and ignored; on open the log is reconciled to committed truth, so an absent
generation always means "never committed." `transact()` facts are durable when `transact()`
returns; single-op facts ride the same group-commit flush as their history.
- **New: `brain.scanFacts()`** — stream committed facts in commit order, in batches, with heal-grade
telemetry (total scope up front; per-batch generation range, byte size, and segment; a summary
cross-check at the end; loud abort on any gap — never a silent skip). **`brain.factSegmentPaths()`**
hands zero-copy consumers the immutable sealed segment files directly. New exported types:
`CommitFact`, `FactOp`, `FactScanBatch`, `FactScanHandle`. Facts accumulate from the first write
after upgrading — pre-existing history is not retroactively converted (enumeration remains the
fallback for old data).
- **New: the entity-tree family stamp.** At every flush/close, brainy stamps which committed
generation the canonical entity files reflect plus the rollup invariants (entity/relationship
counts) that verify the tree whole. At open, coherence is a comparison — a genuine divergence is
loud and names the failing invariant; `repairIndex()` recounts from canonical and re-stamps. New
exports: `readFamilyStamp`, `verifyFamilyStamp`, `ENTITY_TREE_STAMP_PATH`, `FamilyStamp` types.
- **Storage adapters** gain optional binary raw-byte primitives (`appendRawBytes`, `readRawBytes`,
`writeRawBytes`, `rawByteSize`) — feature-detected; the filesystem and memory adapters implement
them; an adapter without them simply hosts no fact log. The fact-log namespace is registered as a
protected family: no sweeper or GC can delete under it.
No API breaks. 24 new tests; the full commit-path regression suite is green.
## v8.3.3 — 2026-07-15 (rename moves the containment edge — no ghost in the old directory) ## v8.3.3 — 2026-07-15 (rename moves the containment edge — no ghost in the old directory)
One production-reported fix plus a repair path, completing the delete/move hygiene arc (8.3.1 fixed One production-reported fix plus a repair path, completing the delete/move hygiene arc (8.3.1 fixed