Source:
ocean/docs/adr/0026-design-validation-in-ci.md| ✏️ Edit on GitHub
ADR-0026: Enforce Design Token Validation in CI
Date: 2025-08-14
Status
Accepted
Context
We adopted a token-driven design system (see ADR-0025) with Tailwind 4 @theme, shadcn semantics, and Style Dictionary generation. To prevent regressions and drift between token sources and generated CSS variables, we need a CI gate that fails builds when generated palettes diverge from our canonical configuration.
Decision
- Add a CI validation step that runs immediately after token generation.
- The step executes:
pnpm run tokens:build(generatestokens.generated.cssandcolor-themes.generated.css)pnpm run design:validate(comparessrc/config/themes.tsagainstsrc/styles/color-themes.generated.css)
- The CI job fails if any theme variable mismatch or missing mapping is detected.
Consequences
- Pros
- Prevents accidental visual changes from merging.
- Ensures generated CSS remains aligned with token sources and shadcn semantic classes.
- Produces actionable diffs (theme/mode/var with expected vs actual values).
- Cons
- Adds a fast, deterministic step to CI; requires updating tokens or config when intentional changes are made.
Implementation
-
Scripts (available now):
tokens:build→ builds tokens via Style Dictionarydesign:validate→ validates generated palettes against config- Recommended CI command:
pnpm run tokens:build && pnpm run design:validate
-
Example GitHub Actions step (for reference):
- name: Build design tokens
run: pnpm run tokens:build
- name: Validate design output
run: pnpm run design:validate
Rollback Plan
- Disable the validation step in CI if blocking issues arise; no runtime impact to the application.
References
- ADR-0025: Token-driven Design System with Tailwind 4 and shadcn