Repository navigation
Release v4.101.0
Summary
Event sources, streams and command routes are now part of the executable model, as ESM v8. Specifications can seed and assert where events land, and composite stream ids run.
Added
-
ESM v8 makes event sources, streams and command routes executable. A model that declares a source, routes a command or states a specification route selects v8; every other model keeps its version and bytes.
- The model lists
eventSources, a command carries aroute, and every fact the command produces carries aroutewith its source kind, stream kind and encoded stream id. (part of #407)
- The model lists
-
The stream id is resolved after validation and requirements, and before generated values are produced. If it can't be formatted (empty text, non-NFC text, or an integer outside ±(2^53−1) in the default numeric mode), the command is rejected as
Contract. Nothing is appended for it, and earlier facts in the same cascade are kept. (part of #407) -
Specification routes run at v8:
givenandwhen appendevents with a route are placed on that stream.thencompares the route, andno streamrequires an unrouted fact.- A routed fixture or example is typed by its source's identifier, even when no command produces the event.
(part of #457)
-
Composite stream ids run at v8. Parts are encoded in declaration order with the escaped
|separator, and specifications compare them part by part. (part of #462) -
Route lines in typed specification examples now run as well. Redelivery locators keep their route lines refused until reaction redelivery is admitted. (part of #491)
-
MCP
propose-renamenow moves a source's identity entries together with its streams. Readiness reports routes as admitted, and the semantic diff marks a reordered, retyped or added stream id part as contract-breaking. (part of #407)
Changed
-
then events in any ordernow finds an assignment instead of matching greedily, at v8 only. Specifications at earlier versions keep their outcomes. (part of #407) -
Some route mappings are still refused:
- A mapping that reads a property path, or a route on a handler command, keeps PLAY0268.
- A mapping from a generated property, a stored source or stream name that collides, and a source stored as
Defaultnow report PLAY0273.
(part of #407)