Everything needed to get an application deployed: the model an application author writes, the decision record that justifies every rule in it, and, as it lands, the compiler that turns that model into deployable artifacts.
Status: pre-implementation. The model and its decision surface are here and enforced by CI. The compiler is being brought over from
deploy-config-schema, which stays alive and authoritative until this repository can render the estate. Nothing here deploys anything yet.
| Path | What it holds |
|---|---|
CONTEXT.md |
The vocabulary. One term, one meaning; also the naming authority for code. |
docs/architecture.md |
Normative for code structure, the way spec/v1 is normative for the model. |
docs/adr/ |
The decision surface, one directory per decision domain. Machine-checked. |
docs/adr/model/ |
The v1 model: premises carrying falsifiable claims, decisions resting on them. The register counts both. |
docs/adr/architecture/ |
The compiler's own structure. Pointers resolve against docs/architecture.md, not spec/v1. |
docs/adr/deferred/ |
Co-testing, still parked, and the retired push-delivery design, each record with its fate. Not v1. |
spec/v1/ |
The normative specification. Chapters 00–60, delivery (55) among them, including the two authored documents: Project Intent (10) and Platform Intent (14). |
spec/v1/diagrams/ |
One drawn diagram per chapter, as an SVG with the editable draw.io diagram embedded. One palette; colour carries the layer. |
spec/v1/examples/minimal/ |
The smallest complete Application: one project, one Application, one Process, 26 authored lines reaching 10 objects. |
spec/v1/examples/ |
Worked examples: real Applications from this estate, written in the model. |
emf/ |
The model-driven implementation: a Java build on Ecore, Xtext, OCL, QVT-Operational and Acceleo, held to parity with the production implementation and deleted after the course. |
scripts/ |
The gates: the ADR contract, links, manifests and layer boundaries. TypeScript that Node runs directly (tooling). |
The three-model pipeline: three models, each joined to the next by a
transformation, with the middle one as a contract
(0003). They are stages of a
pipeline, not metalevels, which is why "metamodel" here means a language
definition and nothing else (CONTEXT.md):
- Project Intent: hand-authored, requirements only. What an application owner knows and nobody else does: its cold-start budget, what its data is worth, which paths answer readiness.
- Resolved Deployment: derived. Every platform decision, assigned from pinned, digested inputs (0006) and reviewable as a diff.
- Deliverable Set: serialization only. No decisions.
Two rules do most of the work. Contention decides authority (0004): a value is platform-assigned exactly when it must be unique estate-wide or draws on a shared finite resource; everything else belongs to the Application. And derivation is total (0005): every hand-tuned value in the live estate must be reachable from something only the Application could have declared.
Start at spec/v1/00-overview.md for the model, or
docs/adr/README.md for why each rule is what it is.
ADRs justify; the spec is normative. Where an ADR and its normative:
pointer disagree, the spec wins and the ADR is what gets fixed: CI resolves
every pointer against a real heading, so the two cannot drift silently.
A premise carrying claim: open is decided in direction but not yet tested.
It names its owner and the exact command or measurement that would settle it.
Three of the eight are currently false as built, and say so.
How one unit's tests gate another's deploy (co-testing) stays parked. How the estate deploys is part of the model since 2026-09-24 (0050): Flux pulls a signed, pinned render per Project and Flagger switches it, as chapter 55 specifies. The model's three demands on delivery are what that chapter meets:
| Demand | Decided in |
|---|---|
| Release Unit atomicity: no member switches until every member is healthy | 0052 |
| Destructive operations gated by Durability Class | 0018 |
| Rendering only from pinned, digested inputs | 0006, 0034 |
The parked co-testing work, and the push design delivery retired, are in
docs/adr/deferred/.
nvm use # Node 24.21.0, pinned in .nvmrc
npm ci
npm run verify # lint, format, typecheck, ADR contract, tests + coveragenpm run lint:adrs alone runs the decision-record contract, and npm test
runs the suite without enforcing coverage. npm run test:coverage (part of
npm run verify) enforces the ratchet in vitest.config.ts: statements
99.46%, branches 97.72%, functions 100%, lines 99.41%.
CONTRIBUTING.md: Conventional Commits, PR flowVERSIONING.md: the versioning contractSECURITY.md: reportingAGENTS.md: the one agent contract every tool reads;CLAUDE.mdimports it and adds Claude-specific notes only