From 034eb3f5f3b8d8ca9bf1dcd013e539aa54c7d03f Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 18:17:26 +0000 Subject: [PATCH] docs: review document for #178 Issue: #178 User-Visible: no --- docs/reviews/SPEC-REVIEW-178-r2.md | 182 +++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 docs/reviews/SPEC-REVIEW-178-r2.md diff --git a/docs/reviews/SPEC-REVIEW-178-r2.md b/docs/reviews/SPEC-REVIEW-178-r2.md new file mode 100644 index 00000000..11599229 --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-178-r2.md @@ -0,0 +1,182 @@ +# SPEC-REVIEW-178-r2 + +- **Issue:** https://github.com/Matysh/houseplan-card/issues/178 +- **ТЗ:** [`docs/specs/178-toggle-entity.md`](../specs/178-toggle-entity.md) + (commit `76f75f85aafabcf9f698c85de0185e2ee64a98b5`, ветка `issue/178-toggle-entity`) +- **Ревьюер:** Claude (ревью ТЗ ≠ автор), этап `S4-spec-review`, сессия без + контекста написания ТЗ и без контекста r1 +- **Цикл:** r2/4 (обычный трек — issue не `small`/`trivial`; метки `P1`, + `feature`, `S4-spec-review`) + +## Скоуп ревью + +Повторное ревью ТЗ #178 после красного вердикта r1 (High-1: отсутствовали +обязательные разделы «Риски», «Откат», `Touch editor: …`, +«Производительность»; Low-1: AC без инлайн-привязки к способу доказательства). +Автор внёс правки коммитом `76f75f8` (`docs: address review of toggle entity +spec`) — только документация, продуктовый код не менялся: +`git diff origin/dev...HEAD --stat` показывает изменения только в +`docs/reviews/SPEC-REVIEW-178-r1.md`, `docs/specs/178-toggle-entity.md`, +`docs/specs/README.md`. Задача — проверить (а) что оба High/Low из r1 +действительно закрыты по существу, а не только по названию раздела, (б) что +переразметка секций (§14→§18, вставка новых §14–17) не сломала внутренние +ссылки и нумерацию AC↔тестов, (в) что новый текст не содержит догадок, +выданных за факты, (г) что документ в целом снова проходит §7.1/§2.5 +целиком, а не только по пункту, который был назван в r1. + +Не в скоупе: реализация — её по-прежнему нет (тот же `git diff` подтверждает +пустой `src/**`/`custom_components/**/*.py`), поэтому код-ревью не +проводилось и не должно. + +## Как проверялось + +1. `docs/SCOPE.md`, `AGENTS.md`, `PROCESS.md` целиком (§1, §2.4, §2.5, §5, + §7.1, §7.2, §8) — независимо от r1, в свежей сессии. +2. Issue #178: тело, комментарий аналитики владельца, «взял в работу», «ТЗ + готово», вердикт r1, комментарий автора о внесённых правках. +3. `docs/reviews/SPEC-REVIEW-178-r1.md` целиком — что именно требовалось + исправить и какими словами. +4. `git diff e46ef6f..76f75f8 -- docs/specs/178-toggle-entity.md` — построчный + дифф, чтобы увидеть ровно то, что изменилось (только вставка §14–17, + переразметка §14→§18/§15→§19/§16→§20, добавление «Доказательство:» к + каждому пункту §19). +5. Текущий полный текст `docs/specs/178-toggle-entity.md` (76f75f8) целиком, + не только новые разделы — иначе есть риск подтвердить фикс формально и не + заметить, что старые разделы стали противоречить новым. +6. Перекрёстные ссылки `§N.M` по всему файлу (`grep -n "§[0-9]"`) — проверено, + что после переразметки не осталось ссылок на устаревшие номера разделов + (например, старое «§14» тестового контракта не должно указывать на новый + «§14 Touch»). Не осталось ни одной. +7. `docs/TOUCH-SUPPORT.md` целиком — точная формулировка обязательной строки + (`Touch editor: supported/best effort/intentionally degraded/not exposed`, + строки 147–151) и смысл «best-effort editors» / «safety floor». +8. `docs/CONFIG-COMPATIBILITY.md` (раздел `marker.light_entity`, строки + 176–191) — сверка формулировок §16 «Откат» ТЗ (lossless doctrine, «старый + frontend стирает только при реконструкции marker») с уже принятым каноном + для прецедентного поля. +9. Прецедентные ТЗ этого формата — `docs/specs/174-linked-virtual-light-controller.md`, + `docs/specs/164-washer-active-cycle.md`, `docs/specs/084-passive-forced-light-sources.md`, + `docs/specs/068-help-affordance.md` — как канон формулирует touch-строку и + секцию рисков/отката/performance на практике, и есть ли прецедент отдельной + декларации `Touch editor: supported` для одного конкретного контрола + внутри в целом best-effort редактора (есть, #068: «поддерживается для + самого affordance»). +10. Выборочная сверка новых технических утверждений §15.1 с реальным кодом: + `src/devices.ts:317-325` (`ownControllableEntities`) — подтверждено, что + функция работает по `d.entities` одного устройства (`Array.filter`, + `Set`), без глобального обхода registry; заявление «линейно по числу + сущностей одного устройства, без global registry scan» — не догадка, а + факт, подтверждённый чтением кода. +11. `docs/specs/README.md:98` — трассируемость issue↔ТЗ не нарушена правкой. + +Гейты (`typecheck`/`test`/`build`) не прогонялись — на этапе ревью ТЗ +продуктового кода нет, что подтверждено пустым диффом по классам A/B +(PROCESS.md §2.7/§8 относят гейты к код-ревью, не к ревью ТЗ). + +## Находки + +### Low-2 — раздел touch не называет явно runtime-эффект на View/kiosk + +**Файл:** `docs/specs/178-toggle-entity.md:336-348` (§14 «Touch и +accessibility»). + +`docs/PROCESS.md` §2.5 требует «влияние на touch по `docs/TOUCH-SUPPORT.md` +(**View и киоск — блокирующие**)». §14 разбирает только диалог устройства +(редактор): native `