Skip to content

Architecture Decisions (Standards Repository)

Decision records explain why a stack or pattern was chosen. They are not the agent contract.

Load for codingDocument
MUSTdocs/conventions/ and AGENTS.md
MUST NOT (routine tasks)docs/decisions/
MAY (new dependency, trade-off review)Relevant decision below

Status lifecycle

StatusMeaning
ProposedUnder discussion; not yet normative
AcceptedActive; canonical rules in conventions apply
SupersededReplaced by another decision; link the successor in the old file header
DeprecatedNo longer recommended; retained for history

When superseding a decision, update the old file status in its header, add a row with status Superseded, and point Canonical rules at the new convention or decision.


Concern tags

Filter the index by area: backend, frontend, infrastructure, tooling, process.


When to Write a Decision Here

Write a new file in docs/decisions/ when the standards repo adopts a new org-wide technology or reverses an existing one. Project-specific decisions belong in the consumer repository under docs/decisions/, not in this repo.

Do not use docs/adr/. All decision records for this repository live in docs/decisions/ with kebab-case filenames (no numeric prefix). The manifest field decisionsRoot points here.

File naming: docs/decisions/{kebab-case-topic}.md (no numeric prefix).

Filing steps:

  1. Copy the template from docs/conventions/shared/adr-template.md.
  2. Add a row to the index table below with Canonical rules pointing at the convention file agents MUST follow.
  3. Commit the decision and any convention updates in the same pull request.

Active Decisions Index

DecisionStatusConcernCanonical rules (agents use this)
agentic-development-as-primary-modelAcceptedprocessAGENTS.md, docs/conventions/shared/agentic-guardrails.md
clean-architecture-as-structural-foundationAcceptedbackenddocs/architecture/clean-architecture.md
cqrs-with-split-application-projectsAcceptedbackenddocs/conventions/backend/application-layer.md
litebus-as-mediatorAcceptedbackenddocs/conventions/backend/application-layer.md, api-layer.md
minimal-api-endpoint-classesAcceptedbackenddocs/conventions/backend/api-layer.md
contracts-projects-for-application-layerAcceptedbackenddocs/conventions/backend/application-layer.md
reactions-project-depends-only-on-abstractionsAcceptedbackenddocs/conventions/backend/application-layer.md
architecture-tests-as-enforcementAcceptedbackenddocs/conventions/backend/testing.md
outbox-pattern-as-reliability-escalationAcceptedbackenddocs/conventions/backend/reliability.md
turborepo-as-monorepo-toolAcceptedtoolingdocs/conventions/shared/monorepo-structure.md
openapi-typescript-client-generationAcceptedfrontenddocs/conventions/frontend/data-fetching.md
authjs-v5-authenticationAcceptedfrontenddocs/conventions/frontend/nextjs-app-router.md, data-fetching.md
animation-tailwind-first-framer-motion-escalationAcceptedfrontenddocs/conventions/frontend/components.md
idatabasecontext-over-per-aggregate-read-storesAcceptedbackenddocs/conventions/backend/query-read-strategy.md
transaction-pipeline-behaviorsAcceptedbackenddocs/architecture/clean-architecture.md, infrastructure-layer.md
pagination-conventionAcceptedbackenddocs/conventions/backend/query-read-strategy.md
opentelemetry-observabilityAcceptedinfrastructuredocs/conventions/backend/observability.md
api-versioning-policyAcceptedbackenddocs/conventions/backend/api-layer.md
signalr-for-real-time-updatesAcceptedinfrastructuredocs/conventions/shared/realtime-updates.md
multi-tenancy-defaultAcceptedbackendProject ADR required before implementation
adddd-executable-acceptance-testsAcceptedbackenddocs/conventions/backend/api-acceptance-tests.md, testing.md
validation-error-dual-contracts-placementAcceptedbackenddocs/conventions/backend/exception-hierarchy.md