MADR-lite format. An accepted ADR's decision statement is changed by superseding, never by rewriting.
Everything around it is amended in place, and deliberately: a status block
recording that a precondition has since been met (ADR-0003 carries one from
#109, sitting under its Decision heading precisely so nobody reads the decision
without it), a forward pointer to the later ADR that settled a question this one
left open, a correction to a claim that turned out to be false. Rewriting a
decision in place is what destroys the record; leaving a document knowably wrong
is not better than fixing it.
Whenever a later ADR changes an accepted one's standing — superseding its decision, retiring one of its consequences, or qualifying a claim it rests on — the row below gains an annotation naming that ADR, and the original text stays. Rows 0001 and 0005 carry two different flavours of this: 0010 retired a consequence of 0001, while 0022 only qualified 0005's title and explicitly leaves its decision standing.
| # | Title | Status |
|---|---|---|
| 0001 | UI toolkit: Slint + tray-icon (no webview) | accepted, spike-verified (its Linux tray consequence superseded by 0010) |
| 0002 | DDC backend: own dxva2 implementation on Windows | accepted |
| 0003 | Software dimming: overlay primary, gamma opt-in | accepted, spike-verified |
| 0004 | Display identity: stable EDID-derived IDs | accepted |
| 0005 | Concurrency: std threads + channels, no async runtime | accepted (title qualified on Linux by 0022) |
| 0006 | IPC transport & protocol | accepted |
| 0007 | Config schema, migrations, and persistence | accepted |
| 0008 | Licensing (MIT OR Apache-2.0; Slint royalty-free) | accepted |
| 0009 | Slint renderer: software renderer default | accepted |
| 0010 | Linux tray: ksni, not tray-icon | accepted |
| 0011 | Linux software dimming: probe the compositor, never assume it | accepted |
| 0012 | Binary-size budget raised 12 → 16 MB | accepted |
| 0013 | macOS DDC/CI: own thin backend (don't wrap ddc-macos) | accepted |
| 0014 | Perceptual brightness continuum (v2) | accepted |
| 0015 | Update check on by default (smart-notify) | accepted |
| 0016 | Windows distribution & signing (Inno + minisign + provenance) | accepted |
| 0017 | Engine shutdown & worker-lifecycle contract (generation + retired + bounded shutdown) | accepted |
| 0018 | App owns the continuum; the engine owns pacing (single write authority) | accepted |
| 0019 | Version ladder & release trains (v0.1.x Windows, v0.2 macOS, v0.3 Linux, v1.0) | accepted (its platform rows and its "no new platform" rule for patch releases superseded by 0024; the v1.0.0 row stands) |
| 0020 | Release integrity & signing readiness (no injection, gated publish, hermetic, Azure-ready) | accepted |
| 0021 | Tray-anchor coordinate contract (y-down normalized, unit named, two derived factors) | accepted |
| 0022 | Linux D-Bus: zbus, and the async executor already in the build | accepted |
| 0023 | x11rb stays on 0.13 until the Slint graph moves (declining #128) | accepted |
| 0024 | Preview artifacts ship on the patch train (v0.2/v0.3 re-mapped to "hardware-confirmed") | accepted |
Spike evidence lives on branches spike/eventloop, spike/ddc,
spike/overlay (code is not merged; findings are).