Architecture Decision Records¶
An ADR captures one significant architectural decision: the context that forced a choice, the option taken, and the consequences that followed. Format is Michael Nygard's classic: Title, Status, Context, Decision, Consequences.
These records are immutable. A decision that changes is not edited in place, a new ADR supersedes it and both link, so the reasoning trail stays honest. This is the difference from the lessons log: lessons are debugging war-stories, pruned as they are absorbed; ADRs are decisions, kept as an append-only record. The forward-looking counterpart, what we set out to build, is the plan archive.
Agents do not read this directory automatically, only when a decision's rationale is in question (the same rule as history/ and backlog/).
Index¶
| # | Decision | Status |
|---|---|---|
| 0001 | Persist POD module state with memcpy, not JSON | Accepted |
| 0002 | Adaptive allocation with a degradation cascade | Accepted |
| 0003 | The layer buffer persists frame-to-frame | Accepted |
| 0004 | Build the map physical→logical so modifiers compose | Accepted |
| 0005 | A generic set-control primitive on the Scheduler | Accepted |
| 0006 | UDP presence for discovery, mDNS advertise-only | Accepted |
| 0007 | MoonLive is expressions + host-bound functions | Accepted |
| 0008 | Board injection: SET_BOARD name-only, controls over HTTP | Accepted |
| 0009 | Two doc surfaces: generated technical + hand-written summary | Accepted |
| 0010 | Integration identity is a stable hardware id | Accepted |
| 0011 | Inter-module data/events: pull + prepare-pass, not pub/sub | Accepted |
| 0012 | HA discovery: WLED by default, MQTT discovery opt-in | Accepted |
| 0013 | No migration code — robust persistence + documented breaks | Accepted |
| 0014 | Our own i80 DMA driver, one level below esp_lcd | Accepted |
| 0015 | The source tree splits by domain/type; library origin is a tag, not a folder | Accepted |