контраст: 32 → 2 → 0, проверено на живой странице; сторож теперь ловит выбор токена, а не только его значение #3281

Merged
bot-backend merged 1 commit from fix/mera-contrast-two-leftovers into main 2026-08-30 10:54:59 +00:00
Collaborator

Закрывает честный пробел, оставленный в #3277: там axe не перегоняли и «32 → 0» не подтверждали. Перегнал — правилом color-contrast по отрендеренным узлам прода, не по значениям токенов.

Результат: 32 → 2

И обе оставшиеся показательны. Одну завёл мой же вчерашний батч.

.tickerNote — 3,06

Подпись под тикером, добавленная в #3278. Токены чинил #3277. Каждая ветка по отдельности была права, вместе дали дефект: подпись взяла --b2c-muted — токен для СВЕТЛОГО фона — и легла на тёмную плашку #121A1D, где шкала перевёрнута. Докстринг палитры это прямо и говорит: на тёмном muted даёт 2,7:1.

Красится --b2c-muted-dark6,20.

.stepsLabelAccent — 4,48

«ШАГ 3 · 150 ₽» на карточке #EAF5F7. Сторож эту поверхность знал, но проверял accentDeep только как заливку (белый по нему), а CSS использует его ещё и как цвет текста.

accentDeep #0C7B8B#0B7382. Минимальный шаг затемнения: проходит текстом на всех трёх светлых поверхностях (4,99 / 5,15 / 5,54) и заодно улучшает главную кнопку — белый по нему 4,97 → 5,54.

Две правки сторожа — про механизм, не про случай

  1. accentDeep проверяется и как текст. Токен, используемый двумя способами, обязан проверяться обоими.
  2. Новый тест «в тёмных секциях не используются светлофоновые токены». Он ловит промах в выборе токена, а не в его значении — ровно тот класс, который прошёл мимо. Список тёмных секций явный, но это снимок секций, а не нарушений: секции заводят раз в несколько месяцев, правила внутри них правят постоянно, и новое правило в известной секции ловится без обновления списка.

Фальсификация

  • возврат accentDeepaccentDeep (как текст) на surfaceSoft: expected 4.4775 to be greater than or equal to 4.5
  • возврат .tickerNote на muted.tickerNote → --b2c-muted

Первую попытку фальсификации засчитывать было нельзя: подмена не сработала из-за добавленного мной же комментария, текст перестал совпадать, и тест остался зелёным по построению. Переделал с точной заменой внутри блока.

Проверки

vitest 13 файлов / 147 passed · tsc --noEmit rc=0 · eslint --max-warnings 0 rc=0.

Что осталось

После выкатки прогнать ту же проверку по отрендеренным узлам ещё раз и подтвердить 0. Метод: правило color-contrast — вычисленный цвет текста против первого непрозрачного фона вверх по дереву, порог 4,5 (3,0 для крупного), узлы под aria-hidden не считаются.

Закрывает честный пробел, оставленный в #3277: там axe не перегоняли и «32 → 0» не подтверждали. Перегнал — правилом `color-contrast` по **отрендеренным узлам прода**, не по значениям токенов. ## Результат: 32 → 2 И обе оставшиеся показательны. Одну завёл мой же вчерашний батч. ### `.tickerNote` — 3,06 Подпись под тикером, добавленная в #3278. Токены чинил #3277. **Каждая ветка по отдельности была права**, вместе дали дефект: подпись взяла `--b2c-muted` — токен для СВЕТЛОГО фона — и легла на тёмную плашку `#121A1D`, где шкала перевёрнута. Докстринг палитры это прямо и говорит: на тёмном `muted` даёт 2,7:1. Красится `--b2c-muted-dark` → **6,20**. ### `.stepsLabelAccent` — 4,48 «ШАГ 3 · 150 ₽» на карточке `#EAF5F7`. Сторож эту поверхность **знал**, но проверял `accentDeep` только как **заливку** (белый по нему), а CSS использует его ещё и как **цвет текста**. `accentDeep` `#0C7B8B` → `#0B7382`. Минимальный шаг затемнения: проходит текстом на всех трёх светлых поверхностях (4,99 / 5,15 / 5,54) и **заодно улучшает главную кнопку** — белый по нему 4,97 → 5,54. ## Две правки сторожа — про механизм, не про случай 1. **`accentDeep` проверяется и как текст.** Токен, используемый двумя способами, обязан проверяться обоими. 2. **Новый тест «в тёмных секциях не используются светлофоновые токены».** Он ловит промах в **выборе** токена, а не в его **значении** — ровно тот класс, который прошёл мимо. Список тёмных секций явный, но это снимок **секций**, а не нарушений: секции заводят раз в несколько месяцев, правила внутри них правят постоянно, и новое правило в известной секции ловится без обновления списка. ## Фальсификация - возврат `accentDeep` → `accentDeep (как текст) на surfaceSoft: expected 4.4775 to be greater than or equal to 4.5` - возврат `.tickerNote` на `muted` → `.tickerNote → --b2c-muted` **Первую попытку фальсификации засчитывать было нельзя**: подмена не сработала из-за добавленного мной же комментария, текст перестал совпадать, и тест остался зелёным по построению. Переделал с точной заменой внутри блока. ## Проверки `vitest` 13 файлов / **147 passed** · `tsc --noEmit` rc=0 · `eslint --max-warnings 0` rc=0. ## Что осталось После выкатки прогнать ту же проверку по отрендеренным узлам ещё раз и подтвердить **0**. Метод: правило `color-contrast` — вычисленный цвет текста против первого непрозрачного фона вверх по дереву, порог 4,5 (3,0 для крупного), узлы под `aria-hidden` не считаются.
bot-backend added 1 commit 2026-08-30 10:51:59 +00:00
контраст: два оставшихся нарушения на живой странице + сторож по секциям
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m0s
3b09368669
Проверка axe-правилом по ОТРЕНДЕРЕННЫМ узлам прода дала 32 → 2. Обе
оставшиеся показательны, и одну из них завёл мой же вчерашний батч.

.tickerNote (3.06) — подпись под тикером. Её добавила одна ветка, токены
чинила другая; каждая по отдельности была права, вместе дали дефект: подпись
взяла --b2c-muted (токен для СВЕТЛОГО фона) и легла на тёмную плашку #121A1D,
где шкала перевёрнута. Красится --b2c-muted-dark, 6.20.

.stepsLabelAccent (4.48) — «ШАГ 3 · 150 ₽» на карточке #EAF5F7. Сторож знал
эту поверхность, но проверял accentDeep только как ЗАЛИВКУ (белый по нему), а
CSS использует его ещё и как ЦВЕТ ТЕКСТА. accentDeep #0C7B8B → #0B7382:
минимальный шаг, проходит текстом на всех трёх светлых поверхностях
(4.99/5.15/5.54) и заодно улучшает главную кнопку — белый по нему 4.97 → 5.54.

Две правки сторожа, обе про механизм, а не про случай:
1. accentDeep проверяется и как текст: токен, используемый двумя способами,
   обязан проверяться обоими.
2. Новый тест «в тёмных секциях не используются светлофоновые токены». Он
   ловит промах в ВЫБОРЕ токена, а не в его значении — тот класс, который и
   прошёл мимо. Список тёмных секций явный, но это снимок СЕКЦИЙ, а не
   нарушений: новое правило внутри известной секции ловится без правки списка.

Фальсификация обеих: возврат accentDeep даёт «4.4775 >= 4.5», возврат
.tickerNote на muted даёт «.tickerNote → --b2c-muted». Первую попытку
фальсификации засчитывать было нельзя — подмена не сработала из-за
добавленного комментария, и тест остался зелёным по построению.
bot-backend merged commit 999f10e78b into main 2026-08-30 10:54:59 +00:00
bot-backend deleted branch fix/mera-contrast-two-leftovers 2026-08-30 10:54:59 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3281
No description provided.