Files
houseplan-card/docs/reviews/SPEC-REVIEW-448-r2.md
T
2026-09-04 16:20:35 +03:00

179 lines
13 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-448-r2
- Issue: [#448](https://github.com/Matysh/houseplan-card/issues/448) — Labs: единый бессрочный переключатель `hp_alpha` для экспериментальных функций
- ТЗ: `docs/specs/448-alpha-switch.md` (SHA `4b431f79`)
- Трек: полный (не изменился с r1)
- Этап: `S4-spec-review` · заход r2 · блокирующих циклов израсходовано 1 из 4 (r1 — жёлтый, потратил цикл; зелёный вердикт бюджет не тратит, #227)
- Ревьюер ≠ автор ТЗ; сессия не участвовала в написании ни исходного ТЗ, ни правки r2.
## Скоуп раунда
Разбор по дельте (PROCESS.md §2.10 / issue #214): предмет раунда — не задача
целиком, а изменение со времени вердикта r1.
**Материал r1** (взят из блока «Материал раунда» в конце
`docs/reviews/SPEC-REVIEW-448-r1.md`, дописанного конвейером):
- ветка `issue/448-alpha-switch`, коммит `aa72704aacce`;
- SHA резолвится и сейчас (`git show aa72704a --stat` отработал, ребейза не
было) — материал взят напрямую по SHA, поиск по дереву/блобу не потребовался.
**Дельта r1→r2** — `git diff aa72704a..HEAD`:
```
docs/reviews/SPEC-REVIEW-448-r1.md | 181 +++++++++++++++++++++++++++++++++++++
docs/specs/448-alpha-switch.md | 6 ++
2 files changed, 187 insertions(+)
```
`docs/reviews/SPEC-REVIEW-448-r1.md` — публикация документа r1 в ветку задачи
шагом конвейера (PROCESS.md §7.3), не авторская правка; не предмет разбора.
Содержательная дельта — ровно 6 добавленных строк в
`docs/specs/448-alpha-switch.md`, раздел «i18n и accessibility», коммит
`4b431f79` («docs: clarify alpha touch contract»):
```diff
+Влияния на touch-контракт нет: в полном View снова становится достижимой уже
+принятая в #89/#122 кнопка `projection-toggle`, и её существующие tap,
+keyboard и focus-поведение не меняются. Kiosk по-прежнему не получает ни эту
+кнопку, ни новую touch-цель; для View и kiosk не допускается деградация
+требований `docs/TOUCH-SUPPORT.md`.
```
Ни один AC (AC1–AC13), ни один другой раздел ТЗ не изменились. Дельта
затрагивает только пункт DoR «влияние на touch» (PROCESS.md §2.5) — локальная
правка одного открытого пункта, не смена контракта поведения и не новая
подсистема. Оснований для полного повторного разбора (§2.10, «разбор остаётся
полным, если…») нет: дельта меньше и уже единственной находки r1, ребейза на
ушедший вперёд `dev` не было (коммит `aa72704a` в текущей истории на месте).
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| **M1** (Medium, в скоупе). ТЗ не содержало ни одной строки о touch-влиянии при обязательном пункте DoR §2.5 для View/kiosk; `grep -inE "touch\|Touch\|сенсор"` давал ноль совпадений. | Добавлен явный абзац в разделе «i18n и accessibility»: «Влияния на touch-контракт нет…» — называет затронутый контрол (`projection-toggle`), формулирует «нет нового влияния» как явное решение, а не подразумеваемое, и фиксирует, что kiosk не получает новой touch-цели. | `docs/specs/448-alpha-switch.md`, коммит `4b431f79`, раздел «i18n и accessibility» (5 строк после абзаца про Flat/3-D названия и `aria-label`). `grep -inE "touch\|Touch\|сенсор" docs/specs/448-alpha-switch.md` теперь даёт непустой результат. |
Проверка содержания, а не только факта правки: утверждения абзаца сверены с
кодом.
- «Уже принятая в #89/#122 кнопка `projection-toggle`» — подтверждено:
`src/houseplan-card.ts:11501-11508`, кнопка введена веткой `#89` Stage 1
(`git log -S"projection-toggle" --oneline` → `0ef900a3 feat: integrate
isometric labs renderer`) и расширена Stage 2 (`docs/ISOMETRIC.md` §«Stage 2
composition (#122)»).
- «Kiosk не получает эту кнопку» — подтверждено условием рендера
`${this._labsIso && this._mode === 'view' && !this._kiosk ? html`<button …
data-hp="projection-toggle" …` : nothing}` (`src/houseplan-card.ts:11501`):
`!this._kiosk` — прямой гард, а не побочный эффект.
- «Существующие tap/keyboard/focus-поведение не меняются» — кнопка обычный
`<button>` с `aria-pressed`, `aria-label`, `title`, единственный `@click`
(`src/houseplan-card.ts:11502-11507`); задача не трогает ни этот блок
разметки, ни `src/houseplan-card.ts` вообще (дельта — только `docs/**`),
поэтому tap/keyboard/focus-контракт кнопки физически не мог измениться.
Находка закрыта по существу, не только текстуально — проверено чтением кода,
не исполнением (диапазон docs-only, гейты кода не гейтуют ревью ТЗ).
## Унаследовано из r1
Всё, что не затронуто дельтой, принято без повторной проверки — ссылка:
`docs/reviews/SPEC-REVIEW-448-r1.md`, материал — коммит `aa72704aacce` /
дерево `4bea42cb1c9d`.
- Обязательные разделы §7.1 присутствуют и в правильном порядке (проверено
в r1 построчно).
- AC1–AC13 пронумерованы, не пересекаются, у каждого явный способ
доказательства — дельта r2 ни один AC не меняла.
- Ни одной непомеченной догадки о текущем поведении не найдено в r1
(version-expiry `1.65.0`, существующая кнопка Flat↔3-D, `!this._kiosk`,
`houseplan_card_view_v1`, плоские редакторы/`houseplan-space-card` — всё
сверено с кодом и `docs/ISOMETRIC.md`).
- Продуктовые вопросы владельцу (способ включения/выключения `hp_alpha`,
судьба legacy `iso`) заданы по существу, с default, ответ получен и
зафиксирован — процессуально верно.
- Скоуп/не-скоуп, откат, компат-модель (`docs/CONFIG-COMPATIBILITY.md` не
применим — browser-local storage, не персистентная схема плана), i18n
(«новых строк нет» — `view.flat`/`view.volumetric` уже существуют),
класс изменений и трейлеры коммита (`docs/**`, `Issue: #448`,
`User-Visible: no`) — все приняты в r1 без замечаний.
- Low-наблюдение r1 (формулировка персоны в «Сценарий» не совпадает дословно
с таблицей персон SCOPE.md) снято ревьюером r1 с явной записью «не создаёт
двусмысленности», отдельно не фиксировалось — дельта r2 этот раздел не
трогала, повторно не поднимаю.
## Как проверялась дельта
1. Найден вердикт r1 и его материал (SHA `aa72704a`, дерево, блоб ТЗ) — блок
«Материал раунда» в `docs/reviews/SPEC-REVIEW-448-r1.md`.
2. `git diff aa72704a..HEAD --stat` и полный `git diff … -- docs/specs/448-alpha-switch.md`
— выделена содержательная дельта (6 строк).
3. Сверены фактические утверждения нового абзаца с `src/houseplan-card.ts`
(`grep -n "projection-toggle"`, чтение строк 11470–11528) и с
`docs/ISOMETRIC.md` (Stage 1/Stage 2 разделы, #89/#122).
4. `git log -S"projection-toggle" --oneline -- src/houseplan-card.ts` —
подтверждение происхождения контрола из #89.
5. Перечитан пункт DoR PROCESS.md §2.5 «влияние на touch… (View и киоск —
блокирующие)» — новый абзац закрывает его явным «нет нового влияния» с
обоснованием, а не оставляет пункт пустым.
6. Перепроверено, что дельта не задевает ни один AC и не меняет модель
данных/скоуп/откат — сверка разделов ТЗ до/после диффа.
Гейты кода (`typecheck`/`test`/`build`/`check-docs`) не прогонялись — дельта
не касается `src/**`/`custom_components/**`, ревью ТЗ ими не гейтуется (как и
в r1). Golden/smoke/performance фикстур ещё нет — план автотестов ТЗ не
менялся дельтой, повторно не оценивается.
## Находки
Нет. High: 0, Medium: 0.
## Что проверено и корректно
- Единственная находка r1 (M1) закрыта по существу: явная строка о touch
добавлена, содержание проверено чтением кода (`projection-toggle`,
`!this._kiosk`), а не принято на слово автора.
- Дельта локальна и не расширяет скоуп: 6 строк в разделе «i18n и
accessibility», ни одного AC, ни одного другого раздела не затронуто.
- Пункт DoR PROCESS.md §2.5 «влияние на touch» теперь закрыт явно для ТЗ,
готового перейти в `S5-ready`.
- Трейлеры коммита `4b431f79`: `Issue: #448`, `User-Visible: no` — верно,
докс-правка ТЗ, поведение не менялось.
## Чего не проверял
- Не перепроверял разделы ТЗ, не затронутые дельтой (сценарий, скоуп,
AC1–AC13 целиком, модель данных, план автотестов, риски, откат,
release-артефакты) — они унаследованы из r1 по таблице выше, дельта их не
задевает.
- Не прогонял `npx tsc --noEmit` / `npm test` / `npm run build` /
`node scripts/check-docs.mjs` — диапазон обоих коммитов (r1 и r2) docs-only,
эти гейты не относятся к ревью ТЗ.
- Не проверял golden/smoke/performance фикстуры буквально — на этой стадии их
ещё нет, план автотестов оценивается как план.
- Не оценивал техническую реализуемость внутреннего резолвера построчно — не
предмет ревью ТЗ.
## Вердикт
Дельта r2 полностью и по существу закрывает единственную находку r1 (M1):
явная строка о touch-влиянии добавлена, её содержание проверено чтением кода,
а не заявлением автора. Новых находок дельта не создала. ТЗ готово к переходу
в «Готово к разработке».
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/448-alpha-switch`, коммит `4b431f794416` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `021d061cd8b2a8a67646b47fac254ebd421bfff5`
```
git log --all --format='%H %T' | grep 021d061cd8b2
```
- ТЗ `docs/specs/448-alpha-switch.md`, блоб `951eaa1266d5845a7674a8ef61950cd78b8e140b`
```
git log --all --find-object=951eaa1266d5845a7674a8ef61950cd78b8e140b -- docs/specs/448-alpha-switch.md
```