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

13 KiB
Raw Blame History

SPEC-REVIEW-448-r2

  • Issue: #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»):

+Влияния на 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


Материал раунда

  • Ветка: 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