The 2026-06-30 UX audit (finding #6) flagged a light-mode gap: the audit believed
DarkBlueGrayTheme always passed ChirpyDarkColorScheme, leaving no legible
onSurface/onSurfaceVariant for bright surfaces. Specifically it warned that
onSurface: #AFB0B1 (the dark-scheme value, red ≈ 0.69) would be near-invisible
on the light scheme’s white surface.
ChirpyLightColorScheme was implemented in PR #401 with correct dark values for
onSurface (#111111) and onSurfaceVariant (#494949), and DarkBlueGrayTheme
was wired to serve it when darkTheme = false. However, KrillThemeTest had no
explicit contract assertions for those two roles in the light scheme. With no guard
in place, a future edit that accidentally copied dark-scheme values into the light
scheme would pass all existing tests.
Added two @Test assertions to KrillThemeTest:
light scheme onSurface is dark enough to read on a bright surface — asserts
ChirpyLightColorScheme.onSurface.red < 0.25 (current value #111111, red ≈ 0.067).light scheme onSurfaceVariant is legible on bright surfaces — asserts
ChirpyLightColorScheme.onSurfaceVariant.red < 0.50 (current value #494949, red ≈ 0.286).No production code changed; the light scheme was already correct.
KrillThemeTest assertion so the value is under contract, not just
present in the file.ChirpyDarkColorScheme and ChirpyLightColorScheme,
verify that any onSurface* or onBackground value has a red channel < 0.5 in the
light scheme and > 0.5 in the dark scheme — opposite luminance poles.