Repository navigation
0.79.0
Nested-member claims, Binary64 in conformance suites, and typed authored inputs.
5 added, 9 fixed, 1 changed.
Changed
- From
ess-scenario/6an authored claim may name one member of a nested value by its dotted path,checkpoint.checkpoint_id: cp-1, in an act'sresponse:, an event'spayload:, an error'sfields:and a view row'scontains,excludesandat; each path is compared alone, throughOptionaland newtypes, and the members it does not name are not read (a downstream report). A path naming no member is refused asESS-AUTHOR-013with the full path; a path through a list, map, union, enum or primitive, a reference at a path, and a path ininput:,setup:,caller:orparams:are refused by name. Belowess-scenario/6a dotted key is refused as an undeclared field, its help namingess-scenario/6. - From
ess-scenario/6an act's literal input that its declared type refuses, at any depth (analphabet:,prefix:or invariant of the field's type, or of a member's or element's), is refused asESS-AUTHOR-015naming 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). Belowess-scenario/6the 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'sexpectedmay 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
Binary64in 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 atess-conformance/62(coverage/63) instead of being refused (a downstream deployment's report). Synthesis witnesses then-th instance asn + 0.5; Rust, Go and TypeScript compare aBinary64in a retained result or a complete subject by its nearest binary64 under IEEE equality (-0equals0), 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 authoredBinary64literal of magnitude 2^53 or more is refused asESS-AUTHOR-015, because those untyped positions compare an integer exactly. A suite labelled below/62that records aBinary64is refused at each record asUnsupportedPrimitive, "a Binary64 value requires suite/62 or /63". ABinary64reached 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 everyBinary64. A model without a reachedBinary64keeps 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 (
1and"1",trueand"true"), is refused asESS-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 ascandidate_not_emitted. - A partial nested literal in an act's
response:is refused asESS-AUTHOR-014, naming each member it leaves out at its path, at every scenario header, where it wasESS-AUTHOR-001readinginvalid_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,DurationorBytesinput, or a struct member a structured example reaches, with the value itsexample: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