docs: review document for #199

Issue: #199
User-Visible: no
This commit is contained in:
claude[bot]
2026-08-22 13:12:13 +00:00
parent b76f89a282
commit add9dfe3a4
+128
View File
@@ -0,0 +1,128 @@
# 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**