docs: RELEASES.md entry for 8.2.0 (temporal VFS)

This commit is contained in:
David Snelling 2026-07-10 16:43:48 -07:00
parent a3467e1f9b
commit 98ceadca7c

View file

@ -10,6 +10,39 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so
---
## v8.2.0 — 2026-07-10 (temporal VFS — file content joins the immutability model)
Time travel now covers Virtual Filesystem **content**. Previously the temporal model had a hole
exactly where files were concerned: every entity write was an immutable generation, but the
content *bytes* lived under an eager reference-count GC — deleting a file could physically destroy
bytes that in-window history still referenced, while overwriting never released the old content at
all (an unbounded silent leak that only *accidentally* preserved history). A production consumer's
recovery from a bad deploy succeeded only because a stale field happened to hold the good value —
luck, not a guarantee. Both directions are now fixed by making blob reclamation a **history**
decision instead of a **liveness** decision:
- **Content blobs are retention-protected.** Each blob tracks live references AND history
references (one per persisted generation record that carries its hash). Deleting/overwriting a
file drops only the live reference; bytes are physically reclaimed in exactly one place —
history compaction — once no live reference and no retained generation references the hash.
Pinned views are exempt automatically (compaction already respects pins). Crash ordering is
over-count-only (never under-count), so a crash can leak until the built-in scrub recounts, but
can never reclaim bytes history still needs. Existing stores get a one-time, marker-gated
backfill on open; cross-file content dedup is handled exactly.
- **`vfs.readFile(path, { asOf })`** — the file's exact bytes as of a generation or `Date`,
guaranteed present within the retention window.
- **`vfs.history(path)`** — the file's versions (`{ generation, timestamp, hash, size,
mimeType? }`, ascending). Restore = read the old bytes `asOf` and write them back (a new write;
history is never rewritten).
- **Overwrites now refresh the file entity's `data`/embedding text** — previously semantic search
and the `data` field served the FIRST version's text forever.
Lifecycle note: deleting a file no longer frees its bytes immediately — old content lives until
compaction reclaims its generations, under the same `retention` budget as all Model-B history
(`retention: 'all'` keeps every version forever). Guide: the new "Time travel for files" section in
`docs/guides/snapshots-and-time-travel.md`. Native accelerator: unaffected (canonical write path
only) — no version pairing required.
## v8.1.0 — 2026-07-10 (`brain.onChange` — the in-process change feed)
New public API: subscribe to every committed mutation with