You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
ess/24: a kind: struct type, and a command with a non-empty response:, may declare undeclared_fields: ignored, so the record admits fields it does not declare while every
declared field stays required and typed. On a command it governs the response only. refused
is the default, and a specification that does not write the key keeps its IR bytes and compiled
digest. ess specify validate refuses the key at its line on a command without response:
(missing_declaration), on an event, an error and every other declaration, and under an
earlier format, naming ess/24. The IR carries it on the command and lists the open structs
beside types (#500).
ess generate projects undeclared_fields: ignored: the JSON Schema tree, OpenAPI and
AsyncAPI write "additionalProperties": true at a command response declared ignored and at
every object of a struct declared ignored, wherever it is reached; every closed object keeps false and its bytes. The generated documentation says so on the command and on the struct. ess verify diff names the move as type/<name>/undeclared-fields-changed or command/<name>/response-undeclared-fields-changed in the new ess-diff/18, never unclassified-changed: opening is expanded, so an opened struct is breaking for readers of
an output use and an opened response breaking for readers; closing is narrowed, breaking
for callers of a struct's input use and for its stored use, and compatible for a response.
Earlier delta formats refuse it written or read (#500).
ess-conformance/48 (/49 with coverage): expect_direct_response and expect_response_payload carry undeclared_fields: ignored for an opened response object and undeclared_fields_ignored for the opened struct declarations it reaches, each left out when
closed. The native, Go and TypeScript observers admit an undeclared key at exactly those objects
and keep every declared field's presence and type check; a closed response, a closed sibling
struct and a union still fail an undeclared key (ESS-CF-PAYLOAD). Readers through /47 refuse
a /48 suite by version, every reader refuses either member under a lower major, and a suite
without an opened object keeps its bytes and format. A one-time response that is opened is
refused at synthesis by name (#500). An authored response: literal and a response-mapped event field are compared with the returned value by
their declared fields at an opened struct, in all three runners, so an extension member is never
read; a literal that names an undeclared member is refused as before. A retained-result replay
or a complete-subject snapshot over an opened response or struct is refused at synthesis by
name, because both observers compare a closed record.
Changed
An authored scenario is judged by the command's precedence plan, as the model interpreter
answers. Two acts accepted before are refused, as ESS-AUTHOR-041 naming the branch that answers
first: one claiming an exists: false branch over a stored reference where an input refusal's
guard holds, and one claiming a when_related: or row-set branch read among the accepting
branches where an accepting when: declared before it holds. In both cases the interpreter
answered the other branch, so the act could not pass.
A synthesized external witness no longer refutes a when_related: refusal that the command's
precedence plan reads after the external branch: one declared after it among the accepting
branches, which the external branch answers before. A suite for such a command can change bytes:
the witness may now be one that refusal's predicate holds on. The model interpreter passes the
old witness and the new one.