Skip to main content

0.7.1 — the same pattern, pointed at a Kubernetes cluster

· 3 min read
0.7.1 — the same pattern, pointed at a Kubernetes cluster | ESSA running cluster is observed, compiled, diagnosed, held to an authored desired state three-valued, and answered with patches. Nothing here holds a credential, reaches a network, or applies anything — the diff is the deliverable.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-21-0745-a-cluster-described-and-answered.md · revision c80230671162

The ESS half of this repository compiles a specification and judges an implementation against it. This release does the same thing to a running Kubernetes cluster, which is the first evidence that the pattern was general rather than a description of one problem.

0.7 — one specification, two applications

· 14 min read
0.7 — one specification, two applications | ESSRelease 0.7.0-ess-wave-7 closes the loop over generated code: every generated artifact carries the digest of the model slice it derives from, ten construct families join the semantic delta — and the wave ends with a demonstration rather than a claim: one specification synthesised to Rust and to Go, two binaries answering the same seven HTTP exchanges identically and publishing byte-identical contracts.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-21-0623-one-spec-two-apps.md · revision c80230671162

Release 0.7.0-ess-wave-7 is the wave where the machinery built over six releases stops pointing at itself. It opens with bookkeeping — every generated artifact now carries the digest of the model slice it derives from, and the semantic diff learns four more construct families — and it ends with the demonstration all of that bookkeeping was for: one application specification, synthesised to Rust and to Go, two binaries built and started in the gate, writing one startup record, answering seven HTTP exchanges identically, and publishing the same contract byte for byte. Nothing below is asserted from memory: every output was produced by running the released code, and the block that was not run for this post says which committed file it is.

0.6.1 — no new capability, the existing claims made mechanical

· 3 min read
0.6.1 — no new capability, the existing claims made mechanical | ESSThree invariants that were enforced by nothing are enforced by scans. The model digest widens to the full SHA-256. Property tests with fixed seeds. And the fault matrix reaches thirteen rows, zero uncaught.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-21-0040-hardening-the-register-emptied.md · revision c80230671162

A release with no new capability. Everything here takes a claim the repository was already making and makes it mechanical — enforced by something that fails, rather than by a doc comment that asserts.

0.6 — the code that was never yours to write

· 11 min read
0.6 — the code that was never yours to write | ESSRelease 0.6.0-ess-wave-6 adds one verb: ess synthesize. The specification that already writes its documentation, its contracts and its tests now writes the structural part of the code — and the generated system passes the suite the specification generated before this code existed.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-2316-structural-synthesis.md · revision c80230671162

Release 0.6.0-ess-wave-6 adds one verb to the CLI. ess synthesize turns a compiled specification into a plan and a Rust workspace: the types, the states, the ports — the part of an implementation that was never anyone's to write — plus a typed list of exactly what remains. The specification that already writes its documentation, its contracts and its tests now writes code, and the claim that matters is executed rather than asserted: the generated system passes the conformance suite the specification generated two waves earlier, before any of this code existed.

This post is a tutorial, run against the normative example that ships in the repository, so every output below is reproducible — and checked by tests, not pasted from memory.

0.5 — what moved, and what that invalidates

· 10 min read
0.5 — what moved, and what that invalidates | ESSRelease 0.5.0-ess-wave-5 adds two verbs: a semantic diff over two revisions of a specification, and an impact closure that says which conformance results a change puts back to owed — with the path that explains each one.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-2039-semantic-diff.md · revision c80230671162

Release 0.5.0-ess-wave-5 adds two verbs to the CLI. ess diff answers what actually moved between two revisions of a specification — as typed changes over the compiled models, not as text. ess impact answers the question that makes the first one worth asking: which verification results does that movement invalidate, and by exactly what path.

This post is a tutorial on both, run against a fixture that ships in the repository, so every output below is reproducible — and checked by tests, not pasted from memory.

0.4.0 — the specification judges the implementation

· 3 min read
0.4.0 — the specification judges the implementation | ESSA specification generates its own conformance suite, runs it, and produces a standalone report. This retrospective records the pre-extraction milestone.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-1809-the-specification-as-oracle.md · revision c80230671162

Historical release note. ESS now publishes a standalone conformance report; workflow consumers translate that report at their own boundary.

This is the release where a specification first generated its own conformance suite, ran it against an implementation, and produced a report a workflow consumer could translate into its own evidence vocabulary.

Both halves are proven, which matters more than either alone:

  • a correct implementation passes 27 of 27 scenarios and the task completes;
  • the same implementation with one fault injected fails the scenario that exists to catch it, and the engine refuses to let the task complete, naming the principle that refused.

0.3.3 — twenty gates, closed before the oracle was allowed to start

· 3 min read
0.3.3 — twenty gates, closed before the oracle was allowed to start | ESSNot a feature wave. A mutation review ran twenty single-edit changes against the load-bearing rules; seven survived, two survived the whole gate. What a user notices is mostly things this repository used to accept and now refuses.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-1318-reconciliation.md · revision c80230671162

Wave 4 was going to make the specification judge generated code. Before that could start, four independent reviews opened twenty gates, and this release closes them.

It is not a feature wave. What a user notices is mostly things this repository used to accept and now refuses.

0.3.2 — one source of truth stops being a claim

· 3 min read
0.3.2 — one source of truth stops being a claim | ESSThe specification now produces the documentation and the contracts — Markdown with Mermaid, JSON Schema, OpenAPI 3.1, AsyncAPI 3.0 — all drift-checked in CI. And the three projections turned out to disagree with each other on all 17 comparable pairs.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-1050-ess-the-projections.md · revision c80230671162

"One source of truth" is a claim until something is actually generated from it. This release generates four things, commits them, and fails CI if they drift.

0.3.1 — a specification that cannot hold a dangling reference

· 3 min read
0.3.1 — a specification that cannot hold a dangling reference | ESSThe compiler resolves a specification into an IR where a dangling reference cannot exist, and models the three layers above the domains — components, bindings, topology. A binding must state its delivery guarantee and what happens on failure.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-0448-ess-the-compiler.md · revision c80230671162

A specification is only worth compiling if the compiled form can hold fewer wrong things than the source did. This release resolves a specification into an IR that cannot hold a dangling reference — not "is checked for", cannot hold.

0.3.0 — the second half arrives, and the two halves meet

· 3 min read
0.3.0 — the second half arrives, and the two halves meet | ESSThe first ESS model release made executable system specifications parseable, validated and explicitly refused. This retrospective records the pre-extraction milestone.ESSfield-noteessfield-noteadopterdevelopertry-spec-driven-developmentresearch

Source-owned field note · website/blog/2026-08-20-0350-ess-the-join-and-the-model.md · revision c80230671162

Historical release note. ESS later became this standalone repository; references to the former combined repository describe the milestone at the time, not the current dependency boundary.

This release started ESS, which specifies what software must exist, inside the repository that originally hosted it.

The join is the point. A task can be blocked until something proves a specification is satisfied — so the two halves meet at evidence rather than at an integration.