mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
179 lines
13 KiB
Markdown
179 lines
13 KiB
Markdown
# 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
|
||
```
|