Each ADR captures one architectural decision that was hard to reverse, had non-obvious tradeoffs, and would be questioned later. Format follows MADR lightly. ADRs are immutable once Accepted — if a decision changes, a new ADR supersedes the old one.
| # | Title | Status | Date |
|---|---|---|---|
| ADR-0001 | 0G Chain (Aristotle) + Phala dstack TDX as the privacy platform | Accepted | 2026-05-11 |
| ADR-0002 | SD-JWT VC for selective disclosure over PCD or zkSNARK Groth16 | Accepted | 2026-05-11 |
| ADR-0003 | Per-receipt RA quote with report_data binding over boot-quote binding |
Accepted | 2026-05-11 |
Add a new file ADR-NNNN-short-slug.md when:
- The decision affects component boundaries, data flow, or protocol semantics.
- The decision is hard to reverse (chain choice, credential format, enclave platform).
- The decision has at least two viable alternatives the team considered and rejected.
- A future maintainer will ask "why did we do it this way?"
Do not write an ADR for:
- Library version bumps, lint rules, formatting — these belong in the commit message.
- Decisions with one obvious answer ("use HTTPS").
- Implementation details — ADRs are for why, not how.
Copy any of the three ADRs above as a starting point — same MADR-lite structure (Context / Decision / Alternatives Considered / Consequences / References).
When a new ADR replaces an old one:
- Set the new ADR's
Supersedes:field to the old ADR number. - Set the old ADR's
Status:toSuperseded by ADR-NNNN. - Do not edit the old ADR's body. The historical record is the point.