Skip to main content

Architecture Decision Records

ADRs capture significant architectural and design decisions that are hard to reverse, affect multiple stories, or will confuse future engineers.

Each ADR is immutable once Accepted. Never modify an existing ADR — create a new ADR with Supersedes: ADR-NNN instead.

ADR gate (Story 041): Any architectural change MUST have an Accepted ADR before implementation begins. CODEOWNERS enforces @architect approval on all changes to docs/adr/.


ADR Registry

ADRTitleStatusDateSuperseded By
ADR-001PostgreSQL 16 Schema Design StandardsAccepted2026-02-21
ADR-005IAM Domain Boundary — role management, audit logging, Keycloak syncAccepted2026-02-21
ADR-006Bulgarian Vehicle API Integration Strategy — МВР, АПИ, ГО, ВиньеткаAccepted2026-02-25
ADR-007Payment Gateway Selection for Membership FeesDecision Deferred2026-02-25

ADR Lifecycle

Proposed → Accepted → Deprecated
↘ Superseded by ADR-NNN

Status Definitions

StatusMeaningWho can set it
ProposedWritten and submitted for review; not yet bindingAny agent
AcceptedReviewed and approved by @architect — binding for all implementation@architect only
RejectedReviewed and rejected — kept for history and reasoning@architect only
DeprecatedNo longer applicable but kept for historical context@architect only
SupersededReplaced by a newer ADR — link to replacement@architect only

Status Transition Rules

FromToTriggerWhat must be updated
ProposedAccepted@architect approves the PRADR status field; this index table
ProposedRejected@architect rejects with reasoningADR status field; add rejection reason to ADR body
AcceptedDeprecatedDecision is no longer valid (technology retired, etc.)ADR status field; add deprecation note with date
AcceptedSupersededNew ADR replaces this oneOld ADR: status + link to new ADR; New ADR: Supersedes: ADR-NNN field

When to Write an ADR

Requires an ADR

CategoryExamples
DocusaurusSwitching version, adding/removing major plugins, changing preset
ArgoCDChanging sync strategy (manual ↔ auto), adding new watched component
InfrastructureNew service in docker-compose, new Traefik route, new external dependency
DatabaseNew database technology, migration strategy change
SecurityNew auth mechanism, OAuth2 client type change, cookie policy change
BackendNew Spring module, new cross-cutting pattern (Outbox, Saga, CQRS)
FrontendNew state management library, UI framework change

Does NOT Require an ADR

  • Bug fixes and hotfixes
  • UI copy changes
  • Adding a new endpoint in an existing domain following established patterns
  • Adding or improving tests
  • Minor/patch version dependency bumps

Creating a New ADR

  1. Copy the template: adr-template.md
  2. Name the file: adr-NNN-short-title.md (next sequential number)
  3. Fill in all sections (Context, Decision Drivers, Considered Options, Decision Outcome, Consequences)
  4. Open a PR against main in rcb-docusaurus
  5. CODEOWNERS automatically requests @architect review
  6. Do NOT start implementation until ADR status is changed to Accepted
  7. Reference the ADR in your implementation PR: Implements ADR-NNN
  8. Update this index table after the ADR is accepted

ADR Template

docs/adr/adr-template.md