Generator boundary
Produce deterministic dark and light color-only artifacts from the Nugu palette.
Exit when generation and palette validation pass for both modes.
Runtime state and command boundary
Provide mode selection, toggle, current-mode preparation, and read-only status against XDG state.
Exit when invalid-state fallback and side effects match the spec.
Consumer adapters
Connect desktop preference, compositor, Nuguland, and enabled mode-aware consumers without moving layout or behavior into runtime theme state.
Exit when every enabled consumer updates safely.
Startup integration
Materialize required runtime artifacts before consumers start without mutating tracked configuration.
Exit when service and cold-start checks pass.
Contract verification
Run generator checks, both transitions, desktop-preference assertions, repository-diff invariance, and human visual review.
Exit only when the full round trip passes without a tracked change.
---
id: NL-PLAN-7AB0F679
type: plan
title: Nugu desktop theme rollout
spec: NL-SPEC-83056D8D
status: approved
---
# Nugu desktop theme rollout
1. **Generator boundary**
Produce deterministic dark and light color-only artifacts from the Nugu palette.
Exit when generation and palette validation pass for both modes.
2. **Runtime state and command boundary**
Provide mode selection, toggle, current-mode preparation, and read-only status against XDG state.
Exit when invalid-state fallback and side effects match the spec.
3. **Consumer adapters**
Connect desktop preference, compositor, Nuguland, and enabled mode-aware consumers without moving layout or behavior into runtime theme state.
Exit when every enabled consumer updates safely.
4. **Startup integration**
Materialize required runtime artifacts before consumers start without mutating tracked configuration.
Exit when service and cold-start checks pass.
5. **Contract verification**
Run generator checks, both transitions, desktop-preference assertions, repository-diff invariance, and human visual review.
Exit only when the full round trip passes without a tracked change.