From add9dfe3a4d7c48b2e52832ded0f1c6817da10ab Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2026 13:12:13 +0000 Subject: [PATCH] docs: review document for #199 Issue: #199 User-Visible: no --- docs/reviews/SPEC-REVIEW-199-r2.md | 128 +++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 docs/reviews/SPEC-REVIEW-199-r2.md diff --git a/docs/reviews/SPEC-REVIEW-199-r2.md b/docs/reviews/SPEC-REVIEW-199-r2.md new file mode 100644 index 00000000..6d6ef0da --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-199-r2.md @@ -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**