docs: RELEASES.md entry for 8.4.0 (generation fact log + family stamp)
This commit is contained in:
parent
2888ae6b40
commit
4a60b43983
1 changed files with 35 additions and 0 deletions
35
RELEASES.md
35
RELEASES.md
|
|
@ -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)
|
||||
|
||||
One production-reported fix plus a repair path, completing the delete/move hygiene arc (8.3.1 fixed
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue