Pending Implementation — Index¶
This file lists every ADR or spec that has been decided / designed but not yet implemented in code. It's the single place to look when you want to know "what's the latest un-implemented feature that's been discussed?"
How something gets on this list:
- An ADR with
implementation-status: pending(orin-progress) lives here until its code ships. - A spec with
status: proposedlives here until it's authored asactiveagainst shipping code.
How something leaves this list:
- The paired code PR merges. In the same PR, the ADR flips to
implementation-status: implemented(and any superseded older ADRs get theirstatus: superseded+superseded-byset). Move the row to the Recently shipped section at the bottom of this file (kept for ~6 weeks as historical context, then pruned).
This file is hand-maintained in the same PR as any ADR/spec status change. Future work may script generation from frontmatter — for now, the human-written list is small enough that keeping it in sync is trivial.
See CHANGE-MANAGEMENT.md for the full protocol and
the doc change protocol in contributing.md §"Doc change protocol" for the operative rules.
Currently pending (newest first)¶
| ADR / Spec | What it ships | Implementation status | Date queued | Owner |
|---|---|---|---|---|
| (none) | All accepted ADRs are implemented. New entries land here when a docs-only ADR PR merges ahead of its paired code PR. | — | — | — |
Recently shipped (last ~6 weeks; older entries are pruned)¶
| ADR / Spec | What it shipped | Date shipped | Branch |
|---|---|---|---|
| ADR-0006 | Backend internal/margin/ evaluator + tick-replayer. WS reconnect hook (user:reconnect pub/sub) replays price_ticks since last_seen:{userId} and closes any positions that breached 50% at the breach price. 5-minute backstop sweeper catches stranded offline users. Pre-FT replay closes pre-FT washouts at their breach price before the FT snapshot. |
2026-05-24 | feat/amm-cfd-redesign-v1 (backend), feat/amm-cfd-redesign-v1-impl (docs) |
| ADR-0005 | internal/sportmonks/postmatch.go extended with CFDCloser + MarginReplayer interfaces. positions.Service.CloseAtFTSnapshot enumerates every open position for the FT'd instrument and closes each at the snapshot current_price with reason=auto_exit_ft. Legacy buy-and-hold path runs alongside during rollout. |
2026-05-24 | feat/amm-cfd-redesign-v1 (backend), feat/amm-cfd-redesign-v1-impl (docs) |
| ADR-0004 | Migrations 000024–000026 (cfd_positions, margin_events, instrument imbalance/k_mod cols). Two new Lua scripts (position_open.lua, position_close.lua) with atomic equity walk + cross-instrument margin checks. New REST surface POST/GET/PATCH/POST /api/positions/... via internal/positions/. SL/TP worker (internal/positions/stopwatch.go) tails price:*. Per-system-close push notifications (washout, SL/TP, FT auto-exit, margin call). FE BookPositionModal + PositionsPage + portfolio WS consumer + API client. |
2026-05-24 | feat/amm-cfd-redesign-v1 (backend + frontend), feat/amm-cfd-redesign-v1-impl (docs) |
| ADR-0010 | Partial UNIQUE index on users.phone (legacy empty rows allowed); 409 phone_taken error path on duplicate. Closes the "one phone, N accounts" abuse vector. No SMS OTP — explicit cost/UX trade-off. |
2026-05-22 | feat/pre-reg-backend, feat/pre-reg-frontend, feat/pre-reg-docs |
| ADR-0009 | Frontend: fixed 3 misleading "+500 bonus" strings to match v2 economics (referrer-only, on first trade). Removed the fake WelcomeCelebration referee toast. Wired ?invite=<id> end-to-end alongside ?ref= so per-link analytics works. Backend already correct — pure FE work + comment tightening in bonus.go. |
2026-05-22 | feat/pre-reg-backend, feat/pre-reg-frontend, feat/pre-reg-docs |
| ADR-0008 | Single-name registrations allowed (BE drops empty-lastName check; FE tightens nameLock to split.first && split.last). Age min 18, no upper bound (both tiers). New public route GET /api/public/referral/validate that the form calls on debounce. |
2026-05-22 | feat/pre-reg-backend, feat/pre-reg-frontend, feat/pre-reg-docs |
| ADR-0007 | New Fiber middleware ComingSoonGate(store, allowAdmin=true) on the protected route group (returns 503). Frontend gate stays as UX layer. Closes the curl-around-frontend gap and resolves the tutorial-vs-coming-soon redirect loop as a free consequence (FE guards added in Register.tsx, TutorialOverlay.tsx, App.tsx). |
2026-05-22 | feat/pre-reg-backend, feat/pre-reg-frontend, feat/pre-reg-docs |
Why this file exists¶
The change-management system (Living Spec + ADR + per-commit walkthrough) is excellent at
capturing the history of what was decided and the current truth of what runs. It
was less good at answering the question: "what's been designed but not yet built?" A
contributor browsing architecture/decisions/ could see ADRs with status: accepted but
couldn't tell from the status alone whether the code reflecting them had landed yet.
PENDING.md is the answer. One place to look. The frontmatter field
implementation-status: pending on each ADR is the source of truth; this file is the index.