13 KiB
SPEC-REVIEW-448-r2
- Issue: #448 — Labs: единый бессрочный переключатель
hp_alphaдля экспериментальных функций - ТЗ:
docs/specs/448-alpha-switch.md(SHA4b431f79) - Трек: полный (не изменился с 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»):
+Влияния на 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, кнопка введена веткой#89Stage 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, судьба legacyiso) заданы по существу, с 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 этот раздел не трогала, повторно не поднимаю.
Как проверялась дельта
- Найден вердикт r1 и его материал (SHA
aa72704a, дерево, блоб ТЗ) — блок «Материал раунда» вdocs/reviews/SPEC-REVIEW-448-r1.md. git diff aa72704a..HEAD --statи полныйgit diff … -- docs/specs/448-alpha-switch.md— выделена содержательная дельта (6 строк).- Сверены фактические утверждения нового абзаца с
src/houseplan-card.ts(grep -n "projection-toggle", чтение строк 11470–11528) и сdocs/ISOMETRIC.md(Stage 1/Stage 2 разделы, #89/#122). git log -S"projection-toggle" --oneline -- src/houseplan-card.ts— подтверждение происхождения контрола из #89.- Перечитан пункт DoR PROCESS.md §2.5 «влияние на touch… (View и киоск — блокирующие)» — новый абзац закрывает его явным «нет нового влияния» с обоснованием, а не оставляет пункт пустым.
- Перепроверено, что дельта не задевает ни один 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
Материал раунда
- Ветка:
issue/448-alpha-switch, коммит4b431f794416— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
021d061cd8b2a8a67646b47fac254ebd421bfff5git log --all --format='%H %T' | grep 021d061cd8b2 - ТЗ
docs/specs/448-alpha-switch.md, блоб951eaa1266d5845a7674a8ef61950cd78b8e140bgit log --all --find-object=951eaa1266d5845a7674a8ef61950cd78b8e140b -- docs/specs/448-alpha-switch.md