# Domain model (docs/architecture/domain-model.md)

Truth document. Use for: the entities the system is about — what they are, how they relate, and who owns their state. The vocabulary here must match the glossary and the code; when they disagree, fix the disagreement, don't document around it.

Required: **Entities**, **Relationships**. Optional: Lifecycle states, Invariants.

```markdown
---
type: domain-model
description: "{at most 300 characters: what this document settles and where its boundary sits}"
---

# Domain Model

## Entities

| Entity | What it is | State lives in |
| ------ | ---------- | -------------- |
| {Entity} | {one line} | {table / slice / service} |

## Relationships

- **{EntityA} 1—N {EntityB}:** {the meaning of the link}
- **{EntityB} N—N {EntityC} via {join}:** {meaning}

## Lifecycle states

{Only for entities with real state machines.}

- **{Entity}:** draft → active → archived, moved by {what moves it between states}

## Invariants

- {A relationship or state rule that must always hold, stated as a constraint}
```
