docs: RELEASES.md entry for 8.2.2 (transaction timeout rollback)
This commit is contained in:
parent
508a8e363e
commit
ed97006eb9
1 changed files with 26 additions and 0 deletions
26
RELEASES.md
26
RELEASES.md
|
|
@ -10,6 +10,32 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## v8.2.2 — 2026-07-11 (P0: a timed-out transaction now rolls back — no torn state)
|
||||||
|
|
||||||
|
Data-integrity fix. A transaction that exceeded its time budget **mid-flight** (e.g. a bulk
|
||||||
|
`transact()` on slower hardware crossing the 30s ceiling) threw a timeout error WITHOUT rolling
|
||||||
|
back the operations it had already applied. The budget check sat outside the per-operation
|
||||||
|
rollback path, so only per-operation *failures* rolled back — a timeout stranded the partial
|
||||||
|
writes in canonical storage while the generation was never stamped, leaving torn, generation-less
|
||||||
|
state. This was caught by a downstream migration that crossed the ceiling on a large batch.
|
||||||
|
|
||||||
|
`Transaction.execute()` now has a **single rollback point**: any error that escapes the operation
|
||||||
|
loop — an operation failure OR a mid-flight timeout — rolls back every applied operation in
|
||||||
|
reverse order, then surfaces the original error (a rollback failure supersedes it, loudly, as
|
||||||
|
before). This restores the invariant the generation-store commit path already depended on: a throw
|
||||||
|
from execute means the applied operations were undone byte-identically, and the aborted
|
||||||
|
transaction leaves `generation()` unchanged and storage byte-identical to its pre-transaction
|
||||||
|
state.
|
||||||
|
|
||||||
|
No API change. Regression pins the reported requirement — after a mid-flight timeout,
|
||||||
|
storage is byte-identical and the transaction ends in the `rolled_back` terminal state
|
||||||
|
(`tests/unit/transaction/timeout-rollback.test.ts`), plus the operation-failure and
|
||||||
|
rollback-failure paths through the same single rollback point.
|
||||||
|
|
||||||
|
**Note on the 30s ceiling itself** (configurable/scaled timeout, batched embedding precompute,
|
||||||
|
timeout telemetry) — that ergonomics work is tracked separately; this release fixes only the
|
||||||
|
correctness bug (a timeout must never leave partial state), independent of where the ceiling sits.
|
||||||
|
|
||||||
## v8.2.1 — 2026-07-11 (transact forward references work on the native accelerator)
|
## v8.2.1 — 2026-07-11 (transact forward references work on the native accelerator)
|
||||||
|
|
||||||
Parity fix. `transact()` has always promised atomic forward references — `add` an entity and
|
Parity fix. `transact()` has always promised atomic forward references — `add` an entity and
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue