From 8801c3dd9146a5f8b14d90257d5b732c8b71ab70 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 26 Sep 2026 15:58:57 +0500 Subject: [PATCH] chore: remove unused css tokens --- docs/README.md | 8 ++++---- docs/plan-codebase-quality.md | 34 ++++++++++++++++++++++++++-------- docs/quality-gates.md | 7 +++---- web/src/app.css | 5 ----- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/docs/README.md b/docs/README.md index a68cdfe..b4a1f0c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -51,16 +51,16 @@ только если темы нет в существующем документе; иначе обновляется источник истины. -## Текущий baseline Q6f.4 +## Текущий baseline Q7a -На момент фиксации Q6f.4: +На момент фиксации Q7a: - production registry содержит 122 инструмента; - `pnpm --dir web check` проходит без ошибок и предупреждений; - `pnpm --dir web test` — 43 test files / 465 tests; - `pnpm --dir web test:rules` — 4 test files / 74 tests; -- `pnpm --dir web lint:all` — 0 errors и 0 i18n warnings; остаются 4 unused - design tokens от token audit; +- `pnpm --dir web lint:all` — 0 errors, 0 i18n warnings и 0 unused design tokens + от token audit; - coverage `src/lib` — statements 91.77%, branches 83.3%, functions 74.31%, lines 92.53% при порогах 90 / 82 / 72 / 91; - `pnpm verify` проходит; diff --git a/docs/plan-codebase-quality.md b/docs/plan-codebase-quality.md index 1b6cccc..8f0b337 100644 --- a/docs/plan-codebase-quality.md +++ b/docs/plan-codebase-quality.md @@ -43,8 +43,8 @@ - `pnpm verify` объединяет typecheck, unit, rule-тесты, lint, форматирование, docs и production build; deploy выполняет его перед сборкой. -- `i18n/dict-consistency` даёт 0 warnings на текущем baseline; отдельный debt — - 4 unused design tokens от token audit. +- `i18n/dict-consistency` даёт 0 warnings на текущем baseline; после Q7 вычищены + 4 неиспользуемых design token, token audit тоже чист. - E2E-контракт использует semantic locators и общий source-aware schema resolver; активных known-issue `test.fixme` нет. - `ToolError` хранится как key/vars и переводится только при выводе; смена @@ -133,8 +133,8 @@ pnpm --dir web test:e2e option-группы из `ru.ts`. - Исправлен tie-break placeholder parity: при равенстве голосов выбирается `BASE_LOCALE`. -- `lint-all` запускает ESLint с `--max-warnings=0`; token audit пока оставляет 4 - unused-token warnings отдельным debt. +- `lint-all` запускает ESLint с `--max-warnings=0`; unused-token сообщение + оставалось неблокирующим и закрыто в Q7. - Plural-формы остаются отдельной задачей после Q2 и не смешиваются с этим этапом. @@ -390,9 +390,26 @@ file-result-инструментам. **Оценка:** M. **Зависимости:** Q1, Q2, Q3. -- Очистить или использовать unused design tokens; после очистки решить, должен - ли unused audit быть fail-режимом. -- Добавить тесты для token audit и PostCSS HCT-плагина. +#### Q7a. Очистка неиспользуемых design tokens + +**Статус:** выполнен. Token audit чист: `All app.css tokens are used somewhere`. + +- Удалены `--color-text-accent-muted` (light и dark, иначе ломается parity), + `--space-text-s: 0`, `--size-content-max: 880px` и `--duration-m: 0.3s`. +- Проверено, что мёртвые токены — это пыль, а не признак хардкода: дублирующих + значений (`max-width`, `0.3s`, muted-цвет) в `src` нет. Потребители + `space-text-m/xl/2xl`, `size-content-max-wide` и `size-workspace-min` + используются, поэтому шкалы не тронуты. +- Шкалы остались неполными намеренно (`duration-s/l` без `m`, `space-text` без + `s`): мёртвый элемент шкалы хуже, чем «дырявая» шкала, а вернуть его можно + вместе с потребителем. +- Второй пункт («после очистки решить, должен ли unused audit быть + fail-режимом») остаётся открытым: сам audit пока только сообщает. + +#### Q7b–Q7d. Оставшиеся направления + +- Добавить тесты для token audit и PostCSS HCT-плагина: у них сейчас нет + покрытия, `test:rules` их не видит. - Покрыть базовым JS recommended сам код ESLint-плагинов и lint-скриптов. - Отдельно решить, должен ли обычный CSS проходить проверку undefined tokens и hardcoded colors наравне со Svelte styles. @@ -544,7 +561,8 @@ refactor, новые i18n-правила и исправление продук - Нужны ли browser/mobile matrix и visual snapshots до coverage thresholds? Решено: matrix — Q6f.3, coverage — Q6f.4, visual snapshots отложены с обоснованием в Q6f.5. -- Какие unused design tokens можно удалить, а какие должны остаться? +- Какие unused design tokens можно удалить, а какие должны остаться? Решено в + Q7a: удалены все четыре, audit чист. - Какие browser/e2e проверки должны быть обязательными для PR, а какие — отдельным ночным прогоном? diff --git a/docs/quality-gates.md b/docs/quality-gates.md index 107fcfe..8456411 100644 --- a/docs/quality-gates.md +++ b/docs/quality-gates.md @@ -80,10 +80,9 @@ per-project лимит воркеров, а browser matrix упирается в - `errors` завершают соответствующий инструмент ненулевым кодом. - После Q2 ESLint запускается с `--max-warnings=0`: новые ESLint warnings блокируют gate. -- Token audit пока оставляет unused-token warnings отдельным неблокирующим - сообщением. -- `lint:all` по-прежнему сообщает 4 unused-token warnings отдельным - предупреждением token audit; это следующий debt Q7. +- Token audit оставляет unused-token сообщение неблокирующим: после Q7 пыль + вычищена, но решение о fail-режиме остаётся открытым. +- `lint:all` сейчас чист: 0 errors, 0 i18n warnings, 0 unused tokens. - `dict-consistency` использует base-locale fallback для registry metadata и pattern-based policy для временно неиспользуемых `tools.*.params`; это не молчаливый `allowPaths`-список. diff --git a/web/src/app.css b/web/src/app.css index 0a86da8..f4b2498 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -112,7 +112,6 @@ --color-text: hct(from var(--brand-main) h 5.9 1.7); --color-text-muted: hct(from var(--brand-main) h 13.4 19.2); --color-text-accent: hct(from var(--brand-alt) h 5.9 1.7); - --color-text-accent-muted: hct(from var(--brand-alt) h 13.4 19.2); --color-main: hct(from var(--brand-main) h 80 48); --color-accent: hct(from var(--brand-alt) h 80 48); @@ -141,7 +140,6 @@ --space-page-top: 48px; --space-page-bottom: 72px; - --space-text-s: 0; --space-text-m: 0.04em; --space-text-l: 0.08em; --space-text-xl: 0.12em; @@ -164,7 +162,6 @@ --size-card-min-narrow: 200px; --size-parts-grid-min: 120px; --size-workspace-min: 260px; - --size-content-max: 880px; --size-content-max-wide: 1680px; --font-size-s: 12px; @@ -178,7 +175,6 @@ --radius-m: 4px; --duration-s: 0.15s; - --duration-m: 0.3s; --duration-l: 0.8s; } @@ -197,7 +193,6 @@ --color-text: hct(from var(--brand-main) h 25 90); --color-text-muted: hct(from var(--brand-main) h 22 70); --color-text-accent: hct(from var(--brand-alt) h 25 90); - --color-text-accent-muted: hct(from var(--brand-alt) h 22 70); --color-main: hct(from var(--brand-main) h 60 56); --color-accent: hct(from var(--brand-alt) h 60 56);