mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
@@ -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**
|
||||
Reference in New Issue
Block a user