feat: define deterministic partial batch semantics - #83
Open
greatest0fallt1me wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Idempotency-Keyand persist successful item outcomes for safe retries.Contract
The endpoint is explicitly
atomicity: partial: each item owns its provider and local transition, so a later failure does not roll back an earlier success. Validation still rejects malformed batches and duplicate stream IDs before any provider work. Valid items execute in request order, and every item error includes the existing machine-readable API code plus status.An idempotency key binds retries to the normalized update list. A replay returns successful item outcomes from the operation record and only attempts items that previously failed. Reusing a key with a different order, action, stream, or amount returns
409 CONFLICT.The repository uses an in-memory store, so the operation record is process-local. The documentation calls out the shared persistence and provider reconciliation requirements for a production deployment.
Validation
npm test— 164 passing, 0 failingnode --check src/services/streamService.jsnode --check src/store/index.jsnode --check test/batchSemantics.test.jsgit diff --checkRelated issue
Closes #72