Skip to content

The spec and its kinds

The spec of a project is a set of typed artefacts of 14 kinds. Main holds the agreed version; each workstream sees Main plus its own changes.

Artefacts and revisions

Every element of the spec is an artefact of one kind. Its id never changes; every edit writes a new, immutable revision. The app shows names, never ids; URLs and the API use ids; YAML uses names, as in kind/Name and Context/Name.

Names are unique per kind in their container: two aggregates of one bounded context cannot share a name, but the same name in two contexts is fine. Archiving is the soft delete: an archived artefact is read-only until it is restored.

The 14 kinds

GroupKindLives in
DomainSubdomainThe project
DomainBounded contextThe project
Context > ModelAggregate, Value object, EnumOne bounded context
BehaviourUse case, Event handler, Scheduled jobThe project or one bounded context
ContractsData contract, Read model, Integration eventThe project or one bounded context
ProductFeatureThe project
ProductGlossary termThe project, or one bounded context
ProductRoleThe project

The sidebar follows these groups. Aggregates, value objects and enums are reached through their bounded context, on its Model tab.

Main and workstreams

The spec you read depends on where you read it. Main is the agreed spec; a workstream sees Main plus its own changes; what an agent staged waits in a proposal until a person accepts it.

LayerWho writes itSeen in
MainOnly a published task.Main, and as the base of every workstream.
Workstream WS-nA person's direct edit, a person's accept of a staged revision, or a conflict resolution.That workstream.
StagedAn agent's spec_apply into the workstream's proposal.The proposal, until a person accepts it.

Every read names its scope: main, workstream:WS-n, or proposal:<id> for what an agent staged. Agents read workstream:WS-n while the spec of a change is in flight: that is where accepted changes are, until a task publishes them to Main. See Workstreams and Tasks and publishing.

References

Artefacts refer to each other by id: a use case to its roles, a property type to a value object, an event handler to the domain event or integration event that triggers it, a bounded context to the subdomains it implements. Renaming an artefact never breaks a reference.

Note

A reference to an artefact that is not live on Main blocks a publish until the task carries that artefact too.

Editing

People edit on each artefact's page. Every field saves as you go, with the revision it started from, so two people editing different fields both keep their edits, and an edit to the same field at once is refused with the current version.

Main is read-only. To change it, open a workstream, or use Fix on an artefact of Main, which opens a workstream and a task for it.

Next steps