# SPEC-REVIEW-426-r1 - **Issue:** https://github.com/Matysh/houseplan-card/issues/426 - **Этап:** spec (ревью ТЗ, PROCESS.md §2.4) - **Заход:** r1 · блокирующих циклов израсходовано 0 из 4 - **Материал:** `docs/specs/426-room-hover-tooltip-toggle.md` на ветке `issue/426-room-hover-tooltip-toggle`, SHA `587c20699c4bc1ada405c5c7f9775d34b2b78a39` (совпадает с ревизией, заявленной автором в issue). - **Трек:** полный (не `small`) — аналитик назвал нарушенные критерии §5 корректно: новое compatibility-поле в `config.settings` и новый публичный UX-контракт, изменение проходит через frontend и backend. ## Скоуп Один глобальный переключатель «Показывать окно с информацией при наведении на комнату» в «Общих настройках», управляющий только room-tooltip в View (включая kiosk с мышью); hover-подсветка комнаты и все прочие тултипы не меняются. Новое optional `settings.show_room_tooltip: boolean`, default `true` материализуется отсутствием ключа. ## Как проверялось Ревью ТЗ на этапе `spec` не запускает автотесты/гейты (кода ещё нет) — задача ревьюера здесь одна: убедиться, что каждое AC однозначно, доказуемо, и что факты о текущем коде, на которые опирается контракт, не являются не помеченной догадкой. Поэтому весь разбор — очный аудит соответствия текста ТЗ реальному состоянию репозитория `587c2069`: 1. `docs/SCOPE.md`, `PROCESS.md`, `AGENTS.md` — трек, обязательные разделы §7.1, класс изменений, шаблон вердикта. 2. Тело issue #426 и оба комментария (аналитика, занятие, готовность ТЗ) — сверка с тем, что владелец зафиксировал сам (место настройки, точная формулировка, default) против того, что ТЗ выдаёт за решённое. 3. `docs/USER-GUIDE.ru.md` (строка 203, 1871) — терминология «подсказка»/ «наведение», состав room-tooltip (название, чистая площадь, температура, влажность, LQI) — совпадает с описанием AC4. 4. `docs/UX-MODES.md`, `docs/TOUCH-SUPPORT.md` (pointer modality, hover ownership) — независимость room hover-подсветки от tooltip и контракт touch/pen уже существуют и не меняются этим ТЗ. 5. Построчная проверка каждого фактического утверждения ТЗ о текущем коде: - `src/houseplan-card.ts:11578-11589` — локальный `tip`-замыкание на `pointermove` комнаты, guard `if (this._mode !== 'view') return;`, безусловный вызов `_showTip()` — подтверждает раздел «Проблема». - `src/houseplan-card.ts:7282-7294` — `_showTip()` общий для комнаты и устройства, проверяет `hoverEnabled`/`drag`, ничего не знает про room-specific флаг — подтверждает риск «не трогать общий guard». - `src/houseplan-card.ts:1032, 9542, 9659, 9668, 11626-11677` — `_hoverRoom` и `room-hover-fill-layer`/`outline-layer` независимы от `tip`, устанавливаются на `pointerenter` — подтверждает AC5. - `src/houseplan-card.ts:12463-12472` — device tooltip гейтится `_mode !== 'view' && _mode !== 'devices'`, использует тот же `_showTip()` — подтверждает «Device tooltip... в View и Редакторе устройств». - `src/houseplan-editor-runtime.ts:9023-9039, 10213-10253` — `_openSettingsDialog`/`_saveSettingsDialog` уже хранят `sunRays` по схеме «явный `true` пишется, falsy удаляется» через `settings: any = {...cfg.settings}` — подтверждает, что план для `show_room_tooltip` (обратная схема: default `true` → удаление ключа, `false` → явная запись) технически реализуем тем же путём, а не гипотетичен. - `src/houseplan-editor-runtime.ts:10537-10538` — `gs.hint` действительно первая строка тела диалога — подтверждает «сразу после вводного текста». - `src/houseplan-editor-runtime.ts:10622-10626` — `