Repository navigation
0.76.0
Schemas publish entity, Binary64, length and distinct invariants, and composition compares events and constraints.
3 added, 2 changed, 7 fixed.
Changed
ess-http/1routes may declareoperation_id, published as the OpenAPIoperationId, and a binding may declareserversperreached_by: networkcomponent, published as that component's documentserversafterinfo(#653). They are refused withESS-HTTP-032andESS-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 anevent, anerroror acommandwithpart: input | response, and the payload is compared as a struct against another payload or a struct type (#664).ess-composition/1to/4refuse the new keys as unknown fields and keep their bytes.- Under
ess-composition/5a type conformance also compares newtypealphabet,prefixand 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: trueadmits a wider alphabet, a shorter prefix, and a subset of the invariants and attributes. Contract roles never compare constraints, and/2to/4results are unchanged. - A
defined(x)/not defined(x)pair of branches over one Optional value is proved exhaustive without a default, whetherxis 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 asx = absentorx = present. Awhen: not defined(<via>)branch covers an absent Optionalvia: input.<field>reference without a default. A value comparison on the same path, and awhen_subject_state:partition, still need a default. - In the
ess-compositionlibrary,TypeBinding::declarednow returnsOption<&DeclaredTypeRef>, andConformanceEnd,CommandPart,TypeBinding::{event, error, command, end}andCompositionSpec::with_payload_conformancesare new. In theess-domainlibrary,Casehas a new fieldpresence, andFieldCasehas new fieldsfields_presenceandinput_presence. - An entity's JSON Schema document, and its
x-ess-entitiesentry in OpenAPI, now publish the entity's invariants verbatim underx-ess-invariants(#688). AnIntegercomparison on one of its fields becomesminimum,maximumorconston that property, as a struct's already does. Command inputs, events and view rows that carry the same fields gain nothing. - A
Binary64comparison with a numeric literal, on a newtype's value or on a struct or entity field, now becomesminimum,exclusiveMinimum,maximumorexclusiveMaximum;==becomesminimumandmaximum(#687). A literal that is not the shortest spelling of its own binary64 stays only inx-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.