Skip to content

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