Skip to main content

Write a specification

This guide covers authoring an Executable System Specification. The normative example is examples/billing/ in the repository — deliberately the smallest system that exercises the core of the model. Concepts are covered in ESS; these pages are about writing one.

Pages in this guide​

  1. Lay out and validate a specification — the files, where generated output goes, reading refusals, checking what resolved, and names.
  2. Refusals, fields and invariants — what the model insists on: declared outcomes, invariants, enums, instants, text, JSON and Binary64 fields.
  3. Guards and outcome selection — choosing an outcome from input, held state or stored fields.
  4. Commands and outcomes — wrong-state answers, unknown instances, existence, filters, deletion and event value sources.
  5. Values and credentials — value expressions and the caller's credential; Views — view consistency, paging and aggregates.
  6. Components and bindings — the layers above the domains and bindings between components.
  7. Selections, periodic causes and delivery context — what a binding reads besides its event payload, and clock-reading provenance.
  8. Conversions and wire names — conversions between contexts, wire spellings and error wire codes.

Where each section went​

This guide used to be a single page. Each of its sections is listed here under its old anchor, so an older link still finds it.

Next​