feat: scaled transact budgets + labeled timeout diagnostics + envelope docs
- The transact apply budget scales with the batch — max(30s, opCount x 2s) — or is exactly the caller's new TransactOptions.timeoutMs. A flat 30s cap silently limited honest bulk work to ~15 operations on network-attached storage (~2s/op measured in a production import) while looking generous for small batches. Internal batch paths (removeMany chunks) get the same scaling via the shared transactTimeoutBudget helper. - TransactionTimeoutError now reports the operation it stopped at as i/N with the operation's name, elapsed vs budgeted time, and states the batch rolled back atomically and is retryable; context carries the fields programmatically. - The transact operational envelope is documented (optimistic-concurrency guide): budget math, chunking with ifAbsent idempotency, when to reach for addMany vs transact, and the precompute pattern (embedBatch + per-op vector) that keeps inference out of the commit path. - Embedding claims made honest per an end-to-end probe of the built dist: batch and single embedding paths produce bit-identical vectors and a vector-supplied add is fully searchable, but batch throughput on the default WASM engine measures comparable to sequential (~160ms/text) — the 5-10x speedup claim in the addMany JSDoc is replaced with the measured reality and the actual win (inference outside the budgeted write path).
This commit is contained in:
parent
e0f6e7722f
commit
6ef9fcb7a2
7 changed files with 175 additions and 15 deletions
22
RELEASES.md
22
RELEASES.md
|
|
@ -10,6 +10,28 @@ Full auto-generated changelog: `CHANGELOG.md` · Releases: https://github.com/so
|
|||
|
||||
---
|
||||
|
||||
## v8.7.0 — 2026-07-17 (bulk-transact ergonomics: scaled budgets + timeout telemetry)
|
||||
|
||||
The bulk-import ergonomics release, from a consumer's measured production incident (a serial
|
||||
import on network-attached storage at ~2 s/op met a flat 30 s transaction budget):
|
||||
|
||||
- **The transact apply budget now scales with the batch** — `max(30 s, opCount × 2 s)` — or
|
||||
is exactly what you pass as the new `TransactOptions.timeoutMs`. A flat 30 s cap silently
|
||||
limited honest bulk work to ~15 operations on slow disks while looking generous for small
|
||||
batches. Internal batch paths (e.g. `removeMany` chunks) get the same scaling.
|
||||
- **`TransactionTimeoutError` is a diagnosis, not just a failure**: it now reports the
|
||||
operation it stopped at as `i/N` with the operation's name, elapsed vs budgeted time, and
|
||||
states the batch rolled back atomically and is retryable. Its `context` carries the same
|
||||
fields programmatically.
|
||||
- **The transact envelope is documented** — batch sizing, budget math, chunking with
|
||||
`ifAbsent` idempotency, and the precompute pattern (`embedBatch` + per-op `vector`) that
|
||||
keeps model inference out of the commit path. Guide: `docs/guides/optimistic-concurrency.md`.
|
||||
- Note: `brain.embed()` / `brain.embedBatch()` (the precompute APIs) already ship — public,
|
||||
with native-provider passthrough, verified end-to-end (batch and single paths produce
|
||||
bit-identical vectors; a vector-supplied `add` is fully searchable). Honest measurement:
|
||||
on the default WASM engine, batch throughput ≈ sequential (~160 ms/text) — the precompute
|
||||
win is keeping inference out of the budgeted commit path, not raw embedding speed.
|
||||
|
||||
## v8.6.0 — 2026-07-17 (brain.auditGraph — the graph-truth verification instrument)
|
||||
|
||||
A minor release adding one new public API, from the fleet's graph-trust program: a read-only
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue