Repository navigation
Release v4.208.0
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 itemandfor screenaction subjects on screen actions and toolbar items are rendered and run in the generated runtime (part of #855) - Added the prerelease
stage-templates/v1template profile and helper catalogue v1, with generated reference documentation (#795) - Added the prerelease
stage-render-model/v1render 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 rendernow 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 renderin 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 renderin default mode now omits$eventContextprojection 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)