persist: atomic batch append — contiguous block + transactional guard + 10 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 43s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 43s
batch.sx: persist/append-batch commits (type at data) specs as one contiguous block; persist/append-batch-expect checks the stream is still at expected before writing any event, so the batch is all-or-nothing under a concurrent writer (conflict is a value, not a partial write). 162/162. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -42,7 +42,7 @@ read models (feeds, indices, audit logs) update incrementally.
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/persist/conformance.sh` → **152/152** (Phases 1–4 complete + extensions)
|
||||
`bash lib/persist/conformance.sh` → **162/162** (Phases 1–4 complete + extensions)
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -162,11 +162,21 @@ over an in-process disk (the mock-IO harness).
|
||||
`read-window` (by `:at`), `read-by-type`, `read-where`, `count-where`. Pure
|
||||
reads for audit windows / type filters / since-cursors.
|
||||
|
||||
- [x] `batch.sx` — `persist/append-batch` commits a list of `(type at data)`
|
||||
specs as one contiguous block; `persist/append-batch-expect` is transactional
|
||||
(all-or-nothing guarded by optimistic concurrency). For an order + its line
|
||||
items as one commit.
|
||||
|
||||
## Consumers (post-foundation, not in scope here)
|
||||
feed/-log, flow store, mod/audit, search index, acl grants, identity sessions all
|
||||
become `persist` log or kv. Track each migration in that subsystem's plan.
|
||||
|
||||
## Progress log
|
||||
- **Ext: atomic batch append (162/162).** `batch.sx` — `persist/append-batch`
|
||||
commits `(type at data)` specs as one contiguous block (real cons-list, in
|
||||
order); `persist/append-batch-expect` checks the stream is still at expected
|
||||
before writing any event, so the batch is all-or-nothing under a concurrent
|
||||
writer. 10 tests incl. conflict-writes-nothing + durable.
|
||||
- **Ext: read-side query helpers (152/152).** `query.sx` — `read-between` (seq
|
||||
range), `read-since`/`read-window` (by `:at`), `read-by-type`, `read-where`,
|
||||
`count-where`. Pure scans over `persist/read`; for ad-hoc relational queries
|
||||
|
||||
Reference in New Issue
Block a user