ADR index¶
Fairwave records significant architectural decisions as ADRs (Michael Nygard format, kept short). An ADR is immutable once accepted; superseding decisions get a new ADR that links back.
| # | Title | Status | Date |
|---|---|---|---|
| 0001 | Mobile core: Open5GS instead of Magma | Accepted | 2026-08-02 |
| 0002 | Ship 4G EPC first; gate 5G SA/NSA | Accepted | 2026-08-02 |
| 0003 | Control plane language: Go (not Rust) | Accepted | 2026-08-02 |
| 0004 | Peering data plane: WireGuard | Accepted | 2026-08-02 |
| 0005 | Breakout: edge NAT local-first, hub optional | Accepted | 2026-08-02 |
| 0006 | SIM credential storage: HSM-ready AES-GCM at rest | Accepted | 2026-08-02 |
| 0007 | Operator auth: WebAuthn + TOTP + bootstrap token TTL | Accepted | 2026-08-02 |
| 0008 | TX gating: compile-time flag + runtime ack + allow-list | Accepted | 2026-08-02 |
| 0009 | RF backend: srsRAN Project 4G-first, OAI as alt | Accepted | 2026-08-02 |
| 0010 | UE identifier minimization: hash-at-rest, no IMSI in logs | Accepted | 2026-08-02 |
| 0011 | Onboarding: captive portal anchor, not an ePDG | Accepted | 2026-08-02 |
| 0012 | Config: three-file YAML + env; jsonschema validation | Accepted | 2026-08-02 |
| 0013 | Lab eSIM (SM-DP+) stack: SGP.22-shaped RSP, JSON transport, lab-only | Accepted | 2026-08-04 |
Conventions¶
Each ADR has Context → Decision → Consequences → Alternatives considered. Rejected-but-plausible options stay written down so the next contributor doesn't re-litigate them.