Skip to content
0

Decision records (ADR) ​

A short numbered record per decision that is hard to reverse: a dependency, a public contract, a piece of the architecture. Each record states the context, the decision and its consequences — good and bad — so that whoever meets the code later (a teammate, your future self, an AI agent) can tell a deliberate choice from an oversight before changing it.

Format ​

  • Status — Accepted, or Superseded by ADR-XXXX.
  • Date — when the decision shipped (its release).
  • Context — the forces that led to the decision.
  • Decision — what was decided, stated in the present tense.
  • Consequences — what gets better, and what gets worse.

Approved records are never rewritten. If the team changes its mind, a new record is written and the old one is marked superseded by it — like a new log entry that does not cross out the previous one. Nothing here is an implementation detail: the Architecture page and the API Reference cover those.

Records ​

#DecisionStatusDate
ADR-0001Safe Results instead of exceptionsAccepted2026-09-26
ADR-0002Singleton facades exposed as use* functionsAccepted2026-10-04
ADR-0003Framework adapters only on subpath exportsAccepted2026-09-20
ADR-0004Hexagonal layout with a pure coreAccepted2026-09-03
ADR-0005Docs as code: generated reference, four page kindsAccepted2026-09-26
ADR-0006Retire the Telegram and WhatsApp adaptersAccepted (amends ADR-0003)2026-10-18
ADR-0007WordPress roles are declared in the app, not created over RESTAccepted2026-10-18
ADR-0008Access is three orthogonal axes, not one role ladderAccepted2026-10-18
ADR-0009The @/ alias is used in src/, rewritten by tsc-aliasAccepted2026-10-18

Adding a record ​

Copy the shape of an existing record, number it sequentially and open it in the same pull request as the change it describes. The contributing contract lists what counts as a decision: a new runtime dependency, a public contract change, an architecture move.

Released under the MIT License.