Pre-1.0 · one maintainer · Stripe and cards only · no SDKs (client libraries) yet · no production users yet. Docs describe v0.9.1 (29 Oct 2026) · What’s new →
ADR-NNN: Short title that states the decision
Copy this into a new file to start a design record.
# ADR-NNN: Short title that states the decision
**Date:** YYYY-MM-DD**Status:** Proposed | Accepted | Superseded by ADR-XXX | Deprecated
<!--Status field uses one of:- "Proposed": under discussion, not yet committed to.- "Accepted": decision in effect.- "Accepted (amended YYYY-MM-DD)": the ADR has an amendment section added later. Keep the reason in the amendment, not in the status line.- "Superseded by ADR-XXX": a later ADR replaces this decision. Keep the file; the history is the point.- "Deprecated": no longer in effect but not replaced by a new ADR.
Date is when the ADR was first written. Amendments go at the end of thefile under "## Amendment YYYY-MM-DD", and the Summary is updated to thecurrent rule.
Write for a reader who has not seen the code or the discussion. Seedocs/dev/writing-style.md.-->
## Summary
Two to five plain sentences: what was decided, why, and what it meansfor the code or the operator. A reader who stops here should know thecurrent rule. Keep it current when the ADR is amended.
## Context
What changed in the world, the codebase, or the operator experiencethat triggered this decision? Quote concrete signals: a bug report,a verified cross-platform pattern, a customer ask. Don't inventabstract justifications.
If the decision is anchored on industry shape ("Stripe parity", "bestpractice"), this section must quote verified source lines from atleast 2-4 reference platforms. One platform is an anecdote, notresearch. Verify the sources before writing.
## Decision
The decision itself, in one or two paragraphs. State what's done, notwhy (that's the next section). Be precise: name the affectedinterfaces, tables, files, migrations.
## Why this design
Why the chosen approach over alternatives. Name the principle itapplies in plain words, so a reader without project history canfollow it.
## Alternatives considered
For each alternative seriously discussed:- **A. <Name>:** one-paragraph description, then the rejection reason.
Discard fake alternatives ("do nothing", "rewrite everything"). Thelist should show that the chosen design was non-obvious.
## Consequences
### Positive- What gets better, named concretely.
### Risks / open items- What gets harder, what we're trading off, what's deferred and why.- Schema migration risks (data loss, downtime).- Operator-UX surprises (e.g. semantic changes to existing fields).- Follow-up work that's NOT in this ADR's scope.
## References
- Related ADRs (cite by number)- Migration numbers (`migration 00XX`)- External docs / source lines (markdown links, NOT bare URLs)