docs: spec #266 revision 3 — arithmetic of AC2 and the true reduced-motion count

Issue: #266
User-Visible: no
This commit is contained in:
Codex
2026-08-26 01:34:21 +03:00
parent 0d9320fe1d
commit 3a49b14274
+3 -3
View File
@@ -1,7 +1,7 @@
# ТЗ #266 — Расщепить styles.ts на файлы поверхностей
Issue: https://github.com/Matysh/houseplan-card/issues/266
Статус: ревизия 2 (после SPEC-REVIEW-266-r1: scope-ключ сверки, обязательные смоки медиа-обёрток, фактические пороги размера, класс B для scripts/**).
Статус: ревизия 3 (после SPEC-REVIEW-266-r2: AC2 сведён с арифметикой финального прототипа, счёт reduced-motion блоков исправлен на фактические 10).
База: #34 (зонтик декомпозиции, этап 5), #241 (соразмерный выбор проверок), прецедент `editor-secondary.styles.ts`.
## 0. Сценарий
@@ -74,12 +74,12 @@ CHANGELOG не трогается (User-Visible: no, пиксели не мен
## 6. AC
1. `src/styles.ts` ≤ 40 строк: только импорты, комментарий о порядке каскада и `export const cardStyles`. Доказательство: ревью кода + юнит §1.3.3.
2. Пять файлов `src/styles/*.styles.ts`; фактический замер прототипа расщепления: base 300, chrome 447, devices 623, dialogs 1452, plan 1609 строк — порог: каждый ≤ 1 650, сумма пяти файлов + сборщик ≤ исходных 3 690 строк + 5 % (накладные заголовки/импорты). Доказательство: ревью кода.
2. Пять файлов `src/styles/*.styles.ts`; замер r1-прототипа (4 431 суммарно) не проходил собственный порог — источником роста были пустые строки-разделители генератора; после уплотнения (блоки стык в стык, как в исходнике) фактический замер: base 248, chrome 381, devices 540, dialogs 1 180, plan 1 359, сборщик 19 — сумма 3 727 ≤ 3 690 + 5 % (3 874). Порог: каждый файл ≤ 1 650, сумма ≤ исходник + 5 %. Доказательство: ревью кода (`wc -l`).
3. Golden: 129/129 зелёные, эталоны байтово не менялись (`git status` чист по `demo/golden/baselines/`). Доказательство: `golden`-прогон CI + ревью диффа.
4. Юнит непересечения селекторов пяти файлов — зелёный, список исключений пуст (или обоснован построчно). Доказательство: `unit`.
5. Юнит порядка склейки §1.3.3 — зелёный. Доказательство: `unit`.
6. Нормализованное множество правил до/после идентично — ключ включает полный путь вложенности (§1.3.5); отчёт (`diff` двух JSON — пустой) в хендоффе, перепроверяется ревьюером. Доказательство: ревью кода по отчёту.
6a. Юнит присутствия медиа-обёрток: оба блока `@media (forced-colors: active)` и все 8 блоков `@media (prefers-reduced-motion: reduce)` присутствуют в итоговой склейке с исходными правилами. Доказательство: `unit`.
6a. Юнит присутствия медиа-обёрток: оба блока `@media (forced-colors: active)` и все **10** блоков `@media (prefers-reduced-motion: reduce)` присутствуют в итоговой склейке с исходными правилами (фактический счёт по `grep -n` исходника: строки 72, 255, 399, 691, 875, 988, 1995, 2000, 2768, 3537 — в r1/r2 фигурировали «8», это была неточность обоих раундов). Доказательство: `unit`.
7. Дельта размера бандла ≤ 1 КБ. Доказательство: числа в хендоффе, перепроверяются ревьюером.
8. `npm test`, `build` + сверка трёх бандлов, `check-docs` — зелёные. Доказательство: CI.