Skip to content

Release v19.9.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 15:19
4b4af45

Added

  • Decision reads: IDecisionReads.Get<T>(key) returns a read model instance (or its absence) with an opaque guard, and the unit of work's commit is rejected if an event that could change what was read has been appended since. Developers never handle sequence numbers. Admitted read models are projections keyed on the event source without joins, children, custom keys or all; everything else is refused with a typed reason. Text keys and canonical (lowercase) GUID keys are admitted. Chronicle.Testing supports decision reads in-process. This is the client part of the design for #4138.
  • A unit of work that holds a decision read is completed only by its owner, so application code cannot commit it early and bypass the guard. The ASP.NET Core unit-of-work middleware owns its request's unit of work.
  • GetDecisionConflicts explains a rejected guarded append without exposing sequence numbers.

Changed

  • An append with no events but at least one concurrency scope that will actually be checked is now accepted and only validates those scopes, so a command that decides to write nothing can still confirm its decision was current. Empty appends without such a scope are still rejected, and empty appends no longer notify append subscribers.
  • Requires Chronicle kernel 19.0.0 or later for decision reads. With plain ASP.NET Core the middleware commits after the response is written, so a caller that needs a conflict-aware response must commit before writing it.