Repository navigation
0.83.0
Optional list appends, binding refusals that check event identities, and refusals that tell states apart.
5 fixed.
Changed
- The interpreted target appends
nullfor an absent ornullelement of{append: input.<field>}over aList<Optional<T>>, as generated Rust and Go already appendNoneandnil, and synthesis expects thatnullin the view row; it refused the command as unsupported. An element over a list of required elements is unchanged. - A synthesized binding refusal scenario (
<binding>/binding/refusal/<outcome>, a refusal the binding's policy drops, escalates or retries a bounded number of times) compares the identity fields of the trigger's event with the instances its invocation was sent, as the other binding scenarios do since 0.82.0, and with each id it was sent as a literal for a field of an entity's identity type, such as the id a trigger naming no related row is sent; also where it sends another publisher of the event, or a trigger naming a row arranged so the predicate refuses it. It expected that event by shape alone, so a target publishing a wrong id there passed. The suite bytes of seven fixture models move (binding-every-publisher,binding-every-publisher-renamed,binding-into-updating-command,binding-refusal-policy-swapped-caller,caller-binding-refusal/attr,caller-binding-refusal/plain,predicate-refusal-policy-arranged-row). - A command guarding on a row set beside rows its input names (
ess/32) is witnessed on every refusal order: a refusal over a named row that also carries awhen:is held beside the row set's rows with a send that holds thatwhen:(one row named twice where it equates two inputs), and on its related row alone where no such send stands, so its row-set branch is no longer refused; a row-set refusal is held beside a later refusal whosewhen:compares the named rows, laying the selected row through a creator sent one row twice where only that lays it; aforallon the accepting branch is held on a selected row theforallpasses, and its default refusal on a selected row naming the send's own rows, so a target refusing on any selected row fails, atess/31too (story:row-set-beside-named-rows-suite-tells-every-order-apart). - The arranged half of an input refusal on a command that addresses an existing record, where no identity view shows the arranged row, tells the arranged state apart from every other state: where the first branch addressing the record from that state runs from other states as well, it sends the shortest sequence of sends a bounded search finds that tells them apart, extended one send at a time past it where the bound stops the search first, drawn from the command's branches and from other commands whose input names only that record (an input of the identity's plain type that no branch uses as a record, such as a free-text reason, names none), a
wrong_state:refusal among the answers, so a target that moves the record on refusal between two states that branch runs from fails it; such a target passed. Where the sends leave a state untold, also where valid sends exist but none tells a state apart, the scenario is withdrawn and refused asESS-SYNTH-001naming the arranged state and the states left. - An input refusal beside held-state branches, on a model with no identity view, reads the record back after each held-state send through sends from that state that tell it apart from every other state, the command's own branches first and its held-state refusals among them, so a target that moves the record on refusal and publishes nothing fails it; it required only the error and no event, and such a target passed. Where no send from a held state has a valid input the scenario is withdrawn and refused as
ESS-SYNTH-001naming every branch tried, and where the sends leave a state they cannot tell apart, naming the states. A model with an identity view keeps its suite bytes; the test modeloccurrence-clock-offers.yaml, which has none, moves its suite bytes: itsAcceptOffer/outcome/malformedscenario reads the offer back in each of its three states, its scenario count and refusals unchanged.
Every change: CHANGELOG.md § 0.83.0