test(desktop): the Storybook smoke renders one of 22 palette × colour-scheme combinations
- Dominant language
- TypeScript
- Stars
- 5.4k
- Forks
- 502
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 715
Description
## Problem
`THEME_PALETTES` (`packages/core/src/settings.ts:129-145`) ships **11 palettes**, each rendering in light and dark — **22 combinations** reachable from 设置 → 外观.
`scripts/storybook-visual-smoke.mjs:138` pins every story URL to `globals=colorScheme:light` and sets no palette, so the gate at `.github/workflows/ci.yml:239` renders **default × light** only.
One story already works around this. `packages/ui/stories/palette-matrix.stories.tsx` applies `data-maka-theme` per block and renders all 11 palettes in a single story. Its own header states the reason:
> The smoke's catalog pass renders wide/light/default only, so without this story ten palettes have no oracle whatsoever.
Three gaps remain on top of it:
1. **It is a human oracle, not an assertion.** The story renders swatches; nothing fails when a value drifts.
2. **It covers 6 base tokens** — `--background`, `--foreground`, `--accent`, `--info`, `--success`, `--destructive` (`palette-matrix.stories.tsx:70-77`). Derived tokens are out of frame. #3446 F6 measures `--color-text-disabled` at 2.52:1 light and 2.29:1 dark on transcript body copy, failing WCAG AA on the **default** palette. Whether the other 10 carry the same failure is unmeasured.
3. **The dark half is never rendered**, so every dark-mode finding in #3446 is invisible to CI by construction.
`maka-tokens.css:185` records a hand-check for one token ("weakest is tokyo-night at 4.78:1"). That is the current method: manual, per-token, unrepeatable.
## Desired outcome
- Parameterise `storyUrl` over `colorScheme` so the smoke runs both. Storybook already declares both globals (`apps/desktop/.storybook/preview.tsx:83-118`), so this is a URL change, not new infrastructure.
- Add a per-text-node contrast assertion — no baseline, no allowlist, an accessibility correctness boundary. That is the shape #2794's objection leaves available.
- Decide whether the palette dimension belongs in the gate or stays a human oracle. 11 × 2 over every story is likely not worth the CI time; over the palette matrix plus one reference screen it may be.
Overlaps #3446 slicing item 1, which already proposes the colour-scheme parameterisation and the contrast assertion. If that lands first, this narrows to the palette dimension.
*AI use: Claude Code assisted with source and issue investigation; the analysis and conclusions are my own.*
Contributor guide
Assessment
This issue has not been assessed yet.