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

11 KiB
Raw Blame History

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:

-- 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