Files
houseplan-card/docs/reviews/SPEC-REVIEW-179-r2.md
T
2026-08-19 19:13:42 +00:00

11 KiB
Raw Blame History

Ревью ТЗ — 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.

Как проверялось

  1. Прочитаны docs/SCOPE.md, AGENTS.md, PROCESS.md (§2.4, §7.1, §7.2, §8, §12) и целиком docs/reviews/SPEC-REVIEW-179-r1.md.
  2. Прочитано тело issue #179 и все комментарии (gh issue view 179 --json body,comments), включая ответ автора от 2026-08-19T19:06:37Z с перечнем исправлений.
  3. Получен точный diff редакции: git diff 517a710 2310e6d -- docs/specs/ 179-device-icons-redesign.md — правка сверялась по факту изменённых строк, а не по пересказу автора в комментарии.
  4. Архив дизайнера передекачан и распакован (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 требовал не найти маппинг в архиве, а явно принять и промаркировать решение в ТЗ).
  5. Сверена цитата docs/TOUCH-SUPPORT.md — таблица контракта содержит ровно | Device editor | … | Best effort | — правка M5 воспроизводит источник точно, без искажения формулировки.
  6. Проверена трассируемость: docs/specs/README.md не расходится с ТЗ, коммит 2310e6d несёт корректные трейлеры Issue: #179 / User-Visible: no, изменения ограничены одним файлом ТЗ (класс C, документация, что не требует отдельного issue сверх текущего).
  7. Гейты не прогонялись — на этапе ревью ТЗ продуктового кода нет, раздел неприменим (как и в 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 используют один и тот же mapping presence/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 находок нет. ТЗ готово к разработке.