Skip to content

0.79.0

Choose a tag to compare

@b10x-bot b10x-bot released this 01 Nov 05:57
· 203 commits to main since this release
45a1beb

Nested-member claims, Binary64 in conformance suites, and typed authored inputs.
5 added, 9 fixed, 1 changed.

Changed

  • From ess-scenario/6 an authored claim may name one member of a nested value by its dotted path, checkpoint.checkpoint_id: cp-1, in an act's response:, an event's payload:, an error's fields: and a view row's contains, excludes and at; each path is compared alone, through Optional and newtypes, and the members it does not name are not read (a downstream report). A path naming no member is refused as ESS-AUTHOR-013 with the full path; a path through a list, map, union, enum or primitive, a reference at a path, and a path in input:, setup:, caller: or params: are refused by name. Below ess-scenario/6 a dotted key is refused as an undeclared field, its help naming ess-scenario/6.
  • From ess-scenario/6 an act's literal input that its declared type refuses, at any depth (an alphabet:, prefix: or invariant of the field's type, or of a member's or element's), is refused as ESS-AUTHOR-015 naming the field and the constraint: a generated decoder refuses such a value before the command runs, so the act's outcome is one no implementation reaches (a downstream report, 2026-10-31). Below ess-scenario/6 the input is checked for its shape only, as before, so every document that compiled keeps compiling.
  • Suite pair ess-conformance/62 (ordinary) and /63 (coverage): a response observation's expected may name a nested member by its dotted path. Cumulative over every major below; Rust, Go and TypeScript run both, older readers refuse them by version, and every reader refuses a response member path under a lower major. Event, error and row paths compile to suite/26 dotted keys, a path ending at a struct as its leaves, so those suites keep their format; a suite without a response path keeps its format and bytes.
  • A model that reaches a Binary64 in an entity's fields, a command's input or response, an event's or error's fields, or a view's fields or row shape now synthesizes, authors and runs a conformance suite at ess-conformance/62 (coverage /63) instead of being refused (a downstream deployment's report). Synthesis witnesses the n-th instance as n + 0.5; Rust, Go and TypeScript compare a Binary64 in a retained result or a complete subject by its nearest binary64 under IEEE equality (-0 equals 0), and a token with no finite binary64 image (1e400) is refused by name. TypeScript now reads a number in a view row, an error's fields, an event's payload or an invocation's input as Rust and Go do: an integer exactly, any other number by its nearest binary64. An authored Binary64 literal of magnitude 2^53 or more is refused as ESS-AUTHOR-015, because those untyped positions compare an integer exactly. A suite labelled below /62 that records a Binary64 is refused at each record as UnsupportedPrimitive, "a Binary64 value requires suite/62 or /63". A Binary64 reached through an entity identity, a view parameter, an actor attribute, a binding or a conversion is still refused (ESS-AUTHOR-036, whose help now names the carried positions), and the browser player, the mutation audit and whole-system code generation still refuse every Binary64. A model without a reached Binary64 keeps its suite format and bytes.
  • An authored scenario that repeats a key in any mapping it reads as a map (input, caller, fields, payload, params, contains, excludes, response, or a mapping inside a literal), or two keys that differ only in YAML type (1 and "1", true and "true"), is refused as ESS-AUTHOR-047, naming the mapping's path, the key, and the mapping's line and column. Before, the map kept the last value without a word. Rust, Go, TypeScript and browser coverage readers record it as candidate_not_emitted.
  • A partial nested literal in an act's response: is refused as ESS-AUTHOR-014, naming each member it leaves out at its path, at every scenario header, where it was ESS-AUTHOR-001 reading invalid_input; the help says a nested value is compared whole and names the path form (a downstream report).
  • Synthesis writes both branches of a != or == guard that compares a text, Uuid, Timestamp, Duration or Bytes input, or a struct member a structured example reaches, with the value its example: holds: the leaf is tried at its own witness beside the example, at the next instance's where the example is that witness, and at a value its type admits where its invariants refuse the witness, where no candidate refuted the comparison and the outcome was refused as unsatisfiable. A model without such a guard keeps its suite bytes.
  • 8 more in the changelog.

Every change: CHANGELOG.md § 0.79.0