Skip to content

Release 1.27.0

Choose a tag to compare

@reid-spencer reid-spencer released this 02 Jul 13:53

What's New

This release makes RIDDL's AST → JSON serialization (root2Json, introduced
in 1.26.0) lossless, complete, and deterministic. It matters most to consumers
who round-trip models through JSON — notably AI training-data generation, where
the JSON must faithfully and reproducibly represent the model.

Improvements

  • root2Json is now lossless and complete. It is reimplemented on RIDDL's
    HierarchyPass infrastructure, so it visits every node in the model by
    construction. Entity state machines with multiple states — each with its
    own nested handlers — now round-trip in full, as do command/event/query/result
    messages defined inside entities, repositories, projectors, adaptors, and
    streamlets. Previously a multi-state entity collapsed to a single state and
    processor-defined messages were dropped, leaving dangling references when the
    JSON was read back. The entire riddl-models corpus (187 models) now
    round-trips through parseJson(root2Json(...)) with zero new validation
    errors — up from 0 of 187 clean.

Bug Fixes

  • Deterministic JSON round-trip. The AST↔JSON mapping is now a true fixed
    point: serialize a model to JSON, read it back to an AST, and re-serialize —
    the two JSON documents are byte-identical. As part of this, an unbounded
    String now serializes with its canonical String(0,255) bounds made
    explicit (matching the defaults parseJson already applies), so repeated
    round-trips are stable. The 1.26.0 JSON input-tolerance defaults are unchanged.

Internal

  • New fidelity tests: a JVM corpus test over all 187 riddl-models .bast
    files (asserting both JSON-identity and validation-parity), and a
    cross-platform (JVM/JS/Native) idempotence test on an inline multi-state model.
  • The hand-written JsonSerializer is replaced by JsonifierPass.

Compatibility: Fully backward compatible. parseJson still accepts the
singular entity state alongside the new states array. No public API removed.