feat: committedGeneration capability + pinned durability/stability contracts

- storage.committedGeneration(): the committed watermark exposed on the
  fact-scan capability, so a provider compares its stamp's
  sourceGeneration against the store's truth without parsing the
  private manifest format (the capability source now carries both the
  live fact log and the committed closure).
- Pinned contract tests: fsync-before-ack (transact passes today; the
  single-op path is pinned via it.fails as the documented target —
  group commit must become LATENCY batching, ack waiting on the shared
  fsync, never durability skipping; the pin flips red when that lands
  so there is no cliff to discover) and scan-stability-under-rotation
  (a scan snapshot yields exactly its facts — no gaps, duplicates, or
  bleed-in — while segments rotate beneath it; the reclaim-during-scan
  variant lands with fact compaction, which does not exist yet).
- FactLog accepts a rotateBytes option so tests exercise real rotation.
This commit is contained in:
David Snelling 2026-07-15 12:44:52 -07:00
parent e4f37cd32b
commit d1ecee10f0
6 changed files with 177 additions and 11 deletions

View file

@ -24,6 +24,14 @@ Small additive follow-up to 8.4.0, from the native accelerator's first consumpti
providers run literally the same verification function, never a synchronized copy.
- **Rollup stamp invariants accept strings** (`number | string`) — content fingerprints such as a
per-tree SHA-256 are valid invariant values; a type mismatch reads as incoherence, never a pass.
- **`storage.committedGeneration()`** — the committed watermark as a capability, so a provider
compares its stamp's `sourceGeneration` against the store's truth without parsing the private
manifest format.
- **Two durability/stability contracts pinned in the suite:** fsync-before-ack (holds for
`transact()` today; the single-op path is pinned as the documented future target — group commit
becomes latency batching, never durability skipping) and scan-stability-under-rotation (a scan
snapshot yields exactly its facts — no gaps, duplicates, or bleed-in — while segments rotate
beneath it).
No behavior change for applications; all additions.