11 KiB
Ревью ТЗ — issue #179, цикл r2
- Issue: https://github.com/Matysh/houseplan-card/issues/179
- ТЗ:
docs/specs/179-device-icons-redesign.md(коммит2310e6d, веткаissue/179-device-icons-redesign) - Трек: обычный
- Вердикт: зелёный · цикл r2/4 · High: 0 · Medium: 0 · Low: 0
Скоуп ревью
Проверялась правка ТЗ, внесённая автором в ответ на SPEC-REVIEW-179-r1.md
(вердикт жёлтый, 5 Medium + 2 Low, все в скоупе). Скоуп этого цикла — точечный:
подтвердить, что каждая из 7 находок r1 закрыта фактически, а не текстом, и что
правки не внесли новых противоречий или непроверяемых мест. Продуктовый код
по-прежнему не существует (issue не дошёл до S5-ready), поэтому раздел
«Гейты» PROCESS.md §8 к этому циклу неприменим — как и в r1.
Как проверялось
- Прочитаны
docs/SCOPE.md,AGENTS.md,PROCESS.md(§2.4, §7.1, §7.2, §8, §12) и целикомdocs/reviews/SPEC-REVIEW-179-r1.md. - Прочитано тело issue #179 и все комментарии (
gh issue view 179 --json body,comments), включая ответ автора от2026-08-19T19:06:37Zс перечнем исправлений. - Получен точный diff редакции:
git diff 517a710 2310e6d -- docs/specs/ 179-device-icons-redesign.md— правка сверялась по факту изменённых строк, а не по пересказу автора в комментарии. - Архив дизайнера передекачан и распакован (
sha256sumсовпал:63670C73E25D1E59DDAF1BE236F3D7F2FAC827B9B5D6DD4B77125EA9BC012025), чтобы независимо перепроверить факты, на которых основана правка:grep -o feColorMatrix… "Light/Icon Default.svg"→ значения0.145098/0.156863/0.176471=37/255, 40/255, 45/255— подтверждает цвет тени из M1;diff "Dark/Icon Default.svg" "Dark/Icon Default No Blur.svg"→ единственное отличие — слойforeignObjectсbackdrop-filter:blur(20px)и атрибутdata-figma-bg-blur-radius; core/ stroke/filter-тень (filter0_ddi_104_1541) идентичны — подтверждает заявление M4/риска о сохранении геометрии;diff "Light/Icon Default.svg" "Light/Icon Default No Blur.svg"→ файлы побайтно идентичны, что согласуется с правилом «Light не содержит blur» и с пометкойdeprecated: true, aliasOf: "Light/Icon Default.svg"для Light-варианта вmanifest.json(у Dark-варианта такой пометки нет — перепровереноgrep -n -i "no blur" manifest.jsonи чтением окружающего JSON, узелqaFallback);grep -in "presence\|green" SPECIFICATION.md ACTIVE_ANIMATION_SPEC.md DEVELOPER_HANDOFF.md— подтверждает, что явного reason→color маппинга в архиве по-прежнему нет (это ожидаемо: M2 требовал не найти маппинг в архиве, а явно принять и промаркировать решение в ТЗ).
- Сверена цитата
docs/TOUCH-SUPPORT.md— таблица контракта содержит ровно| Device editor | … | Best effort |— правка M5 воспроизводит источник точно, без искажения формулировки. - Проверена трассируемость:
docs/specs/README.mdне расходится с ТЗ, коммит2310e6dнесёт корректные трейлерыIssue: #179/User-Visible: no, изменения ограничены одним файлом ТЗ (класс C, документация, что не требует отдельного issue сверх текущего). - Гейты не прогонялись — на этапе ревью ТЗ продуктового кода нет, раздел неприменим (как и в r1).
Проверка находок r1 — построчно
| # | Требование r1 | Что внесено в 2310e6d |
Проверка |
|---|---|---|---|
| M1 | Заменить rgb(0 0 0 / …) на rgb(37 40 45 / …) в §7.1 |
Обе Light-тени переписаны на rgb(37 40 45 / 12%) / rgb(37 40 45 / 18%) |
Подтверждено feColorMatrix в реальном SVG — закрыто |
| M2 | Явно зафиксировать mapping presence→цвет или исключить Green |
§10.1/§10.4 получили mapping presence→green, running/working/open/unlocked→amber, neutral→blue; §20 п.9 маркирует это как явное техническое предположение |
Архив по-прежнему не даёт этого маппинга текстом (перепроверено), решение корректно оформлено как предположение автора, а не выдано за факт архива — закрыто |
| M3 | Добавить easing в §10.2/§10.3 | Обе секции получили cubic-bezier(.22,.61,.36,1) |
Совпадает с @keyframes в Animated/Light(Dark)/Short Activity Animated.svg и Alert Animated.svg (сверено в r1, повторно не перекачивал анимационные SVG — не менялись) — закрыто |
| M4 | Явное решение blur/No-Blur для Dark + запись в §17/AC13 | §7.1 фиксирует production = Dark/Icon Default No Blur.svg, backdrop-filter запрещён; риск и митигация добавлены в §17; AC13 явно требует отсутствия per-marker backdrop-composite layer |
diff двух SVG подтверждает: различие ровно в blur-слое, геометрия/тень сохранены — закрыто, причём риск обоснован фактом, а не на глаз |
| M5 | Добавить тег Touch editor: … |
Добавлена строка Touch editor: best effort / intentionally degraded в §11 |
Совпадает с канонической записью TOUCH-SUPPORT.md («Device editor … Best effort») — закрыто |
| L1 | Отразить Light-only combo-эталоны в golden-матрице | §16.4 получил абзац: комбинации проверяются в обеих темах, Dark — по layer-contract, так как Dark combo-assets в архиве нет | Соответствует составу архива (5 Light-комбо-файлов, 0 Dark) — закрыто с явной записью |
| L2 | Снять или обосновать оговорку про static_icon unavailable-hover |
Оговорка unavailable hover запрещён удалена из §7.3 |
Мёртвый кейс убран — закрыто |
Все 5 Medium и 2 Low из r1 закрыты точечными правками текста, без затрагивания архитектуры, AC-нумерации или скоупа задачи. Новых расхождений между текстом правки и архивом/каноническими документами не обнаружено.
Проверено и признано корректным (сверх таблицы выше)
- Diff ограничен ровно тем, что заявлено в комментарии автора; посторонних
правок вне перечня r1 нет (
git diff 517a710 2310e6dпросмотрен целиком). - Внутренняя согласованность новых формулировок:
§7.2(таблица цветов),§10.1и§10.4используют один и тот же mappingpresence/running-working- open-unlocked/neutralбез расхождений между разделами. AC8иAC13обновлены синхронно с текстом §10 и §7.1/§17 — доказательство (pure resolver tests + DOM/style smokeдля AC8,code assertion + performance_smoke.mjsдля AC13) остаётся конкретным и проверяемым после добавления новых пунктов.- Обязательные разделы §7.1 PROCESS.md по-прежнему все на месте (правка их не затронула); статус документа обновлён («ревизия 2 после жёлтого ревью r1»).
- Трейлеры коммита
2310e6d(Issue: #179,User-Visible: no) корректны; правка не меняет продуктовое поведение, только сам ТЗ-документ (класс C). - Открытых продуктовых вопросов владельцу по-прежнему нет; все 7 находок были техническими/точечными и решены автором без эскалации.
Чего не проверял
- Часть проверок из r1 не повторялась, так как соответствующий текст ТЗ не
менялся в этой правке (полная геометрия 32/96 px, границы LQI, приоритет
замков, i18n-паритет, разделы §1–§6, §8, §9, §12–§15, §18–§19) — доверие к
r1 обосновано тем, что
git diffподтверждает: эти строки не тронуты. - Continuous/Short/Alert тайминги (кроме easing) не перепроверялись повторно
по
@keyframes— они не менялись в этой редакции, полная сверка уже была в r1. - Figma-фреймы (
99:1290,104:1539) не открывались — ревью ограничено содержимым архива, как и в r1. - Производительность не измерялась — кода нет; оценка M4/AC13 остаётся решением на уровне текста, а не измеренным фактом.
- Гейты
typecheck/test/build/smoke/golden не запускались — этап ревью ТЗ, продуктового кода не существует, раздел неприменим.
Итог
Все находки r1 закрыты фактически, каждая перепроверена по первоисточнику
(архив, TOUCH-SUPPORT.md, сам diff), а не принята на слово из комментария
автора. Новых Medium/High находок нет. ТЗ готово к разработке.