Files
houseplan-card/docs/reviews/SPEC-REVIEW-199-r2.md
T
2026-08-22 13:12:13 +00:00

129 lines
11 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-199-r2 — Optimize geometry preflight
- **Issue:** https://github.com/Matysh/houseplan-card/issues/199
- **ТЗ:** `docs/specs/199-optimize-geometry-preflight.md`, коммит `b76f89a`
на ветке `issue/199-optimize-geometry-preflight`.
- **Предыдущий раунд:** `docs/reviews/SPEC-REVIEW-199-r1.md`, получен на
SHA `0ac63b6` (SHA в документе r1 назван явно автором ревью — не находка).
- **Трек:** обычный (issue не помечен `small`), файл ТЗ обязателен.
- **Заход:** r2. Блокирующих циклов израсходовано **1 из 4** — r1 был жёлтым
(тратит бюджет), текущий заход при отсутствии High/Medium зелёный и бюджет
не расходует (PROCESS.md §4, решение владельца по #227).
## Скоуп ревью — по дельте (PROCESS.md §2.10)
Дельта объявлена явно: `git diff 0ac63b6..HEAD` затрагивает ровно два файла —
появление `docs/reviews/SPEC-REVIEW-199-r1.md` (артефакт предыдущего раунда,
не предмет проверки) и правку `docs/specs/199-optimize-geometry-preflight.md`
на 4 добавленные / 1 удалённую строку внутри §8.1:
```diff
-- EN: equivalent plain-language text without implementation terms.
+- EN: `Could not safely verify the geometry of the following spaces:
+ {spaces}{more}.`
+- EN hint: `Plans were not changed. Update House Plan and try again. If the
+ error persists, attach a space export to the bug report.`
```
Дельта локальна: чистая правка текста одного UX-сообщения, без ребейза (родитель
коммита — тот же `0ac63b6`, `dev` не уходил вперёд), без смены контракта
поведения, без новой подсистемы, объём несопоставимо меньше исходной задачи.
Условия «разбор остаётся полным» (§2.10) не выполнены — разбор по дельте
корректен, полный повторный прогон ТЗ не требуется.
Единственная находка r1 — Medium M1 («EN-текст сообщения об отказе и
подсказки не зафиксирован дословно») — целиком лежит внутри этой дельты:
это ровно тот участок, который автор поправил. Значит объём проверки в r2
покрывает 100% дельты, ничего не остаётся «вне поля зрения».
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| **M1** (Medium, в скоупе): §8.1 не даёт дословный EN-текст главного сообщения об отказе и подсказки — AC6 непроверяем для EN-локали, несогласованность с уже дословным EN у `Space N`/`and N more` в том же разделе. | В §8.1 добавлены две новые строки: дословный `EN:` для главного сообщения и отдельный `EN hint:` для подсказки, оба — точный перевод соответствующих RU-строк, без implementation-терминов (никаких «polyclip», «boolean pass», «exception»). | `docs/specs/199-optimize-geometry-preflight.md:213-216` (коммит `b76f89a`), см. diff выше. |
| Low (для протокола, не блокирует): артефакт шаблона «Коммит: $sha.» в хендофф-комментарии автора. | Не в скоупе правки ТЗ и не требовала действия по итогу r1 (ревьюер не правит issue-комментарии). Автор в r2 указал реальный SHA (`b76f89a`) в новом хендоффе — комментарий приведён в порядок сам по себе. | Комментарий issue #199 от 2026-08-22T13:08:18Z. |
## Проверка M1 по существу (не на слово автора)
- **Терминология.** RU «пространство» и EN «space» — установленный термин
продукта, а не изобретение: `docs/USER-GUIDE.ru.md` («Пространства», раздел 7)
и `docs/USER-GUIDE.md` («Space | Floor, yard, garage or building») используют
его идентично. Совпадает с уже принятым в том же §8.1 `Space N`/`and N more`.
- **Точность перевода.** Построчное сравнение:
- RU «Не удалось безопасно проверить геометрию следующих пространств:
{spaces}{more}.» ↔ EN «Could not safely verify the geometry of the
following spaces: {spaces}{more}.» — тот же плейсхолдер, тот же смысл,
без технических терминов (соответствует решению владельца Q3).
- RU hint «Планы не изменены. Обновите House Plan и повторите. Если ошибка
останется, приложите экспорт пространства к отчёту об ошибке.» ↔ EN hint
«Plans were not changed. Update House Plan and try again. If the error
persists, attach a space export to the bug report.» — совпадает по
структуре (три предложения, тот же порядок действий).
- «Bug report» — уже используемый в репозитории термин
(`docs/CHANGELOG.md:3896` «bug report with diagnostics hint»,
`docs/STYLING-HOOKS.md:48` «is not a bug report»), не изобретён заново.
- **Формат.** Новые EN-строки оформлены тем же способом (обратные кавычки),
каким в этом же разделе уже оформлен `Space N`/`and N more` — внутренней
несогласованности, на которую указывал M1, больше нет.
- **AC6 стал проверяемым.** AC6 требует «i18n/UI unit» доказательство;
теперь для EN-локали есть дословная строка, на которую можно писать
assertion, а не директиву «эквивалент».
Правка не расширяет и не сужает контракт §7 (whole-plan block, различение
`null`/successful-empty, fingerprint) и не касается backend/atomicity (§9),
performance-бюджета (§10) или AC1–AC5, AC7–AC14 — эти участки дельта не
задевает.
Новых находок в дельте нет.
## Унаследовано из r1
Документ: `docs/reviews/SPEC-REVIEW-199-r1.md`, SHA `0ac63b6`. Принято без
повторной проверки в r2, так как дельта их не задевает:
- Продуктовая рамка §1–§2 (персона, поверхность, момент, J6/`TOUCH-SUPPORT.md`).
- Подтверждение проблемы §3 по коду `origin/dev` (`_openAlignDialog`,
`_runAlignToGrid`, fallback `_wallUnionGeometry` → `paperRoomShapes`).
- Контракт preflight §7 целиком: production-equivalent geometry check,
различение `null` (structural failure) vs successful-empty (§7.3),
fingerprint и повторная проверка (§7.4).
- Продуктовые решения владельца Q1–Q3, перенесённые в контракт без искажения
(whole-plan block, блокировка уже деградированного пространства, текст без
implementation-терминов и без кнопки Apply) — сам факт переноса решений,
а не конкретный текст (текст — предмет этого раунда, см. выше).
- §8.2 (no-op/success), §9 (backend/atomicity/compatibility), §10
(performance-бюджет и large-house fixture), Non-scope §6.
- AC1–AC14: нумерация, однозначность, способ доказательства — за исключением
AC6, чья доказуемость для EN-локали как раз и была предметом M1 и проверена
заново выше.
- Блок §16 «Принятые технические предположения».
- Формальная структура ТЗ (все обязательные разделы §7.1 присутствуют),
запись `docs/specs/README.md`.
- Rollback (§15).
## Гейты
Этап — ревью ТЗ, продуктовый код не менялся (диапазон 0ac63b6..HEAD не
затрагивает `src/**`, `custom_components/**`, `test/**`, `demo/**`). Гейты
`typecheck`/`test`/`build`/`check-docs`/smoke/golden/backend неприменимы,
как и в r1 — их прогон был бы работой без предмета. Это осознанное решение,
а не пропуск.
## Чего не проверял
- Всё, что перечислено в разделе «Унаследовано из r1» выше — не перепроверял
предметно, полагаюсь на r1 при подтверждённом отсутствии дельты в этих
участках.
- Код реализации — его по-прежнему нет, ревью только ТЗ.
- Реальную производительность и мутационные тесты — не появились новые данные
с r1, эти пункты остаются открытыми до код-ревью, как и было зафиксировано
в r1 «Итог».
## Итог
Единственная находка предыдущего раунда (Medium M1) закрыта точной правкой
текста, воспроизводимой построчно в diff. Новых находок дельта не создала.
High-находок нет, Medium-находок нет.
**Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0**