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