# Чек-лист ручного тестирования на публичном демо-стенде > **Стенд:** https://demo.houseplan.tech — вход **demo / demo** (админ). > Dev-версия: https://dev.houseplan.tech (basic auth `hp` / `houseplan-dev-2026`, дальше тот же demo/demo). > > **Стенд сбрасывается каждый час** к эталонному состоянию — это фича: ломайте > смело, удаляйте комнаты, заливайте планы, через час всё вернётся (обратный > отсчёт до сброса печатается в консоли DevTools). Из этого же следует: > долгоживущие проверки («файл исчез через сутки», «пережило рестарт») на стенде > не живут. Рестарт HA изнутри заблокирован demo_guard. > > Источник истины — [TESTING.md](TESTING.md) и его приложения > [`testing-notes/`](testing-notes/README.md) (ручной чек-лист по поверхностям > перенесён туда, #634): формулировки пунктов и их `[auto:…]`-маркеры смотреть там. Здесь каждый пункт сокращён до сути и дополнен > строкой «Стенд: …» — где и как ткнуть именно на демо-стенде. > > **Демо-дом v2** (анонимированная планировка реального загородного дома): > дашборд «House plan» (`/house-plan/0`, виды: План / Киоск / Схема), три > пространства: «Ground Floor» (Kitchen & Living, Hallway, Guest Bedroom, > Guest WC, Boiler Room, Sauna, Under-Stairs Closet, Outdoor Storage — нарисован > от руки, толстые стены со штриховкой), «First Floor» (Kids Room A, Kids Room B, > Upstairs Hall, Kids Bathroom, Master Bathroom, Bedroom, Study — с > картинкой-подложкой) и «Yard» (комната Yard + декор-контур гаража). Всего > 97 маркеров: ~51 на Ground Floor, 23 на First Floor, 2 во дворе. Ключевые > демо-устройства: робот-пылесос `vacuum.demo_robot` (база в Under-Stairs > Closet), датчики протечки (включаются помощником `input_boolean.demo_leak`), > датчики дыма (сами срабатывают каждые 10 минут), котёл и бак воды в Boiler > Room (маркеры-значения + живые текст-метки), замки Front Door и Terrace, > шторы в Study, ворота гаража во «Yard», TV + колонки, вытяжка на кухне, > кондиционер в Bedroom, составная розетка Smart Plug, вечно-unavailable > Pantry Light, погода `weather.demo_weather_south` (солнце в окнах + день/ночь). > Всё на английском; язык пользователя demo = Auto — интерфейс следует языку > браузера. ## Деактивированные устройства HA Публичный demo-пользователь — админ, поэтому на стенде проверяется полный registry-сценарий. Для limited/read-only нужен локальный harness или отдельный непривилегированный пользователь. - Готовый пример в доме: **Smart Plug 2** деактивирована в реестре — она зарезервирована под будущую фичу disabled-devices; сейчас рендерится по текущему поведению. - Сохранённый marker: деактивировать устройство или его единственную сущность в настройках HA — оно исчезает из View и всех данных плана без изменения конфига. - Редактор устройств → «Скрытые и деактивированные»: виден серый служебный ghost с причиной. «Показать» объясняет, что сначала нужна активация в HA; «Открыть в HA», редактирование метаданных и удаление доступны. - Активировать тот же объект: marker возвращается на старое место со старыми настройками. Если до деактивации он был скрыт пользователем, сам не появляется. - Для пылесоса вместе с marker исчезают puck и клиентские/полученные следы; существующая серверная история не удаляется и возвращается после активации. - Локальный standalone demo: `__setRegistryDisabled('device','d_mower','user')` / `__setRegistryDisabled('device','d_mower',null)` переключают статус; `__setRegistryAccess('limited')` включает отказ registry WS для проверки консервативной деградации. ## Вводные пункты (v1.43.x–v1.44.x) - Smoke-harness сам по себе — Стенд: не проверяется (это CI), только локально. - Шестерёнка «⚙ Room» на каждой карточке комнаты в редакторе плана — Стенд: открыть «Редактор плана» на «Ground Floor», убедиться что у всех 8 комнат есть кнопка ⚙ фиксированного размера, открывает настройки комнаты. - Метрики 0.75 от имени комнаты — Стенд: включить метрики в настройках пространства (⚙ у «Ground Floor») и посмотреть подпись под именем комнаты. - Тултип не появляется после touch — Стенд: открыть с планшета/телефона, потыкать комнаты и иконки — hover-тултипов быть не должно. - Роль источника света у выключателя — Стенд: у настенного выключателя или у розетки «Smart Plug» в диалоге устройства выбрать «Всегда» — при включении устройство светится в Glow; «Никогда» убирает собственное пятно, «Авто» возвращает классификацию устройства. - Карточка устройства: управляемые сущности сверху, ≥30 px, замки не переключаются — Стенд: тапнуть TV или колонку; для замка — открыть карточку двери (бейдж замка на входной двери Front Door). - Инвариант замков на всех путях — Стенд: Front Door: Unlock просит подтверждение, Lock — нет; иконка замка никогда не тогглится тапом. - Транзакционная миграция вложений — Стенд: прикрепить PDF к устройству, перепривязать маркер на другую сущность — файл открывается после перепривязки. - Планы и PDF в реальном браузере — Стенд: залить план в настройках пространства (любой PNG/SVG), DevTools → Network: `/api/houseplan/content/...` = 200 с `authSig`, тот же URL без authSig = 401. - Единая политика прав (may_write) — Стенд: не проверяется напрямую (нужен не-админ; на стенде один пользователь demo-админ) — покрыто tests_backend. - NaN/Infinity и лимиты openings — Стенд: не проверяется руками (нужен ручной WS-вызов) — tests_backend. - Захват указателя при drag, декор не утаскивается за границы — Стенд: «Редактор фона», нарисовать фигуру и попытаться утащить её далеко за план. - Скрытые термометры питают карточку комнаты — Стенд: скрыть любой датчик температуры (кнопка «Скрыть» в левом нижнем углу диалога, затем «Сохранить») — температура в карточке его комнаты остаётся. - Тултип комнаты без «открыть area» — Стенд: навести на комнату с десктопа: имя + температура/сигнал, никакого «открыть». ## Матрица окружений ★ - Chrome/Edge desktop — Стенд: да, просто открыть. - Firefox desktop — Стенд: да, со своей машины. - Safari (macOS) — Стенд: да, при наличии Mac. - HA Companion Android (холодный старт!) — Стенд: да: добавить `https://demo.houseplan.tech` как сервер в приложении (demo/demo), убить приложение, открыть заново на дашборде House plan. - HA Companion iOS — Стенд: аналогично Android. - Планшет-киоск — Стенд: частично: открыть вид «Киоск» браузером планшета во весь экран; реальный настенный планшет — только на железе. - Телефон портрет ≤400 px — Стенд: да, или DevTools device mode. - Тёмная/светлая тема — Стенд: профиль demo → тема; проверить бейджи/диалоги/контраст. - RU/EN локали — Стенд: язык пользователя demo = Auto (следует за браузером): сменить язык браузера или выставить язык явно в профиле; опцию `language:` карточки можно проверить, отредактировав вид дашборда. ## Установка / обновление / удаление - Свежая установка через HACS — Стенд: не проверяется (интеграция ставится файлами, HACS нет) — локально. - `single_config_entry` — Стенд: Настройки → Устройства и службы → Добавить интеграцию → «House Plan» недоступна второй раз. - Обновление через HACS (`?v=` после рестарта) — Стенд: не проверяется (нет HACS; версию ресурса видно в DevTools: `houseplan-card.js?v=1.58.0`). - YAML-mode Lovelace / extra_module_url — Стенд: частично: стенд как раз грузит карточку через `extra_module_url` (см. configuration.yaml) — если дашборд открылся, механизм жив. - Удаление entry → ресурс исчезает, `.storage/houseplan.*` живёт — Стенд: можно (Настройки → Интеграции → House Plan → удалить), стенд сам восстановится при сбросе; переустановку файлами проверить нельзя. - Diagnostics download + REDACTED — Стенд: Настройки → Интеграции → House Plan → «Загрузить диагностику», убедиться что name/link/description/pdfs = `**REDACTED**`. ## Режимы ★ - Всегда открывается во View — Стенд: войти в редактор, перезагрузить страницу — карточка снова во View. - View: только pan/zoom/tap/long-press, иконки не таскаются — Стенд: попробовать утащить любую иконку в режиме просмотра — должен идти pan. - Шапка View: табы пространств, счётчик, zoom, табы редакторов, ⚙ — Стенд: глазами в шапке «Ground Floor | First Floor | Yard». - Plan: тулбар разметки, иконки скрыты, оранжевая рамка — Стенд: вкладка «Редактор плана». - Devices: drag иконок, клик открывает редактор маркера — Стенд: вкладка «Редактор устройств». - Табы скрыты для не-админа — Стенд: не проверяется (второго, не-админского, пользователя на стенде нет). - Открывания во View инертны (дверь/окно — чистый рисунок) — Стенд: во View потыкать входную дверь в Hallway мимо бейджа замка — ничего не происходит. - Бейдж замка — единственное исключение — Стенд: клик по замочку на Front Door открывает карточку двери; в редакторе плана он инертен. - Курсор pointer во View, grab в Devices — Стенд: сравнить курсор над иконкой в двух режимах. - В Plan открывание интерактивно (drag по стенам, 3 px порог) — Стенд: редактор плана → потаскать дверь вдоль стены, одиночный тап открывает свойства. ## Онбординг ★ Все пункты онбординга требуют ПУСТОЙ конфиг. На стенде: Настройки → Устройства и службы → House Plan можно удалить и добавить интеграцию заново, либо стереть все пространства руками — и пройти онбординг; сброс через час всё вернёт. - Мастер импорта этажей — Стенд: если на стенде этажи HA не заведены, мастер предложит «Start from scratch»; полный сценарий с этажами — локально (или создать этажи в Настройки → Зоны и этажи, затем удалить пространства карточки). - Остальные пункты мастера (снять галки → Create disabled, очередь диалогов, Skip/Cancel, авто-разметка с тостом, пустое состояние) — Стенд: в рамках того же прогона после удаления пространств. ## Пространства ★ - Создание с картинкой (SVG/PNG/JPG/WebP), чёткость на зуме — Стенд: «+» в шапке → загрузить свой файл (Ground Floor и Yard нарисованы без подложки, у First Floor подложка есть — интересно сравнить оба пути). - >8 MB → читаемый тост — Стенд: залить большой файл. - «Без изображения — нарисую сам», ориентация — Стенд: «+» → режим рисования. - Белый холст в draw-режиме — Стенд: Ground Floor и Yard такие: борта/имена читаемы на белом. - Rename / замена картинки / image→draw отвязывает план — Стенд: ⚙ пространства (на First Floor можно отвязать подложку — сброс вернёт). - Удаление пространства — Стенд: удалить «Yard», убедиться что «Ground Floor» и «First Floor» не тронуты; сброс вернёт. - Настройки отображения: борта, имена, цвет+прозрачность, заливки — Стенд: ⚙ «Ground Floor» — там всё живое, предпросмотр после сохранения. - Заливка «zigbee»: красный→зелёный по среднему LQI — Стенд: ⚙ «Ground Floor» → заливка «Сигнал Zigbee»: разброс LQI заведён специально — есть комнаты с сильным (зелёные) и слабым (красные) сигналом, цифры видны под датчиками; «Yard» не залит (нет zigbee). - Заливка «lights» — Стенд: включить, зажечь свет в комнате с плана — комната жёлтая, потушить — серая. - Заливка «temperature» + границы комфорта — Стенд: включить: комнаты красятся по датчикам/термоголовкам (значения живые, точные цифры плавают); границы 20–25 редактируются тут же. - Радиогруппа заливок без легенды — Стенд: глазами в ⚙ пространства. - Hover затемняет текущую заливку — Стенд: навести на комнату при любой заливке. - Тултип комнаты со средней температурой — Стенд: навести на Kitchen & Living — «≈NN°». - Средняя температура только от термометров — Стенд: в комнате с термоголовкой (climate) убедиться, что её current_temperature не ломает среднее (в комнате свой датчик температуры). - Ширина диалога 500 px, компактные поля — Стенд: глазами в ⚙ пространства. - Общие настройки (⚙ в шапке): цвета по режимам + Reset — Стенд: покрутить цвета glow/temp/lqi, Reset. - Пользовательские цвета и на статичной карточке — Стенд: сменить цвет заливки, открыть вид «Схема». - Градиент LQI между настроенными цветами — Стенд: сменить цвета weak/strong в ⚙ и посмотреть заливку zigbee. - Per-space «Показывать LQI» — Стенд: выключить в ⚙ «Ground Floor» — бейджи цифр у датчиков и строка сигнала в тултипах пропадают только там. - Центровка бейджа и глифа — Стенд: глазами на любой иконке при максимальном зуме. - Hover-подсветка при кастомных бортах — Стенд: покрасить борта и навести. - Настройки живут на сервере — Стенд: сменить цвет, открыть стенд в приватном окне/другом браузере — цвет тот же. ## Редактор разметки комнат ★ Всё проверяется в «Редакторе плана» на «Ground Floor» (или создайте своё пространство — сброс простит всё). - Сетка, снап, общие стены — Стенд: дорисовать комнату впритык к существующей. - Линейка сегмента (метры; cm/cell из настроек) — Стенд: начать рисовать контур, смотреть на бегущую длину. - Незакрытый контур не сохраняется — Стенд: начать контур, уйти из разметки, вернуться — линий нет. - Удаление комнаты бережёт общие стены — Стенд: удалить Guest WC (⚙ комнаты → удалить), стены соседних комнат на месте; сброс вернёт. - Нет инструмента «Erase» в тулбаре — Стенд: глазами. - Пересечения запрещены (клик внутри чужой комнаты → тост) — Стенд: попытаться начать контур внутри Kitchen & Living. - Контур вокруг существующей комнаты отклоняется — Стенд: обвести Sauna снаружи. - Merge двух смежных / отказ для несмежных — Стенд: слить Hallway + Under-Stairs Closet; тост при попытке слить пару без общей стены (подобрать по плану, например Sauna и Guest WC через комнату); сброс вернёт. - Split: две точки на стенах, бОльшая часть сохраняет имя — Стенд: разрезать Kitchen & Living; Cancel в диалоге — комната цела. - Split с точкой вне стены / вдоль стены → тост — Стенд: там же. - Split на не-грид комнатах (снап к стене) — Стенд: полноценно — локально, но снап виден: клик чуть мимо стены цепляется. - Промах далеко от стены → тост — Стенд: кликнуть в центр комнаты. - Esc/Ctrl+Z снимает точку, Reset чистит — Стенд: во время рисования. - Замыкание (≥4 точек) → диалог комнаты — Стенд: нарисовать комнату во «Yard». - В диалоге только свободные зоны; выбор зоны подставляет имя — Стенд: занятые зоны из списка исчезают; «— без зоны —» есть всегда. - При «— без зоны —» обычная кнопка «Сохранить» активна после ввода имени и создаёт комнату с `area: null`; отдельной кнопки «Без зоны» нет — Стенд: там же. - Cancel диалога возвращает контур — Стенд: там же. - Сохранение с зоной раскладывает устройства зоны — Стенд: частично: у demo-устройств v2 есть registry (группы света и лампы-заглушки), но маркеры стенда расставлены явно; полноценная автораскладка — локально/на даче. - Erase удаляет линию, удаление комнаты — полигон — Стенд: инструментом «ластик линий» в тулбаре (клик по своей линии). - Иконки скрыты в разметке — Стенд: глазами. ## Устройства на плане ★ - Авто-устройства только в комнатах своей зоны — Стенд: не проверяется напрямую (все 97 маркеров стенда расставлены явно) — локально/на даче. - Фильтрация мостов/групп/сцен, 👁 «показать все» — Стенд: «Редактор устройств» → 👁: появляются скрытые сущности — в том числе лампы-заглушки световых групп (демо фильтрации). - Нумерация дубликатов имён — Стенд: добавить второй маркер той же сущности не даст (занята) — проверяется локально. - Группы света сворачивают лампы — Стенд: да: в комнатах — группы света, их лампы-заглушки скрыты; 👁 в редакторе устройств показывает заглушки. - Drag иконок, снап к сетке, позиция per-space — Стенд: редактор устройств: перетащить иконку, F5 — позиция жива; у «Yard» своя раскладка. - ↺ сброс автолейаута — Стенд: не проверяется: кнопка Reset убрана в v1.33.2 (пункт в TESTING.md исторический). - Бейдж температуры, LQI с цветом — Стенд: под датчиками цифры LQI (разброс задан специально: от красных до зелёных по комнатам), температура на бейджах. - Живые состояния: фактическая работа жёлтая, дверь/разблокированный замок/клапан оранжевые, штора нейтральная и меняет иконку, unavailable блёклый — Стенд: пощёлкать свет; тапнуть штору в Study; unavailable — Pantry Light, он такой всегда. - Морфинг иконок по состоянию — Стенд: дверь/замок: открыть lock замка Front Door из карточки двери — иконка меняется; гаражные ворота во «Yard». - «Значение вместо иконки» — Стенд: уже настроено: температуры котла в Boiler Room и % бака воды показаны цифрами; можно переключить display у любого датчика. - RGB только в glow/activity — Стенд: включить лампу цветом (если выбранная группа поддерживает цвет — смотреть карточку): бейдж жёлтый стандартный, цвет только в пятне glow и activity-эффекте. - Красная пульсация тревоги — Стенд: включить `input_boolean.demo_leak` (Настройки → Устройства и службы → Помощники) — датчики протечки пульсируют красным; датчики дыма вспыхивают сами каждые 10 минут (автоматизация). - Стоимость рендера (geometry once) — Стенд: не проверяется руками — smoke_render_perf. - Тап vs drag открывания — Стенд: редактор плана, тап по двери = свойства, drag на место = ничего не записано. - Вогнутый остров — Стенд: нарисовать U-комнату во «Yard» и остров внутри. - Backend hardening (B2–B5) — Стенд: не проверяется руками — unit/backend. - Гонка сохранений (markup vs Save) — Стенд: два окна: в одном правка разметки, в другом Save диалога — правка выживает; остальное — тесты. - Niche split — Стенд: разрез, начинающийся и кончающийся на одной стене — вырезается ниша. - Контент только через подписанные URL — Стенд: залить план, скопировать URL картинки из DevTools, убрать authSig → 401; старые пути `/houseplan_files/plans` → 404. - Каждая опция редактора сохраняема — Стенд: перебрать display/tap/fill в диалогах — ошибок валидации быть не должно. - Кнопка настроек комнаты в геометрическом центре — Стенд: редактор плана, глазами. - Один индикатор всегда (лампа жёлтая в plan-редакторе glow-пространства) — Стенд: включить свет, открыть редактор плана — бейдж жёлтый (glow-слоя там нет). - Size/angle parity — Стенд: задать маркеру size 3 / angle 37 в диалоге → и на «Схеме» тоже ×3 и повёрнут. - Tap запускает автоматизацию — Стенд: готового Run-маркера в v2 нет — назначить самому: в диалоге любого маркера tap-действие «Run» + поиск по automation/script/scene; тап → диалог подтверждения; Esc = не выполнять. - Бейджи light-source в Glow — Стенд: у горящей группы света бейдж стандартный (индикатор — пятно), у включённого устройства с ролью «Всегда» (см. вводные) жёлтый. - Множитель размера иконки растит глиф — Стенд: size 3 у любого маркера. - Auto-grid parity, activity ghost, hidden LQI parity, ghost без цифр — Стенд: скрыть любой датчик с LQI: LQI комнаты не меняется, «Схема» совпадает с планом; «Hidden and disabled» в редакторе устройств показывает синий пунктирный призрак без значений и эффектов. - Скрытие с плана — Стенд: кнопка «Скрыть» в левом нижнем углу диалога существующего устройства; после сохранения маркер исчезает из всех режимов и счётчика, но LQI комнаты держит. Через «Скрытые и деактивированные» тот же диалог предлагает кнопку «Показать». - «Жёлтый = работает» — Стенд: вытяжка (kitchen hood) в Kitchen & Living: включить → жёлтая подложка; термоголовка с активным нагревом — тоже. AC в Bedroom — отдельный случай, см. «Климат без hvac_action». - Safety floor редактора на touch (best effort, не проверка паритета) — Стенд: с телефона в редакторе плана pinch не создаёт геометрию, отпускание после pan не ставит точку, из редактора можно безопасно вернуться в View. - Legacy-геометрия, положительные размеры, границы 1e100, no-op repair — Стенд: не проверяется (нужен подложенный битый store, у тестировщика нет доступа к .storage) — unit/backend. - Карточка под другим контентом дашборда — Стенд: вид «Схема» — карточка стоит после других карточек и не схлопывается. - Stranded migration repair / geometry repair — Стенд: не проверяется руками (WS-команда) — backend. - Редакторы видят весь холст — Стенд: «Yard» (одна комната): в редакторе плана виден весь белый квадрат, во View — контент-фит. - Save ждёт пропорции выбранного плана — Стенд: прикрепить «уже загруженный» план и мгновенно Save. - Зум ниже фита (пол 1/3, `MIN_ZOOM`) — Стенд: минусовать зум ниже 100%. - Migration crash / parallel upload quota — Стенд: не проверяется (kill HA между записями невозможен) — backend. - Зум открывается на контенте — Стенд: «Yard» открывается комнатой на весь экран. - Удаление используемого плана запрещено — Стенд: в списке «уже загруженные» у подложки First Floor (first-floor.svg) delete неактивен. - Квота загрузок — Стенд: можно доливать планы до квоты — тост; сброс почистит. - Миграция на квадратный холст — Стенд: не проверяется (миграция уже прошла; нужен старый store) — unit. - Картинка плана по центру с полями — Стенд: залить широкую картинку — поля сверху/снизу, без растяжения. - Re-attach отвязанного плана — Стенд: ⚙ «First Floor» → «рисование» → Save → reload → «Уже загруженные» → прикрепить first-floor.svg обратно. - Detach хранит файл — Стенд: там же: после отвязки файл в списке; замена плана убирает старый сразу. - Перепривязка не ест мануалы — Стенд: маркер с 2 PDF перепривязать на другую сущность — оба открываются. - Ничего не копится на idle — Стенд: не проверяется полноценно (ежечасный сброс раньше суточного sweep) — backend. - Drag выигрывает у удалённого move — Стенд: два окна, тащить разные иконки одновременно. - Одноимённые загрузки из двух вкладок — Стенд: можно, два вложения обязаны выжить; тонкости — unit. - Временные файлы не выживают — Стенд: не проверяется (нужен доступ к ФС) — backend. - Две полные карточки согласны в позициях — Стенд: два окна: drag в одном виден во втором без reload. - Загруженный SVG инертен (script не исполняется) — Стенд: залить SVG со ``, открыть его подписанный URL в новой вкладке — alert нет, план рендерится. - Вложение не перезаписывает другое — Стенд: приложить manual.pdf к двум маркерам — два независимых файла. - Два быстрых эдита выживают — Стенд: быстро сделать две правки подряд (throttle сети в DevTools) — обе на месте. - Открытые границы следуют геометрии — Стенд: границы между Kitchen & Living ↔ Hallway ↔ Under-Stairs Closet уже открыты — утащить вершину общей стены в редакторе плана — разрыв едет вместе; можно открыть и свою. - Внутренние лимиты (max+1) — Стенд: не проверяется руками — unit/backend. - Большие файлы стримятся (50 MB) — Стенд: можно залить 50 MB мануал и скачать дважды; память HA снаружи не видна — полноценно только локально. - Паритет статичной карточки (fill none) — Стенд: у комнаты поставить fill «нет» и сравнить со «Схемой». - Layout доходит до статичной карточки — Стенд: drag иконки на «Плане» → на «Схеме» (другая вкладка того же дашборда) двигается. - Repair-issue смертны — Стенд: удалить пространство с битым планом… проще: удалить пространство — связанные предупреждения из Настройки → Ремонт исчезают. - Не-подписанный путь не зацикливает запросы — Стенд: не проверяется руками — unit. - Подписи не усиливаются на плохой сети — Стенд: DevTools throttling + Network: один sign-запрос на URL. - Битая папка планов не валит save — Стенд: не проверяется (нужна ФС) — backend. - Два редактора, один план — Стенд: две вкладки, залить подложку в каждой по очереди — служится последняя, файлы целы. - Фон статичной карточки — Стенд: открыть «Схему»: подложка First Floor на месте, в Network нет неподписанных запросов. - Отклонённый save не трогает план — Стенд: две вкладки: обе меняют план, вторая получает конфликт — старый план жив. - Кэш подписей на 200+ URL — Стенд: не воспроизводимо (нет 200 файлов) — smoke_sign_cap. - Климат не дорожает с комнатами — Стенд: не проверяется руками — smoke_climate_once. - Upload при конкурентной ревизии — Стенд: две вкладки: приложить фон при открытом втором редакторе. - Подписанный фон плана — Стенд: см. выше: authSig в Network, нет failed login в журнале HA (Настройки → Система → Журналы). - Зомби-диалоги — Стенд: Esc во время сохранения при throttling — диалог закрыт, тост об ошибке живёт. - Нет hover-тултипов на touch — Стенд: с телефона. - Слайдеры шрифтов (50–300%) — Стенд: ⚙ пространства + ⚙ комнаты: живой образец в диалоге следует слайдеру. - Room settings tier 3 (имя, зона, fill override, источник T°/влажности) — Стенд: ⚙ любой комнаты; источник температуры/влажности можно переопределить (датчики влажности в доме есть) и посмотреть карточку. - PDF переживает перепривязку — Стенд: см. «перепривязка не ест мануалы». - Киоск-режим — Стенд: вид «Киоск» дашборда: шапки нет, свайп листает пространства с точками-индикатором, дабл-тап сброс зума, лонг-пресс 3 с на пустом месте — поповер размеров; авто-листание cycle — задано в конфиге вида; реальный планшет — руками на своём. - Иконка-ссылка зоны у имени комнаты — Стенд: во View у имён комнат с привязанной зоной есть ↗ — клик ведёт в зону HA; в редакторах иконки нет. - Смарт-гайды — Стенд: тащить иконку в редакторе устройств — пунктирные направляющие от соседей, бейдж длина·угол. - Свет тогглится по умолчанию — Стенд: тап по любой группе света во View = вкл/выкл без настройки. - Производные стены тоже режутся (.seg) — Стенд: открытые границы уже есть (Kitchen & Living ↔ Hallway ↔ Under-Stairs Closet): в редакторе плана сплошной линии под пунктиром нет. - Пунктир открытых границ в разметке — Стенд: там же. - Nav-персистентность (пространство+режим) — Стенд: уйти в «Yard», закрыть вкладку, открыть — снова «Yard»; `#space=f1` в URL сильнее. - Чистка tap-действий + правый клик — Стенд: ПКМ по иконке во View = more-info HA. - Редизайн секции биндинга — Стенд: «+» в редакторе устройств: радио Виртуальное/Из списка HA, «показать сущности», поиск в дропдауне. - Настоящий пунктир открытой границы — Стенд: см. открытые границы. - Hover открытия стены — Стенд: инструмент «Открыть границу»: у общей стены курсор pointer + янтарный пунктир-превью; на уже открытой — красное превью. - Открытые границы: свет течёт по зоне — Стенд: при glow зажечь свет в Hallway — свечение заливает и Kitchen & Living, и Under-Stairs Closet через открытые границы. - Свет через дверь непрерывен — Стенд: glow: смотреть проём из Hallway — сам проём освещён, за ним луч с чёткими краями, сужённый откосами; наружная дверь не светится вовсе. - Per-source радиус glow — Стенд: поле «Радиус свечения» в диалоге лампы. - Скрытая light-primary — Стенд: лампы-заглушки световых групп скрыты в реестре — glow комнаты питается группой; смотреть, что скрытые лампы не рисуют своих маркеров. - Marker controls (тогл связки ламп) — Стенд: у настенного выключателя или виртуального маркера прописать «Управляет источниками света» + Toggle и тапнуть: лампы комнаты разом. - Независимый Glow — Стенд: выбрать любую заливку пространства, отдельно включить «Свечение источников света», зажечь свет — заливка данных остаётся, поверх появляется пятно; радиус меняется в ⚙. Пересечения нескольких пятен должны быть ярче и смешивать цвета. - Островные комнаты — Стенд: нарисовать остров во «Yard». - Иконка не прыгает при перепривязке — Стенд: перепривязать маркер: позиция та же; смена комнаты в том же пространстве тоже не двигает. - Плейсхолдер автоиконки — Стенд: диалог без явной иконки: «Auto: mdi:…» с превью. - Нет кнопки Reset в тулбаре Devices — Стенд: глазами: add / 👁 / ⬡. - Сетка во всех редакторах + fade декора — Стенд: редактор фона: комнаты/иконки блёкнут до 35%, декор яркий. - Редактор фона (фигуры/текст/ластик) — Стенд: порисовать во «Yard»: прямоугольник-«газон», текст; готовый образец — контур гаража. - Свои изображения — Стенд: редактор подложки → «Изображение», загрузить PNG с прозрачностью и безопасный SVG до 2 МиБ; выбрать из палитры, проверить one-shot предпросмотр, плавный resize/отражение/поворот и отсутствие магнита к стене. Создать вторую копию в другом пространстве: удалить общий файл из палитры можно только после удаления обеих копий. Во View и отдельной карточке изображение одинаково пассивно; светлая/тёмная тема не меняет его пиксели. - Превью открывания (призрак 90 см) — Стенд: инструмент «Открывание», водить у стены. - Split-polyline, курсоры, Esc-цепочка — Стенд: split Kitchen & Living ломаной через середину. - Подсветка выбранного в merge/split — Стенд: янтарная обводка первой комнаты. - Карточка vs инструмент — Стенд: в редакторе плана тащить карточку комнаты при активном Draw — точек не ставится. - Карточки комнат (метрики, drag, resize) — Стенд: включить метрики в ⚙ пространства; в редакторе плана карточку можно тащить и растягивать за углы. - Esc закрывает диалоги по одному — Стенд: наоткрывать вложенных диалогов. - Общая ⚙ видна во всех режимах — Стенд: глазами. - Табы редакторов (2 шт + X) — Стенд: глазами. - ⚙ пространства в каждом режиме — Стенд: глазами. - Lock action (Unlock красный + подтверждение) — Стенд: карточка Front Door; вторая дверь с замком — Terrace. - Флаг нового устройства (красная точка) — Стенд: не проверяется напрямую (набор сущностей демо фиксирован; точка была бы у новых) — локально. - Ноль устройств в HA — Стенд: не проверяется (в демо ~100 сущностей) — smoke_new_device. ## Стены, перегородка, декор (новое в доме v2) - Толстые стены со штриховкой — Стенд: «Ground Floor» нарисован от руки, у стен 23 записи толщины: наружные/несущие толстые, со штриховкой; на зуме штриховка остаётся чёткой, бумага комнат ложится по контурам. - Перегородка и колонна — Стенд: на Ground Floor есть одна перегородка и одна колонна — найти глазами; в редакторе плана редактируются своими инструментами. - Пунктирная декор-линия — Стенд: на Ground Floor одна пунктирная линия декора; в редакторе фона выделяется и редактируется. - Декор-тексты — Стенд: подписи Porch и Terrace на Ground Floor, контур гаража во «Yard» — чистый декор, во View инертны. ## Подложка-картинка на «First Floor» (новое в доме v2) - First Floor демонстрирует фичу подложки (docs/BACKDROP.md): архитектурная SVG-картинка `first-floor.svg`, нарисованная точно по контурам комнат — Стенд: открыть «First Floor», глазами: картинка под бумагой комнат, бумага всегда по контурам. - Двигать/масштабировать/вращать подложку — Стенд: «Редактор фона» на First Floor: сместить/отмасштабировать/повернуть картинку, Save, F5 — держится; сброс вернёт эталон. ## Живые текст-метки (новое в доме v2) - «Boiler {}» и «Water tank {}» в Boiler Room — Стенд: глазами: плейсхолдер `{}` подставляет живые состояния `sensor.boiler_flow_temperature` и `sensor.water_tank_level`; значения меняются со временем. - «Outdoor {}» во «Yard» — Стенд: там же, уличная температура. - Редактирование — Стенд: редактор фона: текст с `{}` и привязанной сущностью. ## Шторы и ворота — covers (новое в доме v2) - Тап открывает/закрывает штору — Стенд: две шторы (curtains) в Study: тап во View = открыть/закрыть, иконка морфится по состоянию. - Гаражные ворота — Стенд: «Yard»: cover ворот исключён из общего тогла карточки правилами доменов — общий тогл ворота не трогает; открыть можно из карточки. ## Медиаплееры нейтральны (новое в доме v2) - TV + колонки играют — маркер остаётся нейтральным (media-правило: воспроизведение ≠ «работа») — Стенд: запустить воспроизведение из карточки плеера и убедиться, что жёлтой подложки нет. ## Климат без hvac_action и составная розетка (новое в доме v2) - AC в Bedroom = `climate.ecobee` БЕЗ атрибута hvac_action — жёлтая подложка приходит по фолбэку hvac_modes — Стенд: включить кондиционер из карточки: маркер желтеет, хотя hvac_action нет. - Составной Smart Plug: сущность Power + опциональные свитчи — маркер красит только Power — Стенд: пощёлкать опции в карточке (маркер не меняется), затем Power (маркер желтеет). ## Unavailable и деактивированные (новое в доме v2) - Pantry Light всегда unavailable — Стенд: глазами: блёклый маркер, без активности; тултип/карточка показывают недоступность. - Smart Plug 2 деактивирована в реестре HA — зарезервирована под будущую фичу disabled-devices; сейчас рендерится по текущему поведению — Стенд: см. раздел «Деактивированные устройства HA». ## «Значение вместо иконки» в бою (новое в доме v2) - Числа — Стенд: Boiler Room: температуры котла и % бака воды показаны цифрами вместо иконок. - Текст и энергия — Стенд: Study: текстовый статус-сенсор (строка) и сенсор энергии в kWh (число) — оба в режиме «значение». ## Солнце и день/ночь (новое в доме v2) - `weather.demo_weather_south` подключена к «Ground Floor» — Стенд: глазами: клинья солнечного света из окон внешних стен, фон день/ночь по реальному времени (docs/SUN.md); настройки — в ⚙ пространства. ## Диалог устройства (маркеры) ★ - Все поля сохраняются — Стенд: любой маркер: имя/иконка/модель/ссылка/описание, F5. - Перепривязка с поиском, занятые исключены — Стенд: дропдаун биндинга: уже размещённые сущности в списке отсутствуют. - Виртуальное устройство: имя+комната, пунктир — Стенд: создать своё через «+» (готового виртуального в v2 нет — все маркеры привязаны к сущностям). - Комнаты без зоны в списке комнат — Стенд: нарисовать комнату «без зоны» и поместить туда маркер. - Room override центрирует — Стенд: сменить комнату маркера. - Tap-action override — Стенд: перебрать все варианты у одного маркера. - PDF: ok / >50 MB / .exe — Стенд: приложить файлы к маркеру; большие и .exe должны дать читаемую ошибку. - `javascript:` в ссылке не кликабелен — Стенд: вписать `javascript:alert(1)` в поле ссылки — в карточке не ссылка. - Remove: авто → скрытый маркер, виртуальное → насовсем — Стенд: удалить свой виртуальный маркер и любой entity-маркер (сброс вернёт). ## Правила иконок ★ - ⬡ открывает редактор с текущими правилами — Стенд: редактор устройств → ⬡. - Тест-поле, добавление/удаление/порядок — Стенд: там же, ввести имя «Boiler…». - Битый regex краснеет и пропускается — Стенд: вписать `([`. - Reset к дефолтам — Стенд: там же. - Правила переиконивают существующие; per-device иконка сильнее; замки всегда mdi:lock — Стенд: правило `.*light.* → mdi:star` и смотреть план. - Живут после reload и во втором браузере — Стенд: приватное окно. ## Tap-действия и жесты ★ - Тап → карточка, `toggle` тогглит только свет/розетки/вентиляторы — Стенд: пощёлкать группы света (toggle по умолчанию), TV/колонку (карточка). - Замки не тогглятся никогда; шторы Study открываются/закрываются тапом (covers), гаражные ворота — нет — Стенд: замок Front Door; штора в Study; ворота во «Yard». - Long-press всегда карточка — Стенд: зажать лампу на 600 мс — карточка вместо toggle. - Drag >3 px отменяет tap/long-press — Стенд: потащить палец с иконки. - pointercancel без фантомов — Стенд: с телефона: начать тап и свернуть браузер. ## Zoom / pan / подписи - Wheel у курсора, +/−, fit, % — Стенд: глазами. - Pinch + двухпальцевый pan — Стенд: с телефона. - Зум живёт per-space в localStorage — Стенд: зазумить «Ground Floor», перейти в «Yard» и назад, F5. - Resize окна перефитит — Стенд: свернуть боковую панель HA. - Подписи комнат таскаются (rl_*) — Стенд: в редакторе плана утащить имя комнаты, F5. - Читаемость подписей на мин/макс зуме — Стенд: глазами на белом плане и на подложке First Floor. ## Мультиклиент ★ - Две вкладки: drag виден без reload — Стенд: два окна рядом. - Конфликт конфига → тост, авторесинк, retry — Стенд: два окна: одновременно править настройки пространства. - Точечные layout-апдейты не трутся — Стенд: тащить разные иконки в двух окнах. - `admin_only` для не-админа — Стенд: не проверяется (нет второго пользователя) — backend. ## Крайние случаи - HA без устройств/зон — Стенд: не проверяется (демо полон сущностей) — локально. - Пространство без комнат — Стенд: создать пустое, видна подсказка разметки. - Комната без зоны + борта — Стенд: нарисовать, кликнуть — ничего. - Нет zigbee вовсе — Стенд: «Yard»: заливка lqi оставляет двор незалитым, бейджей нет. - 100+ устройств в одном пространстве — Стенд: почти: на «Ground Floor» ~51 маркер из 97; полная сотня в одном пространстве — локальная синтетика. - Длинные имена — Стенд: переименовать маркер в очень длинное имя. - HTML/эмодзи в именах — Стенд: назвать маркер `xss🚿` — текст, не разметка. - План удалён с диска → Repairs — Стенд: не проверяется (нет доступа к ФС) — backend. - Битый houseplan.config — Стенд: не проверяется (нет доступа к .storage) — backend. - Рестарт HA при открытом диалоге — Стенд: не проверяется: demo_guard блокирует рестарт HA на стенде (кнопка перезапуска даёт ошибку) — локально/на даче. - Legacy layout v1 — Стенд: не проверяется — unit. - Киоск холодный старт в приложении — Стенд: Companion app + вид «Киоск», убить и открыть. ## Релизные регрессии - Ноль ошибок консоли — Стенд: DevTools console на дашборде, в разметке, диалогах, зуме (обратный отсчёт сброса стенда в консоли — норма, не ошибка). - Ноль houseplan-ошибок в логе HA — Стенд: Настройки → Система → Журналы, фильтр «houseplan». - npm test / pytest / CI — Стенд: не про стенд — CI. - Скриншоты README — Стенд: не про стенд. ## houseplan-space-card (вид «Схема») - Рендер идентичен плану, без шапки — Стенд: вид «Схема» дашборда. - Полностью неинтерактивна — Стенд: покликать по «Схеме» — ничего, даже тултипов. - Кнопка-футер открывает полную карточку на этом пространстве — Стенд: клик по кнопке под «Схемой». - Несколько с разными space — Стенд: «Схема» содержит несколько пространств — один общий WS-запрос (Network). - Неизвестный space → аккуратная ошибка — Стенд: отредактировать вид, вписать space: nope. - show_button: false — Стенд: правкой YAML вида. - #space= диплинк — Стенд: открыть `…/plan#space=f2` (First Floor). ## Состояние и активность устройства - В списке отображения ровно четыре режима: «Значок + состояние», «Значок + состояние и активность», «Значение + состояние», «Всегда статичный значок»; «Только пульсация» отсутствует. - «Всегда статичный значок»: включённое, выключенное, unavailable и тревожное устройство выглядят одинаково нейтрально, без °/%/LQI и activity; hover и клик работают как прежде. У alarm-capable привязки есть предупреждение. - У пылесоса этот режим скрывает puck и след, а возврат к динамическому режиму снова показывает сохранённый след. - Motion в «Значок + активность» даёт три волны только при `off → on` и затихает примерно через 3,3 с, даже если датчик ещё `on` — Стенд: датчики движения расставлены по Ground Floor. - Occupancy/presence показывает спокойную постоянную пульсацию, пока присутствие активно — Стенд: датчики присутствия там же (контраст с тремя конечными волнами motion — рядом). - Штора в `opening/closing` показывает дыхание только в «Значок + активность»; при прямом `closed ↔ open` без промежуточного состояния эффект держится примерно 3,3 с — Стенд: шторы в Study. - Работающий свет, реле, вентилятор, climate с активным `hvac_action` и пылесос получают жёлтую подложку; медиаплееры при воспроизведении остаются нейтральными (media-правило); `automation = on` (включена) тоже нейтральна. - Дверь/окно, разблокированный замок и открытый клапан — оранжевые, а не жёлтые. - Тревога всегда красная и пульсирует во всех динамических режимах; «Всегда статичный значок» — явное нейтральное исключение. Unavailable приглушён и не получает обычной активности — Стенд: дым сам каждые 10 минут, протечка через `input_boolean.demo_leak`, unavailable — Pantry Light. - Цвет и размер ×2..×8 применяются к обычной активности; тревога остаётся красной. - Размер ×0.5..×3 и поворот; бейджи масштабируются — Стенд: любой маркер. - При выключенных live-состояниях обычные статус и активность выключены, критическая тревога остаётся. - reduce motion — Стенд: включить в ОС тестера; обычная активность обозначается компактной точкой, статичное кольцо не появляется, а тревога остаётся видна по красной подложке. ## Двери, окна и ворота Замки уже стоят: Front Door (вход через Hallway) и Terrace — бейджи замков на открываниях. Оконные/дверные контакты навешаны на несколько окон и дверей; всего на Ground Floor 15 открываний. - Клик мимо стены → тост; у стены → диалог — Стенд: инструмент «Открывание» в разметке. - Дверь: косяки+полотно+дуга, длина в см — Стенд: глазами у входной двери. - Ворота: две равные створки без дуги, статически открыты наружу на 10°; по умолчанию 300 см. На локальной сборке проверить датчик, замок и Glow; на стенде пока не посеяны. - Контакт: open → створка + дуга акцентом — Стенд: переключить сущность контакта из more-info/Developer Tools (demo — админ, может) и смотреть створку. - Unavailable → статичный дефолт — Стенд: не проверяется на открываниях (unavailable в доме только Pantry Light) — локально. - Замок: зелёный/оранжевый/серый бейдж — Стенд: замок Front Door, открыть/закрыть из карточки. - Карточка с двумя состояниями, замок не тогглится с плана — Стенд: клик по двери/замку во View. - Flip зеркалит петли/сторону — Стенд: диалог открывания (двойной клик с инструментом). - Клик с инструментом → редактирование; Delete — Стенд: там же. - Hover: акцент + grab во View — Стенд: навести на дверь. - Drag вдоль стен с переснапом за углы — Стенд: тащить дверь по периметру Hallway. - Один клик = карточка, дабл = свойства, drag = ничего — Стенд: там же. ## Живые пылесосы (docs/VACUUM.md) Симулятор: робот `vacuum.demo_robot` с базой в Under-Stairs Closet (база = маркер), карта в стиле Tasshack (позиция-словарь, комнаты с именами как на плане, mm, ось Y перевёрнута), калибровка уже прописана. Маршрут уборки: змейка Under-Stairs Closet → Hallway → Guest Bedroom → Kitchen & Living. - Docked: только маркер базы — Стенд: глазами (робот в Under-Stairs Closet). - Уборка: круглая пульсирующая шайба едет, база на месте — Стенд: тап по маркеру робота → карточка → Start (или Настройки → Устройства и службы → Сущности → vacuum.demo_robot); шайба змейкой проходит все 4 комнаты маршрута. - Глайд ~1.2 с, телепорт при zoom/pan/switch — Стенд: во время уборки позумить. - Режимы следа never/cleaning/always — Стенд: диалог маркера робота → «Показывать путь робота»; в always виден след прошлой уборки (если после сброса она уже была). - Серверный след (переживает reload) — Стенд: запустить уборку, F5 посреди — линия продолжается с места; вторая вкладка видит ту же линию. - Стиль: тёмный ореол + светлое ядро — Стенд: глазами поверх glow-заливки. - Скрытый маркер: ни шайбы, ни следа — Стенд: скрыть маркер робота на время уборки. - Калибровка: «Настроить автоматически» — Стенд: диалог робота → «Живая позиция»: имена комнат карты совпадают с комнатами плана — автокалибровка сходится; панель подгонки (призрак, углы, поворот, зеркало — зеркало осмысленно: ось Y в карте перевёрнута) тоже можно открыть и покрутить, Esc/Cancel не портит. - Мультиэтаж (матрица на карту) — Стенд: частично: карта одна (map 1), матрица хранится по её id; мультикарта — только на реальном Dreame. - Pause/Return — Стенд: кнопки в карточке робота: пауза замирает, «домой» возвращает по своим следам с двойной скоростью. ## Чего на стенде нет принципиально - Реальное Zigbee/Z-Wave железо, реальные роботы (Dreame/Xiaomi/Valetudo), реальный настенный планшет. - HACS-путь установки/обновления, YAML-mode Lovelace, переустановка интеграции с сохранением конфига. - Рестарт HA изнутри — заблокирован demo_guard (сброс контейнера раз в час — единственный «рестарт»). - Всё, что требует доступа к файловой системе стенда: битые store, kill -9 между записями, недоступные папки, наблюдение за памятью процесса. - Долгоживущие сценарии (суточный sweep, «часом позже») — сброс стенда наступает раньше. - Не-админский пользователь (admin_only, скрытие табов) — на стенде один админ demo.