Architecture Decision Records (ADRs) document significant architectural and process decisions for future reference. This repository uses the MADR format (Markdown Architectural Decision Records).
All ADR documents MUST include YAML frontmatter with these fields:
---
name: adr-name
description: |
When to load/apply this ADR. Include trigger conditions.
decision: Imperative verb + specific action + context.
status: accepted
---| Field | Description |
|---|---|
name |
Kebab-case identifier matching filename without number prefix |
description |
When to load/apply this ADR; trigger conditions for agents (1-3 lines) |
decision |
One-line actionable outcome; imperative verb format |
status |
One of: accepted, superseded, deprecated |
- Kebab-case identifier (e.g.,
use-adrs,adopt-tdd) - Must match filename without number prefix (e.g.,
0000-use-adrs.md→use-adrs) - Do NOT include the ADR number in the name
- When to load or apply this ADR
- Include trigger conditions agents can match
- 1-3 sentences using format: "Apply when {condition} or {alternative condition}."
- Must be sufficient for agents to decide relevance without reading full ADR
- One-line actionable outcome
- Use imperative verb format:
{verb} {specific action} {location/context} - Must answer: "What do we do?"
- Agent must be able to apply directly without reading body content
One of:
| Value | Meaning | Agent Behavior |
|---|---|---|
accepted |
Decision is current | SHOULD apply when description matches |
superseded |
Replaced by another ADR | MUST NOT apply; load superseding ADR instead |
deprecated |
No longer applicable | MUST NOT apply; decision is obsolete |
---
name: use-adrs
description: |
Apply when deciding how to document architectural decisions
or questioning why ADRs are used in this repository.
decision: Use MADR format ADRs in docs/adr/ for significant architectural and process decisions.
status: accepted
------
name: use-wiki-docs
description: |
Apply when deciding where to store documentation.
Note: This ADR has been superseded - see body for replacement.
decision: Store documentation in GitHub wiki.
status: superseded
---When status: superseded, the ADR body MUST reference the superseding ADR:
## Status
Superseded by [ADR-0042: Use In-Repo Documentation](0042-use-in-repo-docs.md)---
name: use-legacy-auth
description: |
Apply when implementing authentication.
Note: This ADR is deprecated - do not apply.
decision: Use legacy authentication system for all services.
status: deprecated
---When status: deprecated, the ADR body MUST explain why it's no longer applicable.
| Scenario | Action |
|---|---|
| Checking if ADR applies to current task | Read frontmatter only |
| Applying a decision | Read frontmatter decision field |
| Understanding rationale or alternatives | Read full ADR body |
ADR status is superseded or deprecated |
Read body for replacement/reason |
accepted: SHOULD apply the decision when the description matches your contextsuperseded: MUST NOT apply. Read the## Statussection in body to find replacement ADRdeprecated: MUST NOT apply. Read body to understand why it's obsolete
When multiple ADRs have overlapping description triggers:
- Check
status- onlyacceptedADRs should be applied - Prefer newer ADR (higher number) when both are
accepted - If still ambiguous, read full ADR bodies to determine which is more specific
- 0000-use-adrs.md - Use MADR format ADRs for architectural decisions
- 0001-skill-design-philosophy.md - Bootstrap defaults, defer to target repo
- 0002-automation-first-principle.md - Automate repetitive processes via scripts
See ADR 0000 for guidelines on when to create ADRs and the MADR format.
- Copy template from existing ADR
- Number sequentially (e.g.,
0001-decision-name.md) - Add frontmatter with all required fields
- Follow MADR format for body content
- Run
npm run lintto validate
ADR frontmatter is validated during:
- Pre-commit hooks: Format and syntax validation via prettier
- CI pipeline: Markdown linting via markdownlint-cli2
- Manual check: Run
npm run lintto validate all ADR files
Required fields (name, description, decision, status) are enforced by convention.
Invalid frontmatter will cause YAML parsing errors when ADRs are loaded by agents.