Files
houseplan-card/docs/reviews/SPEC-REVIEW-211-r2.md
T
2026-08-19 21:25:20 +00:00

148 lines
12 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 #211, цикл r2
- **Issue:** https://github.com/Matysh/houseplan-card/issues/211
- **ТЗ:** `docs/specs/211-device-icons-visual-parity.md` (коммит `ce30464`,
ветка `issue/211-device-icons-visual-parity`, поверх `93200eb`)
- **Трек:** обычный (аналитика явно исключила `small`/`trivial`; лимит циклов — 4)
- **Вердикт:** зелёный · цикл r2/4 · High: 0 · Medium: 0
## Скоуп ревью
Цикл r1 (`docs/reviews/SPEC-REVIEW-211-r1.md`) вынес один Medium (M1) и два Low
(L1, L2), все — в скоупе задачи. Автор ответил правкой `ce30464` («docs:
clarify device glyph parity contract») и комментарием в issue, перечислившим
все три исправления. Скоуп этого цикла: (а) действительно ли `ce30464`
устраняет M1/L1/L2 по существу, а не косметически; (б) не внесла ли правка
новых нормативных утверждений без подтверждения источником; (в) не
расширился ли скоуп/AC/архитектурное решение по ходу правки (§2.4, §9 п.9
`PROCESS.md`). Полная переоценка ТЗ, уже пройденная в r1 (обязательные разделы
§7.1, геометрия shell/core `1.26875`, value-pill `0.7875`/`0.39375`, цвета
состояний, скоуп/не-скоуп, трассируемость), не повторялась заново с нуля —
повторное независимое скачивание архива и измерение SVG не требовалось,
поскольку эти числа в `ce30464` не менялись; проверялось построчно только то,
что менялось.
## Как проверялось
1. Прочитан комментарий владельца/автора «Правки по SPEC-REVIEW r1» в issue
#211 — что именно и в каком коммите исправлено.
2. `git show --stat ce30464` — подтверждено, что коммит правит только
`docs/specs/211-device-icons-visual-parity.md` (1 файл, 21 insertions/13
deletions), никакой продуктовый или тестовый код не тронут; трейлеры
`Issue: #211` / `User-Visible: no` корректны для документации без
поведенческого изменения.
3. `git show ce30464 -- docs/specs/211-device-icons-visual-parity.md` —
построчный разбор диффа против находок r1.
4. Полный текущий текст ТЗ прочитан целиком повторно (Read, 361 строка) —
не только изменённые ханки, чтобы поймать возможное рассогласование между
правленными и неправленными местами.
5. `grep -n` по `0\.5|MDI viewport|COMPARISON_NOTES|Touch editor` по всему
файлу — цель: убедиться, что не осталось иных мест, унаследовавших то же
непроверенное число `0.5 × core` как факт, и что литеральный тег
`Touch editor:` не задваивается/не конфликтует с остальным текстом.
6. Свежий `git log --oneline -5 ce30464` — подтверждена цепочка коммитов
(`93200eb` → `4fc0f7b` review doc → `ce30464` правка) и что HEAD ветки
останавливается на `ce30464`, то есть ревьюер смотрит на тот же снимок,
на который указывает комментарий автора.
7. Код не запускался, гейты §8 `PROCESS.md` не прогонялись — на этапе ревью
ТЗ по #211 продуктового кода не существует (issue не покидал `S3-spec`/
`S4-spec-review`).
## Находки
Нет. Ни одна из находок r1 не выродилась в частичное исправление, и правка не
внесла новых расхождений.
### Проверка M1 (закрыта)
`§3 п.2`, `§7.1` (таблица «Геометрический контракт»), `AC1` (`§12`) и `§16 п.6`
до правки утверждали `0.5 × core` как прямую цитату архива наравне с
проверенными числами (`1.26875`, `0.7875`). После `ce30464`:
- `§3 п.2` больше не заявляет «пакет использует `40×40` внутри `80×80`», а
прямо цитирует измерение r1: общий glyph `≈0.417 × core`, Lock/Unlock
`0.333…0.4375 × core`, и явно говорит «архив не задаёт универсальный
viewport для всех MDI» — то есть признаёт отсутствие единого нормативного
значения вместо того, чтобы его постулировать.
- Строка «MDI viewport | width = height = `0.5`» в таблице `§7.1` заменена на
«MDI glyph | painted bounding box того же reference glyph совпадает с
соответствующим SVG; единого ratio для разных MDI нет» — критерий стал
сравнением с эталонным SVG per-glyph, а не фиксированным числом.
- `AC1` (`§12`) больше не требует «MDI viewport равен `0.5 × core`»; требование
переформулировано в «painted bounding box reference glyph совпадает с прямым
SVG» — то же самое per-glyph сравнение, проверяемое тем же browser smoke +
side-by-side golden, что назван доказательством.
- `§16 п.6` (новый) явно маркирует `0.5 × core` как «стартовый технический
размер... не нормативная константа архива», который «реализация и код-ревью
вправе скорректировать по прямому SVG/runtime сравнению, не меняя ТЗ» — то
есть число перенесено именно в блок принятых технических предположений,
как и предлагал вариант №2 находки M1, с обоснованием через ту же цифру
`0.417`, которую я независимо подтвердил в r1.
Результат: контракт и AC1 больше не выдают непроверенную догадку за факт
архива, а формулируют проверяемое per-glyph сравнение с прямым SVG — именно
то, что должен доказывать независимый fixture из `§11`. `grep` (шаг 5 выше)
подтвердил, что оставшиеся вхождения `0.5` в файле — это core radius (строка
123), pill radius Text core (строка 126), допуск `0.5 CSS px` (строка 131) и
сам explicit-assumption блок `§16 п.6` (строка 358): все легитимны, ни одно не
восстанавливает старую формулировку.
### Проверка L1 (закрыта)
`§4` больше не называет `COMPARISON_NOTES.md` среди нормативных источников —
список сузился до реально существующих в архиве `SPECIFICATION.md`,
`DEVELOPER_HANDOFF.md`, `ACTIVE_ANIMATION_SPEC.md`. `grep` не находит
`COMPARISON_NOTES` нигде в файле.
### Проверка L2 (закрыта)
`§8` теперь содержит буквальный канонический тег `**Touch editor: best effort
/ intentionally degraded.**` перед описанием desktop-first редактора — ровно
формат, требуемый `docs/TOUCH-SUPPORT.md` («Documentation rule»). Смысл не
изменился относительно r1 (там расхождение было чисто формулировочным), тег
встречается один раз, дублирования или противоречия с остальным `§8` нет.
## Проверено и признано корректным
- **Изменение точечное**: дифф `ce30464` касается ровно трёх мест,
соответствующих M1/L1/L2, плюс синхронного пояснения к допуску в `§7.1`
(«Для glyph сравнивается painted path... а не bounding box элемента
`ha-icon`») и правки формулировки `AC9`, где `0.62` теперь описан как
«переразмеренного reference glyph» вместо голого числа — обе правки
согласуются с новой формулировкой `AC1`/`§7.1` и не вводят новых фактов.
- **Скоуп, не-скоуп, архитектурный контракт (§5, §6, §10) не менялись** —
диффу не тронуты; это подтверждает комментарий автора и подтверждает
повторное чтение всего файла.
- **Не осталось несогласованных остатков старой формулировки**: ни `MDI
viewport`, ни `COMPARISON_NOTES.md` не встречаются нигде в текущем тексте.
- **Трассируемость и трейлеры**: `ce30464` несёт `Issue: #211` и
`User-Visible: no`, что верно для правки только документации ТЗ.
- Всё, что было «проверено и признано корректным» в r1 (геометрия shell/core,
value-pill, цвета состояний по всем темам/состояниям, разрешение регрессии
`Dark/Unlock.svg`, обязательные разделы §7.1 `PROCESS.md`, границы скоупа,
touch/security-инвариант), не тронуто этой правкой и остаётся в силе без
повторной независимой перепроверки архива — числа, лежащие в основе тех
находок, в `ce30464` не менялись.
## Чего не проверял
- Архив дизайнера повторно не скачивался и SVG повторно не измерялись — все
числа, подтверждённые в r1 (`1.26875`, `0.7875`, `0.39375`, цвета состояний,
измерения bbox `0.417`/`0.333–0.4375`), в `ce30464` не изменились; правка
затронула только формулировку контракта вокруг уже добытых в r1 фактов.
- Figma-фреймы (`99:1290`, `104:1539`) по-прежнему не открывались — тот же
повод, что в r1.
- Продуктовый код, гейты `typecheck`/`test`/`build`/smoke/golden — не
запускались; кода по #211 всё ещё не существует (issue в `S4-spec-review`).
- Производительность не измерялась — предмета для измерения нет.
## Итог
Все три находки r1 устранены по существу, не косметически: M1 закрыт переносом
непроверенного числа в explicit-assumption и заменой нормативного критерия на
проверяемое per-glyph SVG-сравнение; L1 и L2 — точечными правками текста без
побочных эффектов. Скоуп, AC-нумерация, архитектурное решение и остальные
разделы ТЗ не расширились. Открытых находок нет.
Вердикт — зелёный. Issue готов к переходу в «Готово к разработке» (`S5-ready`).