Skip to main content

0.63 — Values computed by typed expressions, and one precedence order for guards

· 4 min read
0.63 — Values computed by typed expressions, and one precedence order for guards | ESS0.63.0 adds source format ess/27: a value may be computed by a typed expression, a guard may read a digest of its input, and every command's guards answer in one precedence order.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-10-19-1200-typed-expressions-and-one-precedence-order.md · revision b89faaa411bd

0.63.0 is a feature release. It adds the source format ess/27, the suite formats ess-conformance/52 and /53, the delta format ess-diff/20 and the suite comparison ess-suite-diff/1. A model below ess/27 keeps its meaning, its IR bytes and its compiled digest. The changelog lists every change since 0.59.0.

Values computed by typed expressions​

From ess/27 a value in sets:, an event's payload: or an error's payload: may be computed by an expression, {expr: "<expression>"}, and a view field may be computed from its source row, such as expr: "ended_at - started_at". Arithmetic over Integer and Decimal is exact, / is an Optional<Decimal> that is absent at a zero divisor, round rounds a quotient once, and Timestamp - Timestamp is a Duration. Synthesis runs the branch again on inputs worth checking the figure on: a zero divisor and a rounding tie either way (#560).

A guard may read a fact through a digest or encoding function: challenge != base64url(sha256(ascii(input.verifier))) states a PKCE S256 check as a held-row predicate (#584).

One precedence order​

Under ess/27 a branch answers in the order of what it must read: the request alone, then whether the addressed record exists, then what it holds, then the rows around it, then the accepting branches (#554). Every guard pair once refused for want of an order now validates, such as when_related: beside when_subject: or wrong_state: (#282).

More in ess/27​

  • shorthand: <field> on a struct type lets a value be written as that one field (#594).
  • An each: entry of affects: may move or delete the row each element names (#596).
  • A binding condition may compare a Boolean leaf with true or false.

Conformance​

  • ess verify conform diff --from <suite> --to <suite> says which scenarios two suites add, remove and change, and --format json writes an ess-suite-diff/1 document (#572).
  • ess verify conform synthesize --check compares what it would write with what is committed (#571).
  • Suites ess-conformance/52 and /53 state the event catalog once at the root instead of in every scenario, check a value type's invariants inside a view's lists, maps, optionals and unions, and await a command the system issues itself (#570, #542).