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

114 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ревью ТЗ — 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 находок нет. ТЗ готово к разработке.