11 KiB
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, получен на SHA0ac63b6(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:
-- 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.1Space 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