mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-04 13:48:57 +00:00
114 lines
11 KiB
Markdown
114 lines
11 KiB
Markdown
# Ревью ТЗ — 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 находок нет. ТЗ готово к разработке.
|