cli · v0.1.1
Skills / domain-modeling/adr-format
Fixture. This page is the stdout of wayfinder skill domain-modeling/adr-format, run against a config with tracker value github cli and two registered ticket skills (grill-design, pre-mortem). Change either and this render changes with it.
A supporting file. domain-modeling/adr-format is disclosed by domain-modeling, which is where an agent is told to fetch it. It carries no station of its own on the route.
$ wayfinder skill domain-modeling/adr-format47 lines
1# ADR Format
2
3ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.
4
5Create the `docs/adr/` directory lazily — only when the first ADR is needed.
6
7## Template
8
9```md
10# {Short title of the decision}
11
12{1-3 sentences: what's the context, what did we decide, and why.}
13```
14
15That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections.
16
17## Optional sections
18
19Only include these when they add genuine value. Most ADRs won't need them.
20
21- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
22- **Considered Options** — only when the rejected alternatives are worth remembering
23- **Consequences** — only when non-obvious downstream effects need to be called out
24
25## Numbering
26
27Scan `docs/adr/` for the highest existing number and increment by one.
28
29## When to offer an ADR
30
31All three of these must be true:
32
331. **Hard to reverse** — the cost of changing your mind later is meaningful
342. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
353. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
36
37If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."
38
39### What qualifies
40
41- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
42- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
43- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
44- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
45- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
46- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
47- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.