Files
houseplan-card/docs/reviews/SPEC-REVIEW-300-r4.md
T
2026-08-24 19:38:50 +00:00

9.0 KiB
Raw Blame History

SPEC-REVIEW-300-r4

  • Issue: #300 — Подписи при ресайзе: подсвечивать измеряемые стены, убрать размер перетаскиваемой, площадь показывать по бокам от неё
  • Этап: spec (PROCESS.md §2.4)
  • ТЗ: docs/specs/300-resize-measurement-layout.md, коммит 23d208f30cad290c8430098c0446a6804baa8278 на ветке issue/300-resize-labels
  • Заход: r4 · блокирующих циклов израсходовано (до этого раунда) 3/4
  • Ревьюер: Claude (роль «ревьюер ТЗ», не автор)

Скоуп разбора

Повторный раунд (PROCESS.md §2.10, §2.9). Предыдущий вердикт — r3, жёлтый, Medium M4, документ docs/reviews/SPEC-REVIEW-300-r3.md, получен на SHA 4969f46e0e5d1e6440e53fd133f957c0103cf44e (подтверждено заголовком того документа — SHA в нём назван явно, дефекта r2/r3 «SHA не назван» здесь нет).

Дельта — git diff 4969f46e..23d208f3 -- docs/specs/300-resize-measurement-layout.md, один коммит 23d208f3 («docs: согласовать footprint кнопки с zoom»), 3 вставки / 2 удаления, единственный файл. Правка локальна: одна формулировка в §4 п.6. Контракт поведения не меняется, новая подсистема не затронута, объём дельты кратно меньше исходной задачи → полный разбор всего документа не требуется, разбор по дельте (§2.10 п.4) обоснован.

Так как правка — правка текста ТЗ (класс C), а не продуктового кода, гейты §8/§10 к этому раунду неприменимы: этап всё ещё S4-spec-review, кода нет.

Закрытие раунда r3

Находка Чем закрыта Где это видно
M4 — третья копия устаревшей формулировки «screen-fixed no-fly zone» кнопки настроек комнаты осталась в §4 п.6, хотя r2/r3 уже поправили §6.3 и §18 п.4 на «zoom-dependent footprint, вычисленный для текущего view.w по iconCqw()» Строка §4 п.6 заменена на ту же формулировку, слово-в-слово согласованную с §6.3/§18 п.4 docs/specs/300-resize-measurement-layout.md:70-73 (коммит 23d208f3): «...в zoom-dependent footprint кнопки для текущего view.w, вычисленный по iconCqw(), плашка сдвигается...»

Проверено не на слово: полнотекстовый поиск по всему файлу (rg -n "screen-fixed|no-fly|footprint|rlgearbtn") даёт три места с footprint (§4 п.6, §6.3, §18 п.4) — все три теперь идентичны по смыслу («zoom-dependent … view.w … iconCqw()»). Оставшиеся два вхождения screen-fixed (§6.3 про leader-stroke, §18 п.5 про highlight-strokes) относятся к другим элементам — 12 px leader и halo/accent-обводке подсветки, — которые по конструкции действительно не масштабируются (vector-effect: non-scaling-stroke), то есть термин там употреблён верно и не подлежит правке. no-fly в файле не встречается вовсе. Автор сообщил о том же результате локальной проверки в комментарии — совпало с независимым повторением здесь.

Унаследовано из r3

Всё, что дельта не затрагивает, принимается без повторной проверки — со ссылкой на docs/reviews/SPEC-REVIEW-300-r3.md (SHA 4969f46e), который сам унаследовал закрытия r1/r2 (M1, M2, M3) тем же порядком:

  • обязательные разделы §7.1 (сценарий, что человек увидит, скоуп/не-скоуп, контракт поведения, UX, модель данных, i18n, AC1…AC11 с доказательством, план автотестов, риски, откат, release-артефакты) — присутствуют и однозначны;
  • диагноз текущего кода (_rszEdgeLabels(), poleOfInaccessibility(), _rszInnerSpanCms()) сверен построчно с src/houseplan-card.ts в r1;
  • решение владельца по Q1 (narrow room: площадь всегда видна, leader-линия) перенесено в ТЗ верно — проверено в r1;
  • M1 (недекларированное скрытие .roomgear) закрыта в r2: кнопка .rlgearbtn остаётся всегда видимой, конфликт снимается сдвигом area-плашки, алгоритм сдвига оформлен как оспариваемое предположение (§18 п.4), сам факт видимости — как acceptance contract (§4 п.6, §11 AC7);
  • M2 (AC11 требовал нереализуемый относительный regression-бюджет) закрыта в r2: AC11 ссылается на реальный абсолютный потолок RENDER_P95_MS = 25 в demo/benchmark_safe_resize_render.mjs, файл поимённо в §10 и §13 п.5;
  • M3 (то же «screen-fixed» вместо zoom-dependent) закрыта в r3 для §6.3 и §18 п.4, с добавлением non-default-zoom fixture в §13 п.2 — проверено по коду iconCqw()/view.w в src/space-geometry.ts и src/houseplan-card.ts в r2/r3;
  • границы со смежными контрактами (#233 внутренние размеры, #277 fixed-topology Resize, #238 подписи проёмов, #52 View) и структура разделов 5, 7–10, 14–17 — не тронуты дельтой r4, наследуются как есть.

Находки этого раунда

Нет. Правка текстовая, консервативная и приводит формулировку в соответствие с уже дважды проверенным техническим фактом (zoom-зависимость размера .rlgearbtn через iconCqw(iconPct, space, view.w, kiosk)); нового контракта, новой догадки или новой неоднозначности не вносит.

Что проверено и корректно

  • Дельта 4969f46e..23d208f3 ограничена одной строкой ТЗ, ничего другого в диапазоне коммитов класса A/B/C не изменилось (git show --stat 23d208f3 — один файл, docs/specs/300-resize-measurement-layout.md);
  • закрытие M4 полное и не оставляет четвёртой копии устаревшей формулировки где-либо в документе (полный rg по файлу, а не по изменённым строкам);
  • коммит несёт корректные трейлеры Issue: #300 и User-Visible: no — ожидаемо для правки, ещё не касающейся продукта (git log -1 --format=%B 23d208f3);
  • открытых продуктовых вопросов не осталось (уже зафиксировано автором в комментарии к r0/ТЗ, повторной эскалации дельта не создаёт).

Чего не проверял

  • Полный повторный разбор AC1–AC11, разделов 5, 7–10, 14–17 — не входил в делту, унаследован из r3 согласно списку выше;
  • продуктовый код src/** — на этапе S4-spec-review кода ещё нет, гейты §8/§10 (typecheck/test/build/check-docs/smoke/golden) к этому раунду неприменимы и не запускались;
  • канонические документы docs/RESIZE.md, docs/CANVAS.md, docs/USER-GUIDE.ru.md на предмет соответствия терминологии — не входили в делту r4, их сверка входит в объём r1 (сценарий/термины) и была там выполнена; здесь не повторялась.

Вердикт

Вердикт: зелёный · заход r4 · блокирующих циклов 3/4 · High: 0 · Medium: 0 → нет