docs: RELEASES.md entry for 8.2.0 (temporal VFS)
This commit is contained in:
parent
a3467e1f9b
commit
98ceadca7c
1 changed files with 33 additions and 0 deletions
33
RELEASES.md
33
RELEASES.md
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue