Repository navigation
Release v4.19.0
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}]andtags = []. 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
givenandthen query/then readmodelsteps and nowhenrun (#207) - Commands can produce events conditionally (
produces when …) with conditions over command properties, and can staterequireconditions over command properties. Each condition is evaluated independently (#210, #209) - Literal tags on events and
producestravel as append metadata (#210) - Constraints accept
released by <Event>, composite properties (unique a, b on E), several targets under one name,messageandignore casing(#212) matches "<regex>"takes an ECMAScript regular expression, andmatches emailis 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-layoutandpropose-astedits 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)nullin a command or event value is rejected with the reason (PLAY0350): an optional fact is a separate event (#207)