Skip to content

Release v4.208.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 05:20
3409f56

Summary

Generated specifications now execute authored C# bodies and named rules instead of skipping them, inline code renders more cleanly, and cratis render degrades gracefully in more cases. This release also adds the first template-kit and render-model contracts (prerelease).

Added

  • Generated specifications now run inline and file named validation rules, including rejections, conversions, designation patterns and receipt time from given clock, so commands with named rules are verified instead of skipped (part of #886)
  • Generated specifications now run opaque C# policy bodies, so commands and queries guarded by an inline or file policy are verified instead of skipped (part of #886)
  • Generated specifications now run inline and file reducer bodies, so read models built by reducers are verified instead of skipped (part of #886)
  • Generated specifications now run C# command handler bodies, so commands with handlers are verified instead of skipped (part of #886)
  • Generated specifications now run deterministic inline and file reaction bodies, so reactions are verified instead of skipped (part of #886)
  • Reactions can carry inline and file-based C# bodies that run natively in the rendered application, verified against the pinned Chronicle kernel (#829)
  • Inline code in a model is spliced verbatim into rendered output through an authenticated token, and a body cannot escape the member that contains it (part of #808)
  • Rendered code indents spliced handler, reaction, policy and performer bodies to the containing block (#848)
  • The Stage runtime and specification executor now run models within a declared ESM range, not only exact audited versions (#821)
  • Source-keyed capture routes now execute in the runtime and Host, with wrong-route and redelivery behavior covered (#842)
  • Read models with mapping-free, key-only projections now run in the Stage runtime (#843)
  • Read models with optional properties now run in executor and Host per-run projections. Composite keys remain refused (part of #512)
  • Explicit for item and for screen action subjects on screen actions and toolbar items are rendered and run in the generated runtime (part of #855)
  • Added the prerelease stage-templates/v1 template profile and helper catalogue v1, with generated reference documentation (#795)
  • Added the prerelease stage-render-model/v1 render model with a generated JSON Schema and surface ledger (#793)
  • Added the declarative artifact render planner, which records input provenance in the render plan (#797)

Changed

  • Requires Screenplay 4.254.0 or later.
  • Rendered C# uses short type names, including the request localization setup in the scaffolded Program.cs (#819)
  • Reaction renderers declare only the event-property locals the authored body uses (part of #850)
  • cratis render now refuses decimal composite key parts, which MongoDB may split on replay, until Chronicle fixes it (#872)

Fixed

  • Rendered validators now check concept rules before command requirements, matching the reference failure order (#840)
  • An inline command handler that returns an event declared in another slice by its bare name now compiles (#867)
  • Reducer specifications that cannot be analyzed now report the actual reason with STAGE-ESM-011 instead of a misleading clock-read message (#845)
  • Reaction bodies that return events from another slice, or compare concepts such as Money > int, are no longer falsely refused (#852)
  • Reaction bodies whose return mixes events and commands, or whose return shape can't be determined, are refused with STAGE-ESM-037 instead of rendering code that fails at runtime (#829)
  • Reaction bodies that return plain values, nested collections or null items are refused at render time with STAGE-ESM-037, instead of failing when the reactor runs (#829)
  • Generated capture reactors now read only the delivered event source's history instead of the whole inbox (#752)
  • Carriage returns inside string literals in inline command-handler bodies are preserved in published artifacts (#846)
  • cratis render in default mode now renders a state-view read model that has no projection or reducer as an empty read model, with a STAGE-DEGRADE-002 warning, instead of refusing it (#884)
  • cratis render in default mode now omits $eventContext projection mappings, and mappings nested under optional properties, with a STAGE-DEGRADE-002 warning and a comment in the generated code, instead of refusing them. A property whose only mapping was omitted renders as nullable (#884)