Files
houseplan-card/docs/reviews/SPEC-REVIEW-508-r2.md
T
2026-09-09 19:21:54 +00:00

120 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `dev`, коммит `` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Якоря снять не удалось: ветки задачи нет, материал читался по `dev`.
- Вердикт конвейера: `green` · High 0