docs: review document for #651

Issue: #651
User-Visible: no
This commit is contained in:
claude[bot]
2026-09-26 00:21:46 +00:00
parent 9d4f68a4ee
commit c6937f9fc7
2 changed files with 94 additions and 1 deletions
+2 -1
View File
@@ -1,10 +1,11 @@
# Индекс ревью
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1065, issue: 376. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1066, issue: 376. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
| #651 | [SPEC-REVIEW-651-r1.md](SPEC-REVIEW-651-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | устаревшая формулировка «экспериментальный 2.5D-вид» противоречит текущему статусу функции | `CHANGELOG.md` `CHANGELOG.ru.md` `docs/ISOMETRIC.md` `docs/USER-GUIDE.ru.md` `docs/STATUS.md` `USER-GUIDE.ru.md` |
| #651 | [SPEC-REVIEW-651-r2.md](SPEC-REVIEW-651-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | — | — |
| #650 | [CODE-REVIEW-650-r1.md](CODE-REVIEW-650-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #649 | [SPEC-REVIEW-649-r1.md](SPEC-REVIEW-649-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | в скоупе задачи (возвращается автору); принято ревьюером с записью, правки не требует | `lab.js` `houseplan-card.ts` |
| #649 | [SPEC-REVIEW-649-r2.md](SPEC-REVIEW-649-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | — | — |
+92
View File
@@ -0,0 +1,92 @@
# SPEC-REVIEW-651-r2
**Issue:** [#651](https://github.com/Matysh/houseplan-card/issues/651) — «2.5D: значки устройств смещаются при зуме и меняют взаимное выравнивание относительно 2D»
**Этап:** spec (ревью ТЗ, PROCESS.md §2.4)
**Заход:** r2 · блокирующих циклов израсходовано: 1 из 4
**Материал раунда:** тело issue #651, раздел `## ТЗ r1` (текст правлен на месте, версия раздела не переименована — это не находка, номер раунда ведёт документ ревью, а не заголовок ТЗ), снятое на момент этого ревью (2026-09-26); комментарий автора «Замечание SPEC-REVIEW-651-r1 исправлено…»; предыдущий документ `docs/reviews/SPEC-REVIEW-651-r1.md`; канонические документы `docs/ISOMETRIC.md`, `docs/USER-GUIDE.ru.md`, `docs/STATUS.md`.
## Вердикт
**Зелёный.** High: 0 · Medium: 0 · Low: 0.
Единственная находка r1 (устаревшая формулировка «экспериментальный 2.5D-вид» и вытекающий из неё запрет на раскрытие способа активации в changelog) закрыта точно предписанной правкой: статус функции в тексте ТЗ теперь соответствует canonical-документам, вредная инструкция для release-артефакта убрана. Остальной текст ТЗ — все обязательные разделы §7.1, однозначность и доказуемость AC1–AC9, продуктовая история вопроса — не тронут и был полностью проверен в r1; новых расхождений правка не внесла.
## Скоуп проверки (r2 — по дельте, PROCESS.md §2.10)
Раунд не первый, а дельта локальна: единственная находка r1 была точечной (два фрагмента текста), автор прямо заявил, что «поведенческий контракт не менялся», и это подтверждается сравнением полного текста ТЗ до/после. Поэтому разбор ограничен:
1. Дельта текста issue между материалом r1 (цитаты в `SPEC-REVIEW-651-r1.md`) и текущим телом issue — построчное сравнение обоих правленных фрагментов и полнотекстовый поиск оставшихся упоминаний «эксперимент»/«альфа».
2. Проверка, что правка не создала новую неоднозначность или противоречие с `docs/ISOMETRIC.md` / `docs/USER-GUIDE.ru.md` / `docs/STATUS.md`.
3. Проверка, что ни один другой раздел ТЗ (сценарий, AC1–AC9, риски, откат, затронутые модули, технические предположения) не изменился по существу — т.е. что закрытие находки не стало поводом незаметно расширить или сузить контракт.
4. Проверка состояния задачи (ветка, лейбл, гейты) на предмет несоответствий процессу.
Разделы, не задетые дельтой (полный список §7.1, доказуемость AC, продуктовая история эпика #644, существование артефактов тестов/perf-фикстур), не переразбираются — они унаследованы из r1 (раздел ниже).
## Как проверялось
- Тело issue #651 получено через `gh issue view 651 --json body --repo Matysh/houseplan-card` (MCP `get_issue`/`get_issue_comments` не были разрешены пользователем в этой сессии — как и в r1, использован `gh` CLI как эквивалентный путь к тому же публичному API).
- Все комментарии issue получены через `gh issue view 651 --json comments`; проверена цепочка: аналитика → ТЗ r1 → вердикт r1 (жёлтый) → правка автора → «Повторно передаю ТЗ на ревью» (последний комментарий, инициирующий r2).
- Полнотекстовый `grep -i "эксперимент|альфа|alpha"` по свежевыгруженному телу issue — 0 совпадений.
- Построчное сравнение фрагментов п.1 «Пользовательский сценарий» и п.13 «Release-артефакты» с цитатами находки r1 (см. таблицу ниже).
- Сверка новой формулировки со статусом функции: `docs/ISOMETRIC.md:7-8` («Since Stage 6 (#649) the 2.5D View is a public mode»), `docs/USER-GUIDE.ru.md:338-346` («Объёмный вид плана включает администратор один раз: Общие настройки → Отображение → Объёмный вид плана (2.5D)»), `docs/STATUS.md:42-43`.
- Полный текст ТЗ (все 15 пунктов) перечитан целиком и сверен с изложением из `SPEC-REVIEW-651-r1.md` — расхождений, кроме двух правленных фрагментов, не найдено.
- Проверено состояние issue: `gh issue view 651 --json labels,state` → `S4-spec-review`, `open`, метки `bug`/`P1`/`polish`. Соответствует ожиданию для повторного захода на этом этапе.
- Проверено, что ветка `issue/651-iso-device-layout-stability` существует только на remote (`git branch -a`), локальный рабочий каталог — detached HEAD на общем `dev` (правки реализации на этом SHA отсутствуют, что и ожидаемо: на этапе spec кода ещё нет).
- Гейты (`tsc`/`npm test`/`npm run build`) не запускались — на этапе spec предмет ревью текст ТЗ, а не диффа кода; код по задаче ещё не написан (тот же вывод, что в r1).
- Проверены строки подсистемы 2.5D/iso в `docs/reviews/INDEX.md` перед разбором ([[REVIEWER.md]] требование): история #160/#583/#649 подтверждает, что `iso-overlays.ts`/`iso-scene-render.ts` — зона с прежними находками именно по overlay-размещению (дублирующиеся формулы floor-anchor, непокрытый тестами grid-search fallback) — не меняет вердикт по тексту ТЗ, но подтверждает, что план автотестов (п.10) реалистично целится в подтверждённо хрупкое место.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| Medium: формулировка «экспериментальный 2.5D-вид» (п.1 «Пользовательский сценарий») противоречит публичному статусу функции после Stage 6 (#649) | Слово «экспериментальный» заменено на «публичный» | Тело issue #651, п.1: «…включает **публичный 2.5D-вид**, масштабирует и перемещает план…» (было: «включает экспериментальный 2.5D-вид…», дословная цитата из `SPEC-REVIEW-651-r1.md`) |
| Medium: инструкция «Не раскрывать способ включения экспериментальных функций» (п.13 «Release-артефакты») предписывала бы обеднить/обфусцировать публичную запись changelog | Инструкция убрана целиком; вместо неё — обычное требование к понятному пользователю тексту | Тело issue #651, п.13: «`CHANGELOG.md` и `CHANGELOG.ru.md`: понятное пользователю описание исправления дрейфа/распада раскладки значков в **публичном 2.5D-режиме** (`User-Visible: yes`)». Запрещающего предложения из r1 в тексте больше нет (подтверждено `grep`) |
Обе правки в точности соответствуют разделу «Чем закрывается» находки r1 и не расширяют и не сужают поведенческий контракт: слово «публичный» лишь исправляет статус функции, требование к changelog осталось про то же самое исправление, только без вредной инструкции.
## Унаследовано из r1 (без повторной проверки по существу)
Документ: `docs/reviews/SPEC-REVIEW-651-r1.md`, вердикт жёлтый, материал — тело issue на SHA дерева `a6750c5fd9b9b80f3a4f0f7b1642a5148c938b6f` / issue body sha256 `ea257bbcd4d329123e5400e69da0f9fb7460dfd29bcd0ddd2871e5e0a81b9e97`. Принято без повторной проверки, т.к. соответствующий текст не изменился (подтверждено построчным сравнением в этом раунде):
- Наличие и полнота всех обязательных разделов §7.1 (сценарий, проблема, скоуп/не-скоуп, поведенческий контракт 5.1–5.5, UX, данные/миграция, i18n, AC1–AC9, план автотестов, риски, откат, release-артефакты, затронутые модули, технические предположения).
- Однозначность и доказуемость каждого AC1–AC9 — конкретный тестовый файл/тип проверки и наблюдаемый критерий у каждого.
- Соответствие `docs/SCOPE.md` — задача чинит J1/J2/J3 в рамках исключения #89, новой модели/камеры/настройки/редактора не вводит.
- Продуктовая история вопроса по первоисточнику (эпик #644, Q1/Q5) и обоснованность пересмотра деградации в §5.3.5–6/§15.5 (single-split fallback из #644 явно и корректно отменён более поздним требованием #651).
- Существование артефактов, на которые ссылаются AC и план автотестов: `resolveIsoOverlayPlacement`, `resolveIsoOverlayCollisions`, `buildIsoOverlayRenderScene` (реальные экспорты), perf-бюджеты `large-house-isometric` и `isometric-stage3-dense`.
- Отсутствие миграции/схемы и i18n-строк — верно для presentation-only фикса.
## Что проверено и корректно (r2, сверх унаследованного)
- Оба правленных фрагмента (п.1, п.13) читаются однозначно и не создают новой неопределённости: «публичный 2.5D-вид» и «публичный 2.5D-режим» — согласованная терминология с остальным текстом ТЗ (везде далее по документу используется короткая форма «2.5D», например п.2, п.4, п.5.3.6, п.13 «докс/ISOMETRIC.md»), которая не расходится по существу с полным UI-именем из `docs/USER-GUIDE.ru.md` («Объёмный вид плана (2.5D)») — краткая форма используется как техническое сокращение внутри ТЗ, а не как новая пользовательская формулировка, вводящая читателя в заблуждение.
- Никаких иных изменений в тексте ТЗ, кроме двух указанных фрагментов, не найдено: разделы 2–12, 14, 15 совпадают дословно с тем, что цитируется/пересказывается в `SPEC-REVIEW-651-r1.md`.
- Полнотекстовый поиск не находит оставшихся упоминаний «эксперимент»/«альфа» нигде в теле issue.
- Комментарии подтверждают корректный процессный путь: жёлтый вердикт r1 → точечная правка автором → явное заявление «поведенческий контракт не менялся» → «повторно передаю ТЗ на ревью» (лейбл `S4-spec-review` сохранён, что и ожидается при возврате на этап spec).
## Чего не проверял
- Не перепроверял по существу продуктовую историю вопроса (эпик #644, пересмотр деградации 5.3.5–6) — это было полностью разобрано в r1 и не задето дельтой; правка терминологии не связана с этим содержанием.
- Не запускал `tsc`/`npm test`/`npm run build` — код по задаче ещё не написан (ветка содержит только правку тела issue, реализации нет), гейты этого этапа не касаются.
- Не проверял вручную поведение в браузере — нет реализации, нечего запускать; это работа код-ревью следующего этапа.
- Не пересчитывал вручную sha256-нормализацию тела issue против якоря r1 (её генерирует конвейер при публикации, `#414``) — для целей этого раунда было достаточно прямого построчного сравнения текста, что и было сделано.
---
## Комментарий в issue (для справки)
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
Единственная находка r1 (устаревшая формулировка «экспериментальный 2.5D-вид» + запрещающая инструкция для release-артефакта) закрыта точно предписанной правкой: п.1 теперь называет режим «публичным», п.13 больше не требует скрывать способ активации задокументированной публичной настройки. Остальной текст ТЗ не изменился и был полностью проверен в r1 (обязательные разделы §7.1, однозначность и доказуемость AC1–AC9, продуктовая история эпика #644) — повторно не переразбирался, дельта локальна. Задача готова к статусу «Готово к разработке».
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/651-iso-device-layout-stability`, коммит `9d4f68a4eef9` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `d79af0adfcbc78eb8d8c97ab96b75c82fa89c5dc`
```
git log --all --format='%H %T' | grep d79af0adfcbc
```
- Тело issue: `699e063899bf674ad775879fc1a0c889489a2f90b14fde467497787cc8f69442`
- Вердикт конвейера: `green` · High 0