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

12 KiB
Raw Blame History

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