Architecture Decision Records — Index¶
This index lists every ADR in ftl-docs/architecture/decisions/.
An ADR captures one decision that shaped the system: what we chose, why, what we rejected,
and what we're now committed to maintaining. ADRs are append-only. Once accepted, only
status: and superseded-by: may change.
See CHANGE-MANAGEMENT.md at the repo root for the protocol, and _TEMPLATE.md for the
required structure.
All ADRs (newest first)¶
| # | Title | Status | Implementation | Date | Supersedes | Superseded by | Affects spec |
|---|---|---|---|---|---|---|---|
| 0012 | Retire POST /api/trade; CFD as sole trading mechanism | accepted | implemented | 2026-06-01 | — | — | amm-pricing, cfd-pricing-and-wallet |
| 0011 | FT freeze must span both legacy auto-sell and CFD close-out steps | accepted | implemented | 2026-06-01 | — | — | amm-pricing |
| 0010 | Phone number policy — format + uniqueness, no SMS OTP | accepted | implemented | 2026-05-22 | — | — | signup-and-onboarding |
| 0009 | Referral attribution — codify v2 economics + wire per-invite tracking | accepted | implemented | 2026-05-22 | — | — | referrals |
| 0008 | Registration profile policy (single-name, age 18+, pre-login referral validation) | accepted | implemented | 2026-05-22 | — | — | signup-and-onboarding, referrals |
| 0007 | Coming-soon enforced as backend hard gate (not frontend-only) | accepted | implemented | 2026-05-22 | — | — | signup-and-onboarding |
| 0006 | Honest washout via backend tick-replay (online == offline outcome) | accepted | implemented | 2026-05-22 | — | — | amm-pricing, wallet-and-margin |
| 0005 | Close all open CFD positions at current_price at Full Time | accepted | implemented | 2026-05-22 | 0003 | — | amm-pricing |
| 0004 | Adopt CFD-style margin trading model (replace buy-and-hold AMM) | accepted | implemented | 2026-05-22 | 0001 | — | amm-pricing, wallet-and-margin |
| 0003 | FT freeze + drain wait + system-sell at flat price | superseded | implemented | 2026-05-22 | — | 0005 | amm-pricing |
| 0002 | Redis Lua for atomic trade execution (vs Service Bus FIFO) | accepted | implemented | 2026-05-22 | — | — | amm-pricing |
| 0001 | Linear bonding-curve AMM (price = base + k × net_shares_sold) |
superseded | implemented | 2026-05-22 | — | 0004 | amm-pricing |
Implementation column added 2026-05-22 to distinguish decision accepted from code shipped. See ../../PENDING.md for the un-implemented index and ../../CHANGE-MANAGEMENT.md §"Implementation status" for the convention.
Status legend¶
- proposed — drafted, under review, not yet binding.
- accepted — approved and in force as a decision. (See Implementation column for whether the code reflects it yet.)
- superseded — replaced by a later ADR. The
superseded-by:field links forward. - rejected — considered and declined. Kept in the directory as a record so the same proposal isn't re-litigated.
Implementation legend¶
- pending — code change not yet shipped. ADR-as-build-guide. Listed in
PENDING.md. - in-progress — paired code PR is open / merging.
- implemented — code shipped; ADR matches live behavior.
Adding a new ADR¶
- Find the next number:
ls architecture/decisions/ | grep -E '^[0-9]{4}-' | sort | tail -1. - Copy
_TEMPLATE.mdtoNNNN-<kebab-slug>.md. Use a descriptive slug (0004-amm-formula-add-volatility-damper.md, not0004-changes.md). - Fill in every YAML field.
affects-specs:andaffects-code:are required. - If this ADR supersedes an older one: set
supersedes: NNNNhere, AND open the older ADR and set bothstatus: supersededandsuperseded-by: <this number>. - Add a row to the All ADRs table above (newest first).
- Update the affected spec's
decisions:frontmatter list and rewrite the relevant section.
Numbers are never reused. Skipping a number (e.g. for a rejected proposal) is fine — keep the
rejected file in place with status: rejected.