Skip to main content

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 b89faaa411bd

"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 b89faaa411bd

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 b89faaa411bd

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.

0.2.1 — the first command needs no arguments

· 2 min read
0.2.1 — the first command needs no arguments | AEPA project describes itself once in .engineering/project.yaml and the CLI finds it. Projects may add principles and profiles of their own, merged over the protocol tree's — without being able to shed what it enforces.AEPfield-noteaepfield-noteadopterdevelopertry-spec-driven-developmentunderstand-safe-agentic-codingresearch

Source-owned field note · website/blog/2026-08-20-0201-project-discovery.md · revision 824869fecbd2

An adopting team's very first command should not require them to have read the manual. This release makes a project describe itself once, in .engineering/project.yaml, and the CLI find it.

0.2.0-wave-3 — a backend can prove it, instead of claiming it

· 2 min read
0.2.0-wave-3 — a backend can prove it, instead of claiming it | AEPSixteen black-box conformance suites over the command and query surfaces, three levels — and a deliberately broken backend the suites are checked against, because a suite that passes everything tells you nothing.AEPfield-noteaepfield-noteadopterdevelopertry-spec-driven-developmentunderstand-safe-agentic-codingresearch

Source-owned field note · website/blog/2026-08-20-0141-conformance-and-the-domain-profiles.md · revision 824869fecbd2

Any storage backend can say it implements the contract. This release is about the difference between saying and proving.

0.2.0-wave-2 — every object addressable, every mutation auditable

· 2 min read
0.2.0-wave-2 — every object addressable, every mutation auditable | AEPOpaque identity, logical locators, monotonic revisions, and one command boundary with idempotent replay and conflicts that refuse rather than merge. Plus the audit record that keeps the refusals.AEPfield-noteaepfield-noteadopterdevelopertry-spec-driven-developmentunderstand-safe-agentic-codingresearch

Source-owned field note · website/blog/2026-08-20-0102-identity-and-the-interaction-contract.md · revision 824869fecbd2

A protocol that decides things has to be able to say which thing it decided about, and who asked. This release makes every object addressable and every mutation auditable.

0.2.0-wave-1 — a task becomes a plan

· 3 min read
0.2.0-wave-1 — a task becomes a plan | AEPThe first release you can run against something. A task plus a document tree produces a plan, evidence decides what may be done and whether the work is finished, and a capability decision names the rule that decided it.AEPfield-noteaepfield-noteadopterdevelopertry-spec-driven-developmentunderstand-safe-agentic-codingresearch

Source-owned field note · website/blog/2026-08-20-0028-the-execution-core.md · revision 824869fecbd2

0.1.0 was a vocabulary. This is the first release where a question goes in and an answer comes out: a task plus a document tree produces a plan, and evidence decides both what may be done and whether the work is finished.

0.1.0 — the model everything else is built on

· 3 min read
0.1.0 — the model everything else is built on | AEPThe first release is a vocabulary, not a feature. Typed identifiers, a three-valued predicate language, capabilities that default to deny, evidence that carries its provenance, and documents read with syntax separated from semantics.AEPfield-noteaepfield-noteadopterdevelopertry-spec-driven-developmentunderstand-safe-agentic-codingresearch

Source-owned field note · website/blog/2026-08-19-2337-domain-model-and-document-layer.md · revision 824869fecbd2

The first release does nothing you can run against your own repository. It is the vocabulary everything after it is written in, and the decisions taken here are the ones that could not be changed later without changing what the tool means.