Skip to content

Release v4.19.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 00:21
6774734

This release makes most of the remaining modeling language executable and keeps authored models intact through tool edits. Specification values can now be typed objects and lists, and specifications without a when step run. Commands can produce events conditionally and state require conditions. Constraints gain their lifecycle forms, and validation gains pattern matching. Canonical printing, folder expansion and MCP edits now keep comments.

Added

  • Specification values accept typed single-line objects and lists, such as lines = [{"sku":"A-1","quantity":2}] and tags = []. Keys are checked against the declared composite type (PLAY0291–PLAY0294). The values bind to executable composite and array values and run end to end (#215, #207)
  • Specifications may state a subset of read-model or query-result properties. A query result may omit the identifier its arguments supply. Specifications with only given and then query/then readmodel steps and no when run (#207)
  • Commands can produce events conditionally (produces when …) with conditions over command properties, and can state require conditions over command properties. Each condition is evaluated independently (#210, #209)
  • Literal tags on events and produces travel as append metadata (#210)
  • Constraints accept released by <Event>, composite properties (unique a, b on E), several targets under one name, message and ignore casing (#212)
  • matches "<regex>" takes an ECMAScript regular expression, and matches email is a named pattern with a documented definition (#209)
  • Renaming a composite type's property through MCP rewrites the object keys that name it (#215)

Changed

  • Canonical printing, folder expansion, MCP expand-layout and propose-ast edits keep comments with the declarations they annotate (#220)
  • $strings. messages are symbolic string keys in the executable model. A malformed key is reported (PLAY0357), and a reference rejection marks its message as a key (#224)
  • null in a command or event value is rejected with the reason (PLAY0350): an optional fact is a separate event (#207)