Skip to content

Release v19.111.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 13:49
2167d50

Summary

Faster projection replays, composite-key fixes for read models stored in SQL, more reliable observers during restarts and catch-up, and an xUnit v3 variant of the integration-testing package.

Added

  • Cratis.Chronicle.XUnit.Integration.v3, a variant of the integration-testing package for xUnit v3 and Cratis Specifications 5. The existing Cratis.Chronicle.XUnit.Integration package stays on xUnit v2.
  • A materialization binding catalog for MongoDB and in-memory storage that records, per read model, which generation is served and under which serving epoch. Publishing a new generation is one conditional, idempotent operation that revokes the previous generation's write fence, and generation numbers are never reused. SQL storage refuses the catalog explicitly. (part of #5159)
  • Kernels support structured composite-key read-model lookups with explicit legacy-key ambiguity detection. (part of #4265)

Changed

  • Dropping, renaming or clearing a read model collection that a projection generation owns is refused. (part of #5159)
  • SQLite read models now store an order-preserving key next to each decimal property, so paging, indexes and exact lookups on decimal values follow numeric order instead of text order, while values still round-trip with every significant digit. (#5200)
  • Projection replay batches parent history reads per page while preserving the parent state applicable to each child event. (#5328)
  • Projection replay batches MongoDB sink-document reads per page while preserving position-bounded parent resolution. (#5317)

Fixed

  • A replay triggered by a projection definition change now runs with the new definition, so history for added events (for example a child collection added back) reaches the read model. (#5071)
  • Clients and kernels built without a release version (for example from a CI or local build) no longer get refused on connect for purely additive contract differences; when either side's version is unknown, the connection is accepted if the two contracts are compatible in either direction. (part of #5353)
  • Read models with composite keys stored in SQL databases now return their key when read through IReadModels, instead of null. (#4719)
  • Cratis.Chronicle.Aspire restores on .NET 8 and .NET 9 without package downgrade errors. (#5358)