From c6937f9fc7f0e5494b6dc79ecce4f372c1b0f9de Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 00:21:46 +0000 Subject: [PATCH] docs: review document for #651 Issue: #651 User-Visible: no --- docs/reviews/INDEX.md | 3 +- docs/reviews/SPEC-REVIEW-651-r2.md | 92 ++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 docs/reviews/SPEC-REVIEW-651-r2.md diff --git a/docs/reviews/INDEX.md b/docs/reviews/INDEX.md index 40118b9b..8679d651 100644 --- a/docs/reviews/INDEX.md +++ b/docs/reviews/INDEX.md @@ -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 | — | — | diff --git a/docs/reviews/SPEC-REVIEW-651-r2.md b/docs/reviews/SPEC-REVIEW-651-r2.md new file mode 100644 index 00000000..0c0932ae --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-651-r2.md @@ -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) — повторно не переразбирался, дельта локальна. Задача готова к статусу «Готово к разработке». + +--- + + + +## Материал раунда + +- Ветка: `issue/651-iso-device-layout-stability`, коммит `9d4f68a4eef9` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `d79af0adfcbc78eb8d8c97ab96b75c82fa89c5dc` + ``` + git log --all --format='%H %T' | grep d79af0adfcbc + ``` +- Тело issue: `699e063899bf674ad775879fc1a0c889489a2f90b14fde467497787cc8f69442` +- Вердикт конвейера: `green` · High 0