Release 1.27.0
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
root2Jsonis now lossless and complete. It is reimplemented on RIDDL's
HierarchyPassinfrastructure, 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 entireriddl-modelscorpus (187 models) now
round-trips throughparseJson(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
Stringnow serializes with its canonicalString(0,255)bounds made
explicit (matching the defaultsparseJsonalready 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
JsonSerializeris replaced byJsonifierPass.
Compatibility: Fully backward compatible. parseJson still accepts the
singular entity state alongside the new states array. No public API removed.