Skip to content

Release v4.101.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 03:34
882a440

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 a route, and every fact the command produces carries a route with its source kind, stream kind and encoded stream id. (part of #407)
  • 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:

    • given and when append events with a route are placed on that stream.
    • then compares the route, and no stream requires 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-rename now 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 order now 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 Default now report PLAY0273.

    (part of #407)