# ADR 0001: LCD Expression and Presentation Ownership ## Status Accepted ## Context LCD behavior now needs multiple reusable expressions that can be triggered by different runtime conditions. The system must keep semantic expression ownership separate from low-level LCD playback so future expressions can be added without copying cross-layer contracts or coupling orchestration code to asset paths. ## Decision - `domain` owns LCD expression semantics and declares `domain_expression_*` in `components/domain/include/domain.h`. - `control_plane` owns trigger policy: it decides when a runtime condition requests a semantic expression. - `platform` owns LCD presentation playback primitives and declares `platform_lcd_presentation_*` in `components/platform/include/platform.h`. - Domain runtime adapters map semantic expressions to platform presentation requests. - Platform LCD internals serialize presentation requests and perform all panel drawing inside the LCD render task. ## Consequences - Adding a new expression requires a domain expression ID and catalog mapping, plus an optional control-plane trigger rule. - Public upper-layer facades must not expose platform playback types. - Platform public APIs must not expose domain semantic expression IDs. - High-priority expressions can interrupt lower-priority presentations without leaking policy logic into the LCD driver.