0.78 — Structured input examples, rows a deployment provides, and lifecycle summaries
· 3 min read
0.78 — Structured input examples, rows a deployment provides, and lifecycle summaries | ESS0.78.0 adds source format ess/33: a struct, map or Json input may carry an example, an entity may declare that the deployment provides its rows, and lifecycle transitions and states may carry a summary.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch
0.78.0 adds source format ess/33. A model that does not use its new keys keeps its meaning, its IR
bytes and its compiled digest. The changelog
lists every change; this note covers what ess/33 adds and the fixes that came with it.
Structured input examples
- An input typed as a struct (open or closed), a
Map<…>orJson, through any newtype orOptional, may carry anexample:. Synthesis sends it at the plain instance; a struct example reaches synthesis through its declared members, so a guard reading one keeps the scenario that refutes it. - An open struct's example keeps the members it does not declare, and the interpreted target now admits those members in a command input at every format.
Rows a deployment provides
- An entity may declare
provided: true: the deployment holds its rows, and no command of the specification need create one. - Where a
when_related: {via: input.<field>}guard reads such a row and no declared outcome creates it, the scenario resolves an entity fixture{name, type, entity, state}before it runs (suite formatsess-conformance/60and/61). The interpreted target creates the row; the Go and TypeScript runtimes pass the entity and state to their fixture provider. fixture_inputs:is refused over every input a guard reads, including the identity a related-row guard reads.
Lifecycle summaries
- A transition may carry a one-line
summary:, and a state may carry one in its mapping form,{name, wire?, summary?}.ess verify diffreports a moved transition summary astransition-summary-changed(ess-diff/22), compatible. - A flat
summary:,wire:,display:orcode:on a named type is refused with a message namingnaming: {summary: …}.