Skip to content

0.76.0

Choose a tag to compare

@b10x-bot b10x-bot released this 29 Oct 05:02
· 363 commits to main since this release
d5c00e9

Schemas publish entity, Binary64, length and distinct invariants, and composition compares events and constraints.
3 added, 2 changed, 7 fixed.

Changed

  • ess-http/1 routes may declare operation_id, published as the OpenAPI operationId, and a binding may declare servers per reached_by: network component, published as that component's document servers after info (#653). They are refused with ESS-HTTP-032 and ESS-HTTP-033; a server URL must name a host, so an authority that is only a port, or an IPv6 address left unclosed, is refused. A binding without them keeps its IR and OpenAPI bytes.
  • format: ess-composition/5: a conformance end may name an event, an error or a command with part: input | response, and the payload is compared as a struct against another payload or a struct type (#664). ess-composition/1 to /4 refuse the new keys as unknown fields and keep their bytes.
  • Under ess-composition/5 a type conformance also compares newtype alphabet, prefix and invariants, struct invariants, and enum variant attributes with their values (#671). Invariants compare as sets of parsed conditions, so spelling, order and grouping do not matter, and an alphabet compares as a set of characters. reader: true admits a wider alphabet, a shorter prefix, and a subset of the invariants and attributes. Contract roles never compare constraints, and /2 to /4 results are unchanged.
  • A defined(x) / not defined(x) pair of branches over one Optional value is proved exhaustive without a default, whether x is an input (when:), a stored field (when_subject:) or a related row's field (when_related:) (#644). Such commands were refused as ESS-COMMAND-005 and now validate. A missing or overlapping case is named as x = absent or x = present. A when: not defined(<via>) branch covers an absent Optional via: input.<field> reference without a default. A value comparison on the same path, and a when_subject_state: partition, still need a default.
  • In the ess-composition library, TypeBinding::declared now returns Option<&DeclaredTypeRef>, and ConformanceEnd, CommandPart, TypeBinding::{event, error, command, end} and CompositionSpec::with_payload_conformances are new. In the ess-domain library, Case has a new field presence, and FieldCase has new fields fields_presence and input_presence.
  • An entity's JSON Schema document, and its x-ess-entities entry in OpenAPI, now publish the entity's invariants verbatim under x-ess-invariants (#688). An Integer comparison on one of its fields becomes minimum, maximum or const on that property, as a struct's already does. Command inputs, events and view rows that carry the same fields gain nothing.
  • A Binary64 comparison with a numeric literal, on a newtype's value or on a struct or entity field, now becomes minimum, exclusiveMinimum, maximum or exclusiveMaximum; == becomes minimum and maximum (#687). A literal that is not the shortest spelling of its own binary64 stays only in x-ess-invariants. A bound of magnitude 2^53 or more publishes the integer at the edge of what rounds into range, so a payload the model rounds onto the bound is not refused.
  • 5 more in the changelog.

Every change: CHANGELOG.md § 0.76.0

Replay before release (local, run by ess)

  • The release head was replayed against the 0.75.0 binary on 23 runs of neutral reduced reproductions of adopter reports. No scenario count, refusal count, refusal code or interpreted result moved.
  • The ESS commands of five adopter repositories (validate, compile, synthesize, schema, conformance, types and cli) ran on their main branches with both binaries. No exit code moved and no new error appeared.
  • The one projection that moved is the text-length keyword of #685: a String newtype with a length bound now publishes minLength and maxLength, so a committed type projection of such a newtype changes its digest line.