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

108 lines
9.0 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.
# SPEC-REVIEW-300-r4
- Issue: [#300](https://github.com/Matysh/houseplan-card/issues/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 → нет