12 KiB
SPEC-REVIEW-526-r2
Issue: #526 — «CSS-комментарии едут пользователю: минификатор шаблонов не снял ~23 КБ пояснений» Этап: ревью ТЗ (PROCESS.md §2.4), заход r2, блокирующих циклов израсходовано 1 из 4 (лимит 4 — полный трек) Трек: полный. Критерий §5, который задача не проходит: «нет влияния на производительность» (правка целиком про размер начального чанка).
Скоуп разбора
Это второй заход ревью ТЗ — разбор по дельте (PROCESS.md §2.10), не заново.
Предыдущий вердикт: жёлтый · заход r1 · блокирующих циклов 0/4 · High: 0 · Medium: 1 → в задаче
(комментарий claude, 2026-09-11T06:18:45Z; документ docs/reviews/SPEC-REVIEW-526-r1.md).
Материал r1 (из якорного блока документа r1): ветка dev, коммит 9609040d312c3121c5703b37bab080f84ff69e6c. SHA резолвится (git cat-file -t → commit, предок текущего HEAD) — не осиротевший, объявление по содержимому не потребовалось.
Дельта r1→r2: ответ автора (комментарий Matysh, 2026-09-11T06:19:58Z) и правка тела issue — вставлен один новый раздел ### Сценарий и что человек увидит в начало ## ТЗ, между строкой «Полный трек. Критерий §5…» и ### Контракт. Это подтверждается самим текстом r1-находки, которая дословно цитирует границу отсутствовавшего раздела («весь раздел от строки «Полный трек. Критерий §5…» до «### Контракт»»): в r1 между этими двумя точками текста не было, сейчас — есть. Автор прямо заявляет: «Остальной текст ТЗ не трогал: контракт, AC и допущения остались прежними» — и текущее тело issue это подтверждает: К1–К5, AC1–AC8, файлы, i18n/миграция/бэкенд, перф, touch, откат, риски, блок допущений — присутствуют дословно в тех же формулировках и числах, что цитировал документ r1 (300 111 Б → 287 284 Б, запас 955 → 13 782 Б, AC1…AC8 те же восемь пунктов).
Дельта локальна (вставка одного раздела в ответ на единственную находку), контракт не менялся, новая подсистема не задета, объём дельты несопоставимо меньше исходной задачи — полный повторный разбор не требуется по критериям §2.10. Разбираю только дельту и её последствия для тех AC/разделов, которых она касается (а она касается только вопроса «отвечает ли ТЗ на два обязательных продуктовых вопроса §7.1»).
Гейты (typecheck/test/build) на этапе ревью ТЗ не прогоняются: продуктового кода ещё нет, материал ревью — только текст issue.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
Medium (в скоупе): в ## ТЗ нет обязательных разделов «сценарий» и «что человек увидит до и после» (§7.1) |
Добавлен раздел ### Сценарий и что человек увидит с тремя подпунктами: Сценарий (персона — «любой пользователь», поверхность — карточка на дашборде / страница в боковом меню / киоск на планшете, момент — первая/холодная загрузка, особенно на узком канале и медленном устройстве), До и После (интерфейс не меняется ни на пиксель, план появляется чуть раньше) |
Тело issue #526, ## ТЗ, сразу после строки «Полный трек. Критерий §5…», перед ### Контракт |
| Low (снята решением ревьюера без возврата): раздел «UX» не выделен отдельно | Не переоткрывается — r1 закрыла её сам ревьюер записью в документе, без обязательства для автора | docs/reviews/SPEC-REVIEW-526-r1.md, раздел «Находки → Low» |
Проверка по существу, а не по факту наличия заголовка: персона названа обобщённо («любой пользователь»), но это согласуется с текстом самой r1-находки, которая тоже восстановила ответ как «персона — любая из трёх» — автор не сузил и не исказил рамку, предложенную ревьюером. Поверхность и момент названы конкретно (три поверхности, холодная загрузка). Фраза «что человек увидит» присутствует буквально: «Интерфейс не меняется ни на пиксель… план просто появляется чуть раньше» — это и есть ответ без терминов реализации, который в r1 отсутствовал вовсе.
Отдельное наблюдение (Low, снимаю с записью, не возвращаю автору). Подпункты «До»/«После» перед этой фразой приводят байты gzip и размер чанка — термины реализации, что §7.1 просит выносить за скобки фразы «что человек увидит». Разница с r1 принципиальная: тогда наблюдаемого эффекта в тексте не было вообще, сейчас он есть отдельной ясной фразой, а цифры соседствуют с ней как подтверждающая метрика, а не подменяют её. Меняющая переписывание ради буквы правила ценности не добавляет — сам r1 отметил, что «смысл важнее буквы». Снимаю без возврата.
Унаследовано из r1
Без повторной проверки, по документу docs/reviews/SPEC-REVIEW-526-r1.md, материал — коммит 9609040d312c3121c5703b37bab080f84ff69e6c:
- Причина дефекта установлена измерением (инструментированная сборка), не гипотезой —
code.includes('css\')не совпадает с выводом TypeScript-компилятора (css ``). - К1–К5 однозначны, не пересекаются, К5 явно исключает ленивый граф/перенос чанков/правки стилей.
- AC1–AC8 проверяемы, у каждого назван способ доказательства; защитный AC4 имеет мутанта AC7 (таблица «чем краснеет» будет обязательна уже на код-ревью).
- Блок «Принятые технические предположения» — три пункта, все технические, ни один не подменяет продуктовое решение.
- Числа согласованы между аналитикой (S2) и ТЗ (один источник, не разошлись при добавлении нового раздела).
- Откат конкретен и исполним (ревёрт коммита без флагов/миграций).
- Выбор полного трека обоснован названным критерием §5.
- i18n/миграция/бэкенд — «Ничего», корректно для задачи, не трогающей конфиг/данные.
- Release-артефакты названы (AC8: оба changelog +
docs/DEVELOPMENT.md),User-Visible: yesуместен. - Low «раздел UX не выделен» — снята ревьюером r1 без возврата, остаётся снятой.
Находки r2
Нет High. Нет Medium. Один новый Low (см. «Отдельное наблюдение» выше) — снят с записью, не возвращается автору.
Что проверено и корректно (дельта)
- Новый раздел встроен структурно верно: ровно там, где r1 просила его увидеть (в начале
## ТЗ, до### Контракт), не задевая К1–К5, AC1–AC8 и прочий текст. - Персона/поверхность/момент названы явно и согласуются с
docs/SCOPE.md(три поверхности — карточка на дашборде, страница в боковом меню, киоск на планшете — соответствуют персонам «Home admin», «household members», «guests/kiosk»). - Фраза «что человек увидит» присутствует буквально и без терминов реализации: «Интерфейс не меняется ни на пиксель… план просто появляется чуть раньше».
- Числа в новом разделе (300 111 Б → 287 284 Б, −12,8 КБ) совпадают с числами в разделе «Производительность и бюджеты» и с комментарием аналитики — один источник, расхождений нет.
- Автор не заявил новых продуктовых решений и не тронул AC/контракт — риск регрессии от самой правки текста отсутствует.
Чего не проверял
- Полный повторный разбор К1–К5, AC1–AC8, рисков и допущений — не требовался по §2.10 (дельта их не касается), унаследовано из r1 списком выше.
- Код, тесты, сборку — на этапе ТЗ их не существует, проверять нечего.
scripts/mutation-gate.mjsи корректность самого regex/парсера К1 — вне ТЗ, дело код-ревью, как и было отмечено r1.- Продуктовых вопросов владельцу не возникло ни в r1, ни в дельте r2.
Вердикт
Единственная блокирующая находка r1 закрыта по существу, а не по факту наличия заголовка. Новых High/Medium делта не создала. Задача готова к разработке.
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
Материал раунда
- Ветка:
dev, коммит4451cf50d930— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
2453777ffa8421c27b4d6f3995849f1e2bea5c5bgit log --all --format='%H %T' | grep 2453777ffa84 - Тело issue:
2cb0efd54b1cd5a5a4f8733121da3241c0cb7b0f2b2376759717d163f0b496dd - Вердикт конвейера:
green· High 0