This directory contains Architectural Decision Records (ADRs) for the Keystone Core project.
What is an ADR?
An Architectural Decision Record (ADR) is a document that captures an important architectural decision made along with its context and consequences.
ADRs help us:
- Document the reasoning behind significant decisions
- Communicate decisions to the team and stakeholders
- Provide historical context for future developers
- Track the evolution of the architecture over time
When to Write an ADR
Write an ADR when making decisions that:
- Affect the overall system architecture
- Are difficult to reverse or have long-lasting impact
- Involve trade-offs between competing concerns
- Affect security, performance, or scalability
- Change fundamental assumptions or patterns
- Introduce new dependencies or remove existing ones
- Affect the public API or user experience significantly
Examples:
- Choosing a database technology
- Adopting a new messaging pattern
- Changing authentication mechanisms
- Selecting a framework or major library
- Defining API versioning strategy
ADR Status
| Status | Description |
|---|---|
| Proposed | Under discussion, not yet accepted |
| Accepted | Decision has been made and is in effect |
| Deprecated | Decision is being phased out |
| Superseded | Replaced by a newer ADR |
| Rejected | Proposal was considered but not accepted |
ADR Index
| ADR | Title | Status | Date |
|---|---|---|---|
| ADR-0000 | ADR Template (Full) | Accepted | 2024-01-01 |
| ADR-0001 | ADR Template (Short) | Accepted | 2024-01-01 |
Creating a New ADR
Copy the template:
cp docs/adr/0000-adr-template.md docs/adr/NNNN-short-title.mdUse the next sequential number (NNNN)
Fill in all sections of the template
Submit as a pull request for review
Update this index after the ADR is accepted
ADR Lifecycle
┌──────────┐ Review ┌──────────┐
│ Proposed │ ─────────────→ │ Accepted │
└──────────┘ └──────────┘
│ │
│ Reject │ Supersede
▼ ▼
┌──────────┐ ┌────────────┐
│ Rejected │ │ Superseded │
└──────────┘ └────────────┘
│
│ or Deprecate
▼
┌────────────┐
│ Deprecated │
└────────────┘Best Practices
- Be concise but complete: Include enough context for future readers
- Focus on the “why”: Explain the reasoning, not just the decision
- Document alternatives: Show what was considered and why it was rejected
- Keep it current: Update status when decisions change
- Link to related ADRs: Reference related decisions
- Include examples: Show how the decision applies in practice
References
- ADR GitHub Organization
- Documenting Architecture Decisions - Michael Nygard
- ADR Tools