Release v3.11.0
Summary
Most of Screenplay's projection surface rendered as a // TODO comment rather than code, and several constructs that did render diverged silently from what Chronicle actually does — the generated read model compiled, looked right, and behaved differently from the model. Studio renders through this path and commits the result straight to a repository, so that output ships.
This renders every projection block that has a model-bound attribute behind it, and closes the silent divergences found while doing so.
Added
join,all,everyandremove via joinblocks render as their model-bound attributes (#11)nestedblocks render as a sibling record the read model holds through a nullable[Nested]property, with aclear withinside one becoming the class-level[ClearWith]that nulls it (#11)childrenblocks render as a sibling record plus anIEnumerable<T>collection carrying[ChildrenFrom], withremove withbecoming a[RemovedWith]on that same property, nesting to any depth (#11)no automaprenders as[NoAutoMap]on the read model (#11)
Fixed
- A key declared on a
fromblock, or on one of its events, is carried onto[FromEvent]. Chronicle seeds every projection with the event source id and never derives routing from[Key], so a keyed projection was writing its documents under the event source id instead of the key it declared (#13) no automapwas not read at all, so a projection that disabled automapping rendered with it enabled and mapped event properties the model deliberately excluded (#13)clear withon a read model emitted a class-level[ClearWith]that Chronicle only reads on a nested type, so it compiled and was then discarded (#13)
Changed
- What no model-bound attribute can carry is now reported rather than dropped in silence: the system-wide subscription an
allblock declares, a per-blockno automap, achildrenblock that says nothing about its parent, aclear withinsidechildren, afromnaming events it does not map, and any mapping an earlier block already claimed (#13) - Specs compile the rendered output against the real Cratis assemblies, so a wrong attribute name, argument or target fails rather than passing a string comparison (#13)