Repository navigation
feat(projections): add transactional PostgreSQL projections - #40
Merged
Merged
Conversation
Owner
Author
|
Final delivery audit for signed head
The PR is ready for owner review/merge. Opening and validating this PR does not authorize merge or crate publication. Publication remains separately approval-gated. |
Merged
jwilger
added a commit
that referenced
this pull request
Sep 10, 2026
## 🤖 New release * `eventcore-macros`: 2.0.1 -> 2.1.0 * `eventcore-types`: 2.0.1 -> 2.1.0 (✓ API compatible changes) * `eventcore-postgres`: 2.0.1 -> 2.1.0 (✓ API compatible changes) * `eventcore-sqlite`: 2.0.1 -> 2.1.0 * `eventcore`: 2.0.1 -> 2.1.0 (✓ API compatible changes) * `eventcore-memory`: 2.0.1 -> 2.1.0 * `eventcore-testing`: 2.0.1 -> 2.1.0 (✓ API compatible changes) * `eventcore-examples`: 2.0.1 -> 2.1.0 * `eventcore-fs`: 2.0.1 -> 2.1.0 <details><summary><i><b>Changelog</b></i></summary><p> ## `eventcore-macros` <blockquote> ## [1.1.1](eventcore-macros-v1.1.0...eventcore-macros-v1.1.1) - 2026-08-06 ### Bug Fixes - *(model)* complete experimental checker acceptance </blockquote> ## `eventcore-types` <blockquote> ## [2.1.0](eventcore-types-v2.0.1...eventcore-types-v2.1.0) - 2026-09-10 ### Features - *(projections)* add transactional PostgreSQL projections ([#40](#40)) ### Features - _(projections)_ add backend-neutral delivery positions, stable projection identities, selections, persisted envelopes, and the replayable source contract for the planned 2.1.0 release </blockquote> ## `eventcore-postgres` <blockquote> ## [2.1.0](eventcore-postgres-v2.0.1...eventcore-postgres-v2.1.0) - 2026-09-10 ### Features - *(projections)* add transactional PostgreSQL projections ([#40](#40)) ### Documentation - _(projections)_ add migration, operation, recovery, and reset guidance for transactional read models ### Features - _(projections)_ add lossless source delivery, named progress, fenced leadership, atomic read-model effects and progress, typed failure policies, batch/continuous execution, and coordinated reset/replay for the planned 2.1.0 release - _(projections)_ add application-owned envelope-aware decoding for multi-type selections while retaining payload JSON decoding by default </blockquote> ## `eventcore-sqlite` <blockquote> ## [2.0.0](eventcore-sqlite-v1.1.1...eventcore-sqlite-v2.0.0) - 2026-08-11 ### Documentation - *(snapshots)* explain durable command state ### Features - *(snapshots)* persist command state projections </blockquote> ## `eventcore` <blockquote> ## [2.1.0](eventcore-v2.0.1...eventcore-v2.1.0) - 2026-09-10 ### Features - *(projections)* add transactional PostgreSQL projections ([#40](#40)) ### Documentation - _(projections)_ document the legacy and transactional PostgreSQL projection guarantees ### Features - _(projections)_ expose the additive transactional PostgreSQL projection API through `eventcore::postgres::projections` for the planned 2.1.0 release; existing 2.0.1 `Projector` and `run_projection` callers remain source-compatible </blockquote> ## `eventcore-memory` <blockquote> ## [2.0.0](eventcore-memory-v1.1.1...eventcore-memory-v2.0.0) - 2026-08-11 ### Documentation - *(snapshots)* explain durable command state ### Features - *(snapshots)* persist command state projections ### Refactoring - *(testing)* stabilize reconstruction benchmarks </blockquote> ## `eventcore-testing` <blockquote> ## [2.1.0](eventcore-testing-v2.0.1...eventcore-testing-v2.1.0) - 2026-09-10 ### Features - *(projections)* add transactional PostgreSQL projections ([#40](#40)) ### Features - _(projections)_ add reusable public transactional-projection contract fixtures covering atomicity, restart, malformed input, leadership, retry/skip/stop/fatal behavior, batching, after-commit ordering, and commit acknowledgement loss </blockquote> ## `eventcore-examples` <blockquote> ## [1.0.1](https://git.johnwilger.com/Slipstream/eventcore/compare/eventcore-examples-v1.0.0...eventcore-examples-v1.0.1) - 2026-06-15 ### Testing - harden doctests and guard docs against fabricated APIs ([#426](https://git.johnwilger.com/Slipstream/eventcore/pulls/426)) </blockquote> ## `eventcore-fs` <blockquote> ## [2.0.0](eventcore-fs-v1.1.1...eventcore-fs-v2.0.0) - 2026-08-11 ### Documentation - *(snapshots)* explain durable command state - *(ordering)* clarify projection cursor semantics ### Features - *(snapshots)* persist command state projections ### Refactoring - *(testing)* stabilize reconstruction benchmarks ### Testing - *(contract)* cover command state snapshots </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/).
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
Architecture and compatibility
eventcore-types; PostgreSQL execution remains ineventcore-postgresand is re-exported undereventcore::postgres::projections.Migration and operations
_sqlx_migrations.ACCESS EXCLUSIVEon the events table while it backfills stable positions and installs the transactional frontier trigger; operators must schedule writer downtime.close_on_drop.Behavioral contracts
The reusable suite covers all 16 requested contracts: atomic effect/progress commit; both rollback directions; true interrupted-commit recovery; restart; redelivery suppression; commit-order-safe delivery; malformed input; leader exclusion; fence loss; multi-page batch drain; continuous catch-up; bounded retry exhaustion; explicit skip; reset/replay reconstruction; and after-commit ordering.
Additional regressions cover full persisted-envelope fidelity, event-type-aware application decoding, exact failure context, zero-batch rejection, source/selection identity validation, retry backoff arithmetic, and cancellation-safe fixture/proxy ownership.
Local evidence
cargo nextest run --workspace --all-features: 500/500 passed, 0 skippedcargo test --doc --workspace --all-features: 35 passed, 18 ignoredcargo build --workspace --all-features: passedcargo clippy --all-targets --all-features -- -D warnings: passedeventcore-postgreslibrary check and warning-denied rustdoc: passedFull evidence and the 10-finding/16-contract matrices are in the release-readiness report.
Tracking and release boundary
20260909-zscu-deliver-transactional-postgresql-projections-through-reviewed-pr=2.1.0with featurepostgresonly after merge and separately approved publication.