diff --git a/docs/reviews/SPEC-REVIEW-508-r2.md b/docs/reviews/SPEC-REVIEW-508-r2.md new file mode 100644 index 00000000..80df96fb --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-508-r2.md @@ -0,0 +1,119 @@ +# SPEC-REVIEW-508-r2 + +- Issue: #508 «Сводная панель: в диалоге настроек не работает прокрутка — колесом мыши и touch на мобильных» +- Этап: S4-spec-review (PROCESS.md §2.4) +- Трек: `small` (лёгкий) — ТЗ живёт в теле issue, файла в `docs/specs/` нет (проверено: `ls docs/specs/ | grep -i 508` → пусто) +- Заход: r2 · блокирующих циклов ревью ТЗ израсходовано 1 из 2 +- Материал: тело issue #508 на момент этого раунда (комментарий 0 — S2 от Matysh/Codex, 09.09) + предыдущий вердикт (комментарий 1, claude, r1) + `docs/reviews/SPEC-REVIEW-508-r1.md` (опубликован коммитом `f02af9330b17a37eea6c8086f4335cbbc7265d36`) +- Ревьюер: Claude (сессия ревью ТЗ), другая роль/модель, чем автор + +## Разбор по дельте (PROCESS.md §2.10) + +r1 закончился жёлтым вердиктом с двумя Medium в скоупе, без High. Дельта этого +раунда — правка тела issue #508 (не код, не отдельный файл ТЗ), сделанная в ответ +на ровно эти два замечания. Диапазон разбора: те два абзаца тела issue, что +изменились (AC3 и добавленный раздел «Откат»), плюс проверка, что остальные части +ТЗ (скоуп, AC1/AC2/AC4/AC5/AC6, «Причина», «Изменения», «Тесты», выбор трека) не +задеты и не нуждаются в повторной проверке. Дельта локальна: нет ребейза (ветки +задачи ещё нет, кода нет), контракт поведения не менялся, новая подсистема не +появилась, объём правки (два абзаца из некрупного issue) несопоставим с объёмом +исходного ТЗ — сокращённый разбор оправдан. + +## Закрытие раунда r1 + +| Находка | Чем закрыта | Где это видно | +|---|---|---| +| **M1.** AC3 ссылался на несуществующее доказательство `golden summary-*` (`ls demo/golden/baselines \| grep -i summary` → пусто; единственный скрипт `demo/capture_summary_panel_505.mjs` прямо не golden/smoke) | Автор выбрал вариант (а) из предложенных ревью: golden-часть убрана из AC3, доказательством оставлен только `smoke_summary_panel_polish`, с явной ссылкой на находку | Текущее тело issue, AC3: «Нативная ветка (демо) не меняется: `smoke_summary_panel_polish` зелёный без правок его ожиданий (golden-сцен диалога панели нет — ревью ТЗ r1 M1).» — сравнено с исходной формулировкой, процитированной в `SPEC-REVIEW-508-r1.md` («…и golden `summary-*` без отличий») | +| **M2.** В теле issue не было раздела «откат», обязательного для лёгкого трека шаблоном PROCESS.md §5 | Добавлен абзац «Откат» почти дословно по формулировке, предложенной ревью r1 | Текущее тело issue, последний абзац раздела «ТЗ»: «**Откат.** Обычный ревёрт коммита: атрибут `flex-content` — opt-in только у диалога настроек панели, остальные `hp-dialog` его не несут; ни данных, ни миграций.» | + +Проверка на «не сломала ли правка то, что r1 уже принял» (повод регрессии #102): +новая формулировка AC3 не дублирует AC4 (вариант (б) из предложенных r1 создал бы +именно такое дублирование — автор его не выбрал), остаётся отдельным проверяемым +критерием со способом доказательства `smoke`, соответствует DoR §2.5 («у каждого +AC указано, чем он доказывается»). Раздел «Откат» соответствует шаблону §5 +дословно по позиции (последний блок ТЗ) и по содержанию (как выключить — здесь +«опция не включена по умолчанию для остальных диалогов» + «обычный ревёрт», +затрагиваемых данных/миграций нет — заявлено явно). + +## Унаследовано из r1 + +Без повторной проверки в этом раунде принято (см. `docs/reviews/SPEC-REVIEW-508-r1.md`, +основан на теле issue на момент коммита `f02af9330b17a37eea6c8086f4335cbbc7265d36`): + +- Диагноз и причинно-следственная цепочка бага (scroll chaining обрывается на + `.body` без ограничения высоты в `ha-dialog`/`wa-dialog`) — подтверждена + воспроизведением на реальном стенде HA 2026.9.1 и изолированной + Playwright-проверкой, не догадка. Раздел «Причина» текстуально не изменился. +- Выбор трека `small` корректен: одна поверхность, нет миграции конфига, нет + новых i18n-ключей, нет нового UX-контракта (восстанавливается уже обещанный + контракт #505). Раздел «Скоуп» не изменился. +- Touch входит в задачу правомерно по `docs/TOUCH-SUPPORT.md` (диалог настроек + панели — гарантированная View-поверхность), это не самовольное расширение + скоупа. Не изменилось. +- AC1, AC2, AC5 — сформулированы однозначно, способ доказательства назван + (`смок`), у AC1/AC2 есть именованные мутанты для протективного эффекта + (`summary-dialog-drops-flex-content`, `hp-dialog-ignores-flex-content`). + Текст этих AC не изменился. +- AC4 опирается на реально существующий и достаточно широкий набор golden-эталонов + с диалогами — претензия M1 относилась только к AC3, не к AC4; текст AC4 не + изменился. +- Раздел «Тесты», включая негативного свидетеля (в) «без `flex-content` у стаба + скролл не идёт» (доказывает, что стенд воспроизводит баг, а не только что фикс + включён) — не изменился. +- L1 (файл документации для фразы про футер не был назван точно) и L2 (перф + явно не проговорён) были сняты как Low на усмотрение автора ещё в r1 и не + требовали правки для зелёного вердикта. В этом раунде автор попутно закрыл + оба: докабзац теперь целится в `docs/ARCHITECTURE.md` (раздел «Изменения», + п.3), а AC6 явно говорит «перф не затронут (один атрибут, без новых + обработчиков)». Это бонус, не предмет проверки этого раунда — переисследовать + не требуется, оба и так были необязательны. + +## Что проверено в этом раунде (сверх таблицы закрытия) + +- Полное тело issue #508 прочитано целиком (не только изменённые абзацы) — + проверено, что делта ограничена ровно AC3 и добавленным «Откат», остальной + текст совпадает по смыслу и структуре с тем, что цитирует `SPEC-REVIEW-508-r1.md`. +- `docs/specs/` — файла для #508 нет (`ls docs/specs/ | grep -i 508` → пусто), + трек `small` соблюдён. +- PROCESS.md §5 (шаблон лёгкого трека: «проблема · контракт · AC1…ACn с + доказательством · откат») и §2.5 (DoR) — новый раздел «Откат» и явные фразы + об i18n/перф в AC6 закрывают пункты DoR «влияние на производительность + названо (или явно нет)» и «откат: как выключить или вернуть назад». +- Ни один открытый продуктовый вопрос владельцу в новой версии ТЗ не появился; + весь материал раунда — технический (выбор формулировки AC, докфайл, шаблонная + фраза), решается автором/ревьюером, как и в r1. +- Новых High/Medium в изменённых абзацах не найдено: обе новые формулировки + однозначны, способ доказательства назван, откат не подразумевается, а + прописан. + +## Чего не проверял + +- Не запускал никаких гейтов (`typecheck`/`test`/`build`/`golden`/`smoke`) — этап + ревью ТЗ, кода ещё нет, к этому этапу гейты не относятся (как и в r1). +- Не проверял заново существование `demo/capture_summary_panel_505.mjs` и его + комментарий, факт отсутствия golden `summary-*`, структуру рендера + `src/hp-dialog.ts`, docs/TOUCH-SUPPORT.md — всё это уже проверено чтением в r1 + и не затронуто дельтой этого раунда (см. «Унаследовано из r1»). +- Не оценивал заново качество будущего `test/hp-dialog-contract.test.mjs` — + файла ещё нет, текст его описания в ТЗ не изменился с r1. + +## Вердикт + +Оба Medium из r1 закрыты прямыми правками тела issue, проверено построчным +сравнением с формулировками, процитированными в `SPEC-REVIEW-508-r1.md`, а не +на слово автора. Новых High или Medium в изменённых абзацах нет. Открытых +продуктовых вопросов к владельцу нет. ТЗ готово к переводу в «Готово к +разработке» (DoR §2.5: откат назван, перф назван, AC1…AC6 проверяемы с +указанным способом доказательства). + +Вердикт: зелёный · заход r2 · блокирующих циклов 1/2 · High: 0 · Medium: 0 + +--- + + + +## Материал раунда + +- Ветка: `dev`, коммит `` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Якоря снять не удалось: ветки задачи нет, материал читался по `dev`. +- Вердикт конвейера: `green` · High 0