fix(design): canvas token SSOT → WCAG-AA + contrast CI gate (core#2742) #2753
Reference in New Issue
Block a user
Delete Branch "fix/canvas-ssot-aa-contrast"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The canvas light
@themegood #0c8a52/bad #c2403cfail WCAG AA 4.5:1 on their own 10%-tint badges (axe: 3.87 / 4.46). molecule-app's a11y e2e caught this when it adopted the SSOT (issue #48), so it had to keep a divergent exception — breaking true SSOT convergence.Fix
Darken to the values that actually pass —
good #2a6e44→5.33,bad #b0463f→4.79,ink-soft #656871→4.84 (verified by the new gate). These are the same values molecule-app already uses, so all three surfaces (canvas / mobile-webpalette.ts/ molecule-app) now converge byte-for-byte on one accessible SSOT. Mobilepalette.tsfollows in lockstep;palette.ssot.test.tsstays green. Dark mode unchanged (already AA).CI-wiring
New
globals.a11y.test.tsparsesglobals.cssand computes WCAG contrast for the at-risk pairs (text-good/bg-good-10, text-bad/bg-bad-10, ink-soft/surface) — fails CI if the SSOT ever regresses to inaccessible values. Runs in the existing gated canvas vitest suite (no Playwright). 247 mobile + 6 new tests green.Follow-on
molecule-app can now DROP its AA-exception comment (values already match) — the cross-repo drift gate (#86) will enforce the converged set.
🤖 Generated with Claude Code
APPROVED on head
bce9fd3a.5-axis review:
Most PR code checks were green at review time, including Platform, shellcheck, E2E smoke/chat/staging canvas, handlers postgres, harness replays, peer visibility, secret scan, and tenant-env lint. CI / Canvas (Next.js) was still pending during review, so keep the merge gate tied to final CI status.
/sop-ack
Post-merge audit for PR #2753 (merged head
bce9fd3a04c8b3e091780e89d8a2916751fa0ffc): CLEAN.I independently checked the design-token SSOT contrast changes and the CI gate after merge. The changed light-token ratios all clear WCAG AA 4.5:1:
goodonbg-good/10= 5.326,badonbg-bad/10= 4.788,ink-softon surface = 4.839, andink-softon elevated white = 5.567. The mobile palette mirror now uses the same AA-hardenedink-soft/goodvalues, so this resolves the canvas-side drift that molecule-app #85 had to document around core#2742.CI on the merged head includes
CI / all-requiredsuccessful, Canvas Next.js successful, plus the newcanvas/src/app/__tests__/globals.a11y.test.tsunit gate. I did not find a contrast or legacy-blue regression in the merged diff.