Skip to main content

Appendix G: Architecture Decision Record (ADR) Standard

An ADR records a significant decision, its evidence, trade-offs and accountable approval. It does not turn an agent’s recommendation into organizational authority. This is the full reference; agents use the compact s4u-adr operating procedure. The selected project profile identifies who may accept architecture, security and business decisions.

1. ADR Template

Use the following fields, with unknowns made explicit. A filled template is not proof that the decision was reviewed.

# ADR-NNNN: Descriptive Title

**Created**: YYYY-MM-DD
**Accepted**: Pending
**Status**: Proposed
**Accountable decider(s)**: Role and identified authorized person; pending if unknown
**Contributors**: Human and AI analysis/review contributors, with relevant run references
**Approval reference**: Pending; bind to exact accepted revision when authorized
**Supersedes**: None, or ADR-NNNN

## Context
The problem, approved business constraints, system boundaries and evidence.
Distinguish observed facts, estimates, assumptions and unresolved questions.

## Decision context
- Latency:
- Dependency surface:
- Debuggability:
- Reversibility:
- Blast radius:
- Cost (compute/token spend):
- Alternative considered:

## Decision
A specific proposed change, scope, compatibility constraints and acceptance conditions.

## Consequences
### Positive
Expected benefits and how they will be measured.
### Negative
Known costs, risks and uncertainty; do not invent a trade-off to fill this heading.
### Neutral
Other affected systems and necessary operational changes.

## Alternatives Considered
Credible options, including the status quo when viable, and evidence-based reasons.
If only one feasible option is known, explain the constraints and search limits.

## Verification and follow-up
Independent acceptance evidence, owner, unresolved questions and review trigger.

Template Usage Notes

  • Title states the decision, not merely the problem.
  • Created records drafting; Accepted remains pending until actual authorization. Record retroactive documentation honestly.
  • Accountable decider(s) identifies authorized human responsibility. AI belongs under Contributors, with useful model/tool/version or run references. No EU AI Act article is assumed to require an AI agent to be a decider.
  • Approval reference identifies the exact approved content revision and approval event. An approval of a different draft does not transfer automatically.
  • Context should stand alone without reproducing private transcripts or hidden model reasoning. Link authorized evidence and concise rationales.
  • Consequences distinguishes observed outcomes from expectations. “No downside identified in the assessed scope” is more honest than a fabricated disadvantage.
  • Decision context uses the seven axes in methodology §2.7. Estimates need a basis; deferred measurement needs a reason and follow-up.

2. File Location and Naming Convention

Store the register in docs/adr/, indexed by docs/adr/README.md.

ElementReference convention
FilenameADR-NNNN-kebab-case.md
IdentityIssued once; never reused
AllocationSerialized register/reservation, including concurrent proposals
Legacy conventionExisting NNNN-slug.md files may remain; the integrity checker recognizes both

The next number on main is not a safe allocation when proposals are concurrent. Reserve an identity through the project’s chosen mechanism. Without a reservation mechanism, keep a temporary draft identity and reconcile before acceptance. A sequential number records identity, not temporal ordering or proof of approval.

3. Status Lifecycle

Status Definitions

StatusMeaning
ProposedUnder discussion; not binding
AcceptedAuthorized for its stated scope and exact revision
DeprecatedNo longer applicable; reason and authority recorded
Superseded by ADR-NNNNReplaced by an accepted, cross-linked decision

Proposed vs. Accepted

A single commit may contain both drafting and acceptance only when the authorized person actually approved that exact content. PoC speed, a merge, agent agreement and passing tests do not create missing authority. Acceptance of architecture is not automatically authorization to change business policy or release to production.

Deprecated vs. Superseded

Use Deprecated when no replacement decision exists. Use Superseded when another accepted ADR replaces the decision. A withdrawn proposal retains its issued identity and reason; do not recycle its number.

4. Supersession Tracking Pattern

Step 1: Update the Original ADR

Preserve its accepted body. Change the status to Superseded by ADR-NNNN after the replacement is accepted; record transition provenance without rewriting the original rationale.

Step 2: Add a Supersedes Field to the New ADR

The replacement contains Supersedes: ADR-NNNN, the accountable decider, acceptance reference and exact replacement scope. A draft replacement does not itself deactivate an accepted decision.

Step 3: Reference the Original in Context

State why the decision changed: new constraints, new evidence, an earlier factual error or a mistaken choice. Do not manufacture a story in which the original was necessarily sound.

Worked Example: ADR-0004 to ADR-0013

An illustrative project initially accepts synchronous delivery to a partner API. Observed outage behaviour later shows that retrying requests can duplicate an external effect. A replacement ADR introduces durable dispatch and receiver-side deduplication. It records the failure evidence, compatibility plan and acceptance tests. Both ADRs link to each other after the authorized replacement is accepted.

The numbers and scenario are illustrative, not evidence of a deployed implementation.

5. When to Write an ADR

Write one for a non-obvious decision whose effects or trade-offs future maintainers need to understand.

ADR-Worthy Decisions

Decision classTypical concern
Technology and architectureFrameworks, data model, dependency or execution model
IntegrationAPI/event contracts, delivery semantics, ownership boundaries
Security and privacyAuthorization, tenant isolation, retention, model-data routing
AI-assisted deliveryAgent authority, evaluation oracle, approval and release boundaries
Testing and operationsTest strategy, migration compatibility, rollback or recovery
DeferralExplicitly postponed capability, scope limits and review trigger

A “config-only” change can alter authorization or isolation. A “bug fix” can change an externally relied-upon contract. Assess effects and the accepted design, not the label or patch size. A PoC using real or sensitive data still requires its applicable protections.

The "Future Engineer" Test

Would a maintainer ask why this approach was chosen, or unknowingly remove an important constraint? Record or reference the decision. Routine implementation of an existing pattern normally needs the relevant ADR link, not another record.

6. When NOT to Write an ADR

Mechanical refactoring, routine tuning within approved bounds, and changes that simply implement an accepted pattern can reference existing decisions. Confirm that they do not change permissions, business meaning, public contracts, data semantics or recovery behaviour. If they do, use the appropriate decision and approval process regardless of the number of code changes.

7. ADR Quality Checklist

  • Context, scope and evidence are understandable without private conversation history.
  • Facts, estimates and unknowns are distinguishable; no unsupported marketing claims.
  • Decision and acceptance conditions are actionable.
  • Credible alternatives and known consequences are recorded without invented facts.
  • Exact revision and accountable approval match the stated status.
  • Relevant business/security authority exists; architecture approval does not substitute for it.
  • Supersession links are bidirectional; errata do not conceal changed decisions.
  • The register check ran against the stated, nonempty subject; its limits are reported.

8. ADR Maintenance

Living Documents, Immutable History

Preserve accepted decision bodies. To change a decision, accept a superseding ADR. To correct a factual error without changing the decision, append or link a clearly marked erratum with author, evidence, date and approval; retain the original wording and version. Errata must not be used to change accepted meaning.

There is no fixed number of Git commits per ADR. Draft iterations, acceptance metadata, status changes and explicit corrections are legitimate history.

Periodic Review

At meaningful milestones, examine pending proposals, accepted decisions affected by new evidence, and undocumented decisions. Resolve them with the responsible role. Age alone does not prove a decision or blocker is obsolete. Retroactive records distinguish the actual decision date from the documentation date; use Unknown where evidence is absent.

ADR Index in CLAUDE.md

Keep the complete index in docs/adr/README.md. Project instructions contain a pointer and only the currently relevant decision references, not a duplicate, ever-growing table. Index freshness is distinct from decision correctness.

9. Example ADR Inventory

A synthetic register illustrates complementary decision classes:

ADRDecisionStatus
0001Define business approval and execution boundariesAccepted
0004Synchronous partner deliverySuperseded by ADR-0013
0013Durable partner dispatch with deduplicationAccepted
0014Evaluate a new model routeProposed

Patterns Visible in the Inventory

Status, authority and scope matter more than the number of records. A proposal is not an implemented capability; a frequent ADR cadence is not a productivity or quality metric.

10. Worked Example: A Complete ADR

This example is intentionally Proposed, with synthetic evidence identifiers. It demonstrates record shape, not a validated architecture or production receipt.

# ADR-0014: Pin model routing to an approved project profile

**Created**: YYYY-MM-DD
**Accepted**: Pending
**Status**: Proposed
**Accountable decider(s)**: Architecture and information-security owners; pending
**Contributors**: BA, platform engineer, AI analysis run (synthetic example)
**Approval reference**: Pending

## Context
The project allows more than one model provider, but each project has distinct
data-handling and capability permissions. Provider selection must not widen
the approved data audience. A model name alone is not evidence of private
networking, retention settings or permitted processing.

## Decision context
- Latency: Not measured; compare approved routes before selection.
- Dependency surface: One replaceable routing adapter plus provider clients.
- Debuggability: Record route/profile revision and redacted error receipts.
- Reversibility: New requests can return to the previous compatible profile;
in-flight runs retain their pinned version or use a reviewed migration.
- Blast radius: All model-bound calls in the selected project.
- Cost: Measure representative tasks; budget limits remain explicit.
- Alternative considered: Per-agent credentials; rejected provisionally because
policy changes and audit coverage would be distributed.

## Decision
Propose a versioned routing profile that binds allowed models, data classes,
capabilities and operational limits. Reject requests outside that profile.
Do not treat this record as permission to contact a new provider.

## Consequences
### Positive
A shared policy location can make review and replacement easier.
### Negative
The router becomes a critical dependency. Incorrect policy can block legitimate
work or allow unintended processing; both outcomes require tests.
### Neutral
Provider-specific controls still require separate verification.

## Alternatives Considered
- Per-agent configuration: greater flexibility but more policy distribution.
- One fixed provider: simpler initial operation, less portability.

## Verification and follow-up
Security owner verifies the actual processing route and applicable agreement.
Platform engineer tests allowed/denied data classes, revoked profiles and
in-flight version handling. BA checks that user-visible limitations are clear.
No tests or provider controls are claimed verified by this example.

11. Anti-Patterns

The Retroactive Justification

Do not invent alternatives or earlier approval. A retroactive record states what evidence exists and what is unknown.

The Empty Consequences

Do not produce an all-positive sales narrative. Equally, do not invent a negative consequence to satisfy a template. Record assessed scope, known trade-offs and remaining uncertainty.

The Novel ADR

Reference the established pattern for another ordinary instance. Create a new decision when effects or constraints change.

The Abandoned Proposal

Keep an owner and review trigger. Withdraw with a reason or obtain actual approval; time passing does not make a proposal accepted.

12. Automated ADR Enforcement

The shipped scripts/check-adr-register.sh checks register integrity: nonempty discovery, unique numeric identities, exact index entries and both directions of supersession. It returns nonzero for detected defects or unassessed inputs. It does not establish decision merit, authorization, cycle freedom or implementation conformance.

The ADR Gate Hook

No ADR-presence Stop hook is shipped by this reference. The earlier inline example has been retired: it examined only a working-tree diff against HEAD, suppressed errors, mishandled some paths and treated any ADR modification as relevant. Its exit-0 output did not ensure the model or user was asked a question.

Key Design Decisions

If an adopter implements a reminder, specify the exact change range, expected file set, missing-input behaviour and actual delivery contract for that host. Treat a reminder as feedback, not an unbypassable control. Hook reference.

What This Catches

MechanismEvidence it can provideWhat it cannot prove
Register integrity checkAssessed files, duplicate/index/link defectsValid decisions or authorized acceptance
Optional tested path reminderA matched change needs considerationThat an ADR is needed, relevant or approved
Reviewed decision recordRationale and exact accountable acceptanceThat implementation follows it
Independent implementation tests/reviewScoped conformance evidenceUniversal correctness or release authority

Complementary Practice: ADR Index in CLAUDE.md

Use a small pointer to the canonical register. When mirroring ADRs into live documentation, retain identity and source revision, admit only publication-authorized material and validate the rendered bundle. Byte freshness is not semantic or privacy approval.