Repository navigation
Release v19.45.0
Fixes for model-bound child joins, reducers that never run, the projection editor's generated C#, and PDL that Workbench renders but cannot save.
Added
- The PDL compiler adds a "did you mean" hint to a read model or property it cannot find, naming the registered read model whose title, short type name or casing matches, or the property whose casing differs (#4729)
- The reducer analyzer reports public reducer-like methods that will never be dispatched, for example
Reduce(TReadModel? current, object @event), through the existingCHR0006andCHR0007diagnostics. It recognizes the same method shapes as the runtime, including previous event generations marked[EventTypeGenerationFor<T>](#4726)
Changed
- A reducer with no dispatchable methods is no longer registered with the kernel. The client logs a warning naming the reducer and why each reducer-like method was skipped, and completion waits on that event sequence no longer time out waiting for it (#4726)
Fixed
- A model-bound
[Join<TEvent>]inside a[ChildrenFrom]collection withouton:now joins on the child's identifying property, so join events that happened before the child was added are applied. If the child has no identifying property of its own, building the projection fails withMissingChildIdentityForJoininstead of silently missing those events (#4724) - The declarations Workbench shows for registered projections target the full read-model identifier, so they save back unchanged (#4729)
- The projection editor's generated declarative and model-bound C# now compiles and expresses the same projection as the PDL: child joins without
.On(), keyed removals,everyblocks, child removals, nested objects, child and nested records with typed properties (DateTimeOffset,Guid, nullable types, collections), and self-referential read models. Where an attribute or builder cannot express a construct, the generated code says so in a comment instead of emitting different behavior (#4728)