Skip to content

Release v4.9.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 16:19
617f73e

Added

  • Render portable unique <property> on <Event> and unique event <Event> constraints as named Chronicle constraints, with every target, release, casing rule and message. Generated specifications prove violations, releases, casing and re-claiming one's own value. Constraints on optional, composite or non-text properties, and several events from one command that target or release a unique-value constraint, still fail with STAGE-ESM-014. Chronicle updates its constraint index after commit (Cratis/Chronicle#4123), so a storage failure there is not rejected at append time. (#118)
  • Commands that produce several unconditional events render, and generated specifications assert each event on its stream in order. A specification may now expect several read models and query results. (part of #14)
  • Specifications with a given caller fixture and then denied now render. The caller runs through Arc's principal override, and a denied specification checks that the command was unauthorized, that the policy is registered, and that nothing was appended. Protected-query expectations and claim conditions on the role claim type are still rejected. (part of #57)
  • Render nested from and clear blocks, supported every event-source mappings, and root and child RemovedWith / RemovedWithJoin. A differential specification now runs admitted projection shapes through Chronicle and compares the results with Screenplay's reference execution. (part of #117)

Changed

  • Command properties that feed a constrained event property get a not-null validation rule, so a null value never reaches the unique index (Cratis/Chronicle#4122).
  • Projection shapes where Chronicle keys, clears or removes differently from the reference now fail with STAGE-ESM-017. This covers one event contract in several roles at the root, and nested from/clear blocks without a matching root from. It also covers clearing a nested block and then re-creating it, and removing a child joined to several parents.