Skip to content

0.77.0

Choose a tag to compare

@b10x-bot b10x-bot released this 29 Oct 16:09
· 288 commits to main since this release
f692aab

HTTP bindings group alike outcomes, OpenAPI import widens, and validate refuses unreachable branches.
6 added, 2 changed, 2 fixed.

Changed

  • An ess-http/1 route may declare alike: groups of outcomes whose answers are equal, so two outcomes share a status and body instead of being refused as ESS-HTTP-025; OpenAPI writes one response naming every member in x-ess-outcomes (#652). A group is still refused when the wire tells its members apart, including error objects whose errors carry different fields and a header reading error.wire over different error wire names.
  • An outcome may answer a String response field as text/plain with encoding: text (#673).
  • ess-http/1 routes may declare their own refusals: (on that route in place of the top-level ones), empty.body (none or a literal object), and body: array for a view that is not paged; OpenAPI and the Rust and Go servers write all three, and existing bindings keep their bytes (#673).
  • OpenAPI import admits open objects, the empty and true schemas as JSON values, and a nullable anyOf/oneOf pair as an optional value; the import envelopes stay /1 (#647).
  • ess generate schema types-bundle --integer-format-widths realizes int32/int64 formats at native width in every target (#648). It is off by default and the default output is unchanged; with it, the TypeScript report leaves the format range to the consumer (typescript_integer_range).
  • ess generate types takes --declared-field-order for Rust, Go and TypeScript and --rust-box-only-recursion for Rust (#661). The first emits a model type's fields in the order the specification declares them, so Rust also encodes members in that order and a derived PartialOrd/Ord compares them in it; a bundle carries no declaration order and is refused. The second holds a named type by value and boxes a reference only where it closes a cycle of by-value fields, such as Optional<Self>; a reference inside a List or Map is not boxed. The report's configuration records each option given. Without them the generated bytes and the report are unchanged.
  • ess specify validate refuses a when: branch whose input guard implies the guard of an input-guarded refusal the precedence order answers before it, equal guards included, as unreachable_branch at the later branch, naming both branches and both guards in the ESS-SYNTH-003 wording (#702). Implication is decided by the finite prover; where it declines a guard, validation stays silent and synthesis keeps ESS-SYNTH-003.
  • 3 more in the changelog.

Every change: CHANGELOG.md § 0.77.0

Replay before release (local, run by ess)

  • The release head was replayed against the 0.76.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 drift against a committed projection moved.
  • No adopter is refused by the new unreachable_branch check of #702, so it ships as a refusal rather than a warning.