Files
houseplan-card/docs/CHANGELOG.ru.md
T
2026-09-28 14:58:33 +03:00

520 KiB
Executable File
Raw Blame History

История изменений

Русская версия docs/CHANGELOG.md. Переведены записи начиная с v1.42.0 (2026-07-26); более ранние доступны только в английском файле.

Правило проекта: оба файла пополняются в одном коммите с самим изменением — как и остальная документация (см. docs/STATUS.md).

Не выпущено

  • Контур, ступени, трапеция и стрелка направления лестницы теперь используют единую физическую толщину 3,6 см. Она масштабируется вместе с планом, а не остаётся постоянной в экранных пикселях, не искажается при изменении размера и повороте и одинаково применяется в просмотре, редакторе плана и PDF (#688).

v1.78.0-beta.8 — 2026-09-28

  • После завершения зума физические стены и их штриховка остаются чёткими и одинаковыми на дробных масштабах и экранах с высоким DPI. Короткая анимация зума и pinch не менялась, а итоговый кадр стен и проёмов — дверей, окон, ворот и проходов — рисуется сразу для конечного масштаба (#685).

  • Лестница-переход в режиме просмотра больше не показывает чёрно-белую рамку фокуса браузера; до неё по-прежнему можно дойти клавишей Tab и перейти по Enter или Пробелу (#686).

  • Редактор плана теперь показывает значки устройств полупрозрачными ориентирами — так же, как редактор подложки: те же значки, что в просмотре, с непрозрачностью 35 %. Они не реагируют на клики, наведение и курсор, поэтому все инструменты плана, подписи комнат и кнопки настроек комнат работают сквозь них (#687).

v1.78.0-beta.7 — 2026-09-28

  • У лестниц появились два собственных цвета: для линий и для заливки, а также отдельная прозрачность каждого. Новая лестница копирует текущий основной цвет декора и создаётся с полностью прозрачной заливкой. В прямом марше рисуется внутренняя трапеция шириной 100%/80%: варианты «Вверх/Вниз» разворачивают только её, а стрелка сохраняет каноническое направление — чтобы направить стрелку, нужно повернуть всю лестницу. Прямые и винтовые лестницы теперь делятся на равные интервалы, максимально близкие к 30 см, без короткой последней ступени или сектора. Корректная ссылка на этаж также всегда показывает курсор-руку (#683).

v1.78.0-beta.6 — 2026-09-27

  • Состояние виртуальных источников света и последние точки маршрута пылесоса теперь принудительно сохраняются при остановке Home Assistant: изменения, ещё попадающие в окна отложенной записи 0,5 с и 10 с, не теряются после штатного перезапуска (#655).
  • Лестницы в редакторе плана рисуются как фигуры декора: нажмите, протяните и отпустите — получится прямой марш (направление протяжки — направление подъёма) или квадрат винтовой лестницы; клик по-прежнему ставит размер по умолчанию. У выделенной лестницы теперь такая же рамка, как у мебели, — она рисуется поверх стен, с угловыми, серединными узлами и узлом вращения, а курсор над узлом показывает, куда он тянет. Изменение размера двигает одну сторону относительно противоположной, никогда не зеркалит и не поворачивает лестницу и примагничивает перетаскиваемую сторону вплотную к параллельной грани стены; перемещение магнитит ближайшую сторону и доворачивает лестницу не больше чем на 5°. Изменение размера или поворот больше не создают копию под инструментом «Лестница» и не сбрасывают выделение под «Выбором», диалог свойств сохраняет размеры больше метра ровно такими, как показывает, а наведение на лестницу с корректной целью в Просмотре показывает подсказку «Переход на этаж …» (#676).

v1.78.0-beta.5 — 2026-09-27

  • В редакторе плана появились отдельные прямые и винтовые лестницы с физическими размерами, автоматическим шагом ступеней 30 см и стрелкой подъёма. Лестницу можно плавно перемещать, менять её размер, поворачивать и магнитить к грани стены или другой лестнице; её габарит вычитается из чистой площади комнаты, но не вырезает видимый пол. Необязательная односторонняя ссылка безопасно переводит на выбранный этаж в Просмотре, а после жеста, при битой ссылке и в карточке с закреплённым этажом переход не срабатывает. При любом направлении подъёма полные ступени отсчитываются от нижней границы, а короткий остаток остаётся у верхней. Целевой этаж автоматически не меняется; в первой версии 2.5D лестница остаётся плоской на полу (#663).
  • На объёмном плане (2.5D) строка показателей под названием комнаты (температура, влажность, сигнал Zigbee, свет) больше не «плавает» при зуме: расстояние до названия одно и то же на любом масштабе, как на плоском плане. Цель касания подписи комнаты по-прежнему 44 × 44 px (#665).
  • Крестик × активного редактора теперь внутри подсвеченной вкладки: акцентная заливка вкладки «План», «Устройства» или «Декор» продолжается под крестиком, сам крестик нарисован цветом текста вкладки, а рамка фокуса с клавиатуры обводит всю подсвеченную зону. Размеры и положение вкладки, крестика и шапки не изменились; на телефоне, где вкладки режимов скрыты, крестик прежний (#666).
  • Статическая карточка пространства (houseplan-space-card) больше не показывает курсор-«руку» над значками устройств и не перехватывает там клики: вся схема снова инертна, как и описано, — обычный курсор везде, а единственный кликабельный элемент — кнопка в подвале. Регрессия пришла с исправлением перекрытий маркеров в v1.76.0-beta.2 (#664).

v1.78.0-beta.4 — 2026-09-26

  • Основная панель стала компактнее и перестала дёргаться: крестик × редактора теперь занимает зарезервированное место сразу после активной кнопки редактора, расстояние до масштаба уменьшено вдвое, а общая ширина не меняется при переключении режимов. На широком экране настройки и показ сводной панели доступны во всех редакторах (сама панель появляется только в Просмотре), а меню телефона остаётся прежним и показывает их только в Просмотре. Escape теперь выходит из любого редактора, предварительно закрыв активный инструмент, выбор, перетаскивание, меню или диалог без скачка высоты плана при появлении или скрытии панели инструментов (#660).
  • При холодной загрузке дашборда включённый объёмный план (2.5D) больше не успевает показать обычный плоский вид и не считает все полы тёмными на первом кадре. Нейтральная заставка House Plan остаётся до готовности 2.5D-рендера и фактического цвета бумаги плана, в том числе в киоске; при реальной ошибке загрузки рендера по-прежнему открывается безопасный плоский вид, а карточка не зависает (#654).
  • Значки устройств и замков дверей на объёмном плане (2.5D) больше не меняют положение в сцене при приближении, отдалении и перемещении плана. Близкие значки теперь отодвигаются от стены одной жёсткой группой: ряды и интервалы внутри них остаются такими же, как на обычном плане, вместо превращения в диагональ или новой раскладки на другом масштабе (#651).

v1.78.0-beta.3 — 2026-09-25

  • Объёмный план (2.5D) теперь доступен всем: Общие настройки → Отображение → Объёмный вид плана (2.5D) включает его один раз для всей установки — во всех пространствах, на всех устройствах и в киоске, — и после сохранения Просмотр меняется сразу. Значки устройств становятся приподнятыми плитками на 12 % крупнее с мягкой тенью на полу и рамкой, которая повторяет плитку при наведении, фокусе и выборе; из окон на пол ложится мягкий свет по реальному солнцу (длиннее при низком солнце, янтарный с тонкими лучиками на светлом полу). Стены сохраняют цвет из общих настроек в светлой и тёмной теме одинаково, а линии мебели той же толщины, что на обычном плане. Кнопка с кубиком в шапке, пункт меню телефона и скрытый вход hp_alpha убраны; обычный план остаётся по умолчанию и не меняется (#649).
  • Полную карточку House Plan в дашборде Sections теперь можно менять по высоте стандартной ручкой Home Assistant. Начальный размер — 10 строк, минимум — 6; просмотр и все три редактора заполняют выбранное место, не дёргая дашборд. Явный размер Home Assistant остаётся главным, а существующая auto-height карточка Sections один раз получает новый размер по умолчанию — 10 строк. Спасибо @pando80 за сообщение об ограничении и исходное направление решения (#648).
  • Пользователи группы Home Assistant system-read-only теперь остаются только зрителями, даже если редактирование House Plan разрешено обычным домочадцам. Полноценный просмотр, включая маршруты пылесоса, сохраняется, но редактировать, загружать и удалять данные нельзя; служебный список файлов планов доступен только редакторам, а ответ с маршрутом больше не раскрывает внутренний entity ID источника карты; администраторы сохраняют полный доступ (#626).
  • На телефоне (окно не шире 480 px) шапка теперь занимает одну строку: вкладки пространств, масштаб и одна шестерёнка «Действия и настройки». Вкладки прокручиваются вбок, текущая всегда на виду; заголовок карточки скрыт. В меню шестерёнки — всё, чего больше нет в строке: редакторы, настройки и добавление пространства, общие настройки, PDF, помощь, настройки и показ сводной панели; каждый пункт делает ровно то же, что прежняя кнопка. Касание вне меню только закрывает его. Пользователь без права редактирования видит только пункты сводной панели; на широком экране и в киоске ничего не изменилось (#616).
  • Основная панель больше не показывает счётчик устройств («37 устр.») и не дёргается по горизонтали при входе в редактор, выходе из него и переключении редакторов: крестик × закрытия редактора теперь стоит на своём постоянном месте сразу после кнопок режимов, а вне редакторов это место остаётся пустым. Попасть в × так же легко (зона 24 × 24 px), и он виден и на окнах средней ширины. Значение «Количество устройств» сводной панели не изменилось (#647).

v1.78.0-beta.2 — 2026-09-25

  • В редакторе плана кнопку «Настройки комнаты» теперь можно временно перетащить в другое место внутри комнаты, если она перекрывает стену, проём или другой элемент. Положение действует до выхода из редактора и не меняет план; обычный клик по-прежнему открывает настройки. Отмена изменения размера стены больше не сбрасывает это временное положение (#645).
  • Файлы плана до 8 МБ теперь действительно загружаются: план отправляется по HTTP, а не через WebSocket Home Assistant, предел сообщения которого рвал соединение на любом плане больше примерно 3 МБ. Файл больше 8 МБ отклоняется сразу при выборе с сообщением, называющим предел; для растрового изображения карточка предлагает загрузить уменьшенную копию (#617).
  • Каталог Устройства теперь скрывает и показывает много устройств разом. На вкладках На плане и Скрытые отметьте строки или Выбрать все (N) — N учитывает все подходящие строки, в том числе за кнопкой Показать ещё, — и нажмите Скрыть выбранные / Показать выбранные. Весь пакет — одно сохранение конфига и тост вида «Скрыто: 7»; неудачное сохранение ничего не меняет и оставляет выбор. Строки, отключённые или пропавшие в Home Assistant, выбрать нельзя (#618).
  • Плитки цвета в общих настройках (цвета заливки комнат и свечения) снова показывают прозрачность: сквозь цвет просвечивает шахматка, поэтому «Нет источников света» на 0 % больше не выглядит сплошным серым, а название плитки читается на том цвете, который виден. Плашки цвета остаются сплошными (#615).

v1.78.0-beta.1 — 2026-09-23

  • В палитре мебели категория «Посудомоечная машина» теперь показывает новую фронтальную иконку; уже размещённые посудомоечные машины, их размеры и рисунок на плане не изменились (#640).
  • Пустое или неверное обязательное число в общих настройках и настройках пространства больше не подменяется прежним скрытым значением: поле сохраняет введённый черновик, показывает ошибку и блокирует сохранение. Обязательные имя виртуального устройства, цель запуска и источник бейджа теперь тоже проверяются прямо под полем вместо позднего уведомления; открытые диалоги сохраняют правильное состояние кнопки «Сохранить» после тёплого пересоздания карточки (#614).
  • Большой экспорт больше не задерживает обычные операции House Plan, а импорт не блокирует Home Assistant во время проверки вложений; заведомо невозможные загрузки отклоняются до передачи файла, проверка изображений ограничена по памяти, быстрые переключения виртуального света не создают лишних записей на диск, а неоднозначные дубликаты активных устройств отклоняются без блокировки старых конфигураций (#625).
  • Read-only экраны домочадцев и kiosk больше не показывают ошибку о правах администратора при появлении нового устройства в Home Assistant; конфликт конфига в режиме просмотра теперь безопасно обновляет данные, даже если редактор ещё не загружался (#612).
  • В вопросе о несохранённых настройках действия теперь названы однозначно: «Вернуться» сохраняет черновик, а «Не сохранять» сбрасывает его; иконка потери правок больше не выглядит как открытый замок (#610).
  • Числа рядом со слайдерами в настройках комнаты, пространства и устройства теперь можно вводить посимвольно без скачков к границам: значение применяется после выхода из поля, привязывается к шагу шкалы и остаётся синхронным с ползунком (#608).
  • После прокрутки дашборда нажатие снова достаётся устройству прямо под пальцем, в том числе внутри вложенных панелей Home Assistant; pinch сохраняет итоговый масштаб один раз после жеста вместо записи в локальное хранилище на каждом движении (#613).
  • При импорте пространства маршруты карт робота теперь следуют за созданной копией: перенос в другую установку Home Assistant больше не падает из-за ID старого этажа, а копия в той же установке не оставляет трек робота на исходном этаже (#611).
  • Формы настроек теперь выглядят внутри Home Assistant так же, как в принятом макете: канва шириной 560 px на компьютере с одной прокруткой и ограничением высоты, а на телефоне — полноэкранный диалог без отступов. Остальные диалоги не изменились (#609).
  • Исправлен крестик реальных диалогов Home Assistant: после выбора «Продолжить» в вопросе о несохранённых изменениях тот же диалог снова виден и доступен для редактирования, а не остаётся невидимым до перезагрузки страницы (#607).

v1.77.0 — 2026-09-21

  • Обновлена библиотека мебели: 60 символов в едином стиле, новые предметы и точные видимые габариты при прежних сохранённых размерах и расположении (#593, #584).
  • Четыре диалога настроек переработаны в карточки с контекстными подсказками, понятными переключателями и проверкой полей без изменения сохранённых настроек (#594, #598, #600).
  • Для устройств добавлен режим «Значение + статичный значок»: число или состояние видно, значок не перекрашивается и не пульсирует (#588).

v1.77.0-beta.5 — 2026-09-21

  • Исправлена библиотека мебели: в «Прочем» доступен тренажёр, в «Растении» больше нет ошибочно подписанного тренажёра, а книжный шкаф и напольный стеллаж получили соответствующие названиям рисунки. Уже размещённый «Кактус» остаётся видимым без изменения сохранённых размеров, положения и оформления (#606).
  • Отполированы четыре диалога настроек: числа прозрачности в плитках видны полностью, свотчи сплошные, hex печатается заглавными буквами; у заливки стен появился сброс, действия с данными обведены, поле иконки больше не дублирует превью (#605).
  • Исправлена полировка диалогов: в подтверждении отмены правок кнопки больше не обрезаются, шарик переключателя ровно стоит в дорожке, а настройки комнаты не повторяют очевидный заголовок (#603).

v1.77.0-beta.4 — 2026-09-21

  • Отполированы обновлённые диалоги настроек: тумблеры, строки слоёв, прозрачность и значения слайдеров теперь выровнены; убраны лишние подписи и сообщение о несохранённых изменениях; кнопки действий остаются удобными на узких экранах; настройки радара присутствия раскрываются сразу под тумблером, а его повторное включение до сохранения возвращает черновик (#602).

v1.77.0-beta.3 — 2026-09-20

  • Четыре диалога настроек — «Пространство», «Общие настройки», «Настройки комнаты» и «Устройство на плане» — собраны по макетам дизайнера (docs/design/600-settings-dialogs/). Каждый диалог — одна форма 560 px с одной полосой прокрутки и названием пространства в заголовке; карточки плоские, с заголовком и «?». Внутри: полные строки с иконкой, подписью и тумблером справа (границы, слои, названия, свечение, подсказки, подтверждение, температура устройства); сегменты там, где короткий список был радио или выпадающим (заливка комнаты с короткими подписями — Свой цвет · Zigbee · Свет · Температура, — нулевые стены, фон, лучи солнца и их источник, привязка устройства, роль источника света, режим свечения, сторона бейджа); плашки цвета — свотч, hex, число прозрачности и «Сбросить» — вокруг прежнего пикера; числовые поля с единицей внутри рамки (см, °C, м, %, °); слайдеры в паре с редактируемым числом и «Сбросить до 100%»; чипы связанных светильников и инструкций; выбор сущности раскрывается панелью внутри карточки — с поиском и чекбоксом «Показывать сущности». У заливки комнаты появился тумблер «Как у пространства»: выключили — открывается сегмент из пяти режимов, стартующий с текущего режима пространства; границы комфорта — два поля °C с легендой «Холодно / Комфорт / Жарко». Сохранить активна только при изменениях, закрытие с несохранёнными изменениями сначала спрашивает; сломанные значения (пустая или нечисловая граница, север вне 0–359°, не выбранная привязка) названы под полем, а ссылка «Проверить N полей» в футере ведёт к первому. Строка «Спрашивать подтверждение» показывается только у действий; карточка «Связи Zigbee» больше не повторяет заголовок; ленивый редактор загружается с простым «Загрузка…». Все настройки, ключи и сохранённые значения прежние — переделаны формы, а не конфигурация (#600, закрывает #591 и #599).

v1.77.0-beta.2 — 2026-09-20

  • Три диалога настроек — «Общие настройки», «Пространство» и «Устройство на плане» — собраны в карточки-группы с заголовками. Раньше это были плоские столбцы: в «Общих» девять подписей вперемешку с рядами и абзацами, в «Устройстве» вообще ни одного деления на 760 строк формы. Пояснения, которые лежали абзацами между полями, теперь открываются кнопкой «?» у своего заголовка или строки. Три выбора из коротких списков — фон плана в «Общих», фон и вид нулевой стены в «Пространстве» — стали сегментированными переключателями вместо выпадающих списков: варианты видны сразу, попадание пальцем не требует раскрытия. Остальные списки в этих диалогах длинные или перечисляют сущности и остались списками. Значения, единицы, порядок полей и все действия прежние; предупреждения о сломанных настройках — что нет сущности sun.sun или что выбранная цель нажатия исчезла — остались на виду, а не уехали под «?» (#598).

  • Диалог настроек комнаты собран в четыре карточки-группы — «Основное», «Заливка», «Источники» и «Размеры шрифтов», — и пояснение к каждой открывается кнопкой «?» рядом с заголовком вместо абзаца в форме. Источник температуры и влажности выбирается переключателем «среднее по комнате / выбранный датчик». Все значения, единицы, порядок полей и условия сохранения прежние: это перекладка формы, а не смена настроек (#594).

  • Все встроенные символы мебели перерисованы в одном стиле, и библиотека выросла до 60 видов сверху. Двенадцать предметов — холодильник, посудомоечная и стиральная машины, сушильная машина, кондиционер, бойлер, душ, раковина, лестница, камин, растение и ковёр — раньше рисовались программно и выбивались из общего стиля; теперь у них рисунок дизайнера. Появились четыре новых предмета: компьютер, вытяжка, духовка и кактус, а вместе с первыми тремя в палитре открылись три ранее пустые категории — всего их стало 32. Кактус лежит в категории «Растение». Уже расставленная мебель остаётся на своих местах: положение, размер, поворот, отражение, цвет, прозрачность и толщина линии не меняются, размеры по умолчанию у всех прежних предметов тоже прежние — меняется только рисунок внутри рамки. Одно поведение стало хуже осознанно: если рисунки почему-то не загрузились, теперь не рисуется ни один предмет, а не 48 из 60, как было (#593).

  • В настройках устройства появился пятый вариант «Отображение» — «Значение + статичный значок». Маркер показывает то же число или состояние, что и «Значение + состояние», и при этом остаётся одного цвета всегда: состояние, тревога, недоступность, цвет RGB-света и активность его не красят, пульсации нет. Компактные °/% и LQI и внешний бейдж со значением скрыты, как в режиме «Всегда статичный значок» (настройка бейджа сохраняется); у пылесоса не рисуются живой puck, след и предупреждение о маршруте, сохранённая история не удаляется. Карточка старой версии, встретив новый режим, покажет маркер как обычный цветной значок — конфигурация при этом не портится (#588).

v1.77.0-beta.1 — 2026-09-18

  • Предметы мебели с одинаковыми размерами теперь и выглядят одинаково: указанные ширина и глубина совпадают с видимым габаритом на плане. Раньше рисунок занимал внутри своего бокса около 88 % стороны, поэтому «Кухонный напольный модуль» 60 × 60 см выглядел меньше «Посудомоечной машины» 60 × 60 см примерно на 14 % по стороне и на 30 % по площади. Уже расставленная мебель сохраняет координаты, размеры, поворот и зеркалирование — часть предметов станет визуально крупнее, и это и есть исправление (#584).
  • В меню мебели значки «Лестница» и «Телевизор» больше не выходят за свои границы: части рисунка уезжали из-за склейки контуров (#584).

v1.76.0 — 2026-09-16

  • Щипковое масштабирование в приложении Home Assistant больше не рвёт картинку: на больших планах с фоном «Следует за Солнцем» пропали фиксированные белые провалы в стенах и полу, план перестал переключаться между режимами композитинга посреди жеста, а щипок, начатый на значке устройства, больше не запускает его действие и не открывает карточку House Plan вместе с окном Home Assistant (#582, #579, #578, #563).
  • В общих настройках появился выбор источника солнечных лучей: от внутренних углов окна (прежнее поведение) или от внешних (#577).
  • «Как у пространства» в настройках комнаты снова возвращает ей цвет пространства, а комнаты, застрявшие с чужим цветом, красятся цветом пространства сами (#581).
  • Близко стоящие значки устройств больше не перехватывают друг у друга наведение и нажатие, клавиатурный фокус показывает ту же подсказку, что и мышь, а переключение пространств сообщается вспомогательным технологиям (#564, #565).
  • План, изменённый в другом браузере, больше не откатывается к старой версии, а при перетаскивании у входящего края больше не появляется пустая полоса (#543, #544).
  • Мелкие исправления и улучшения: настройки сводной панели перестали переезжать между карточками в Masonry, загрузка вложения больше не жалуется на место из-за двойного счёта, источники радара обновляются в предпросмотре, а лучи от внешних углов окна не проходят сквозь толстую стену (#561, #554, #545, #580).

v1.76.0-beta.5 — 2026-09-16

  • На больших планах с фоном «Следует за Солнцем» мягкий внешний контур больше не выделяется в GPU-слой размером со все внутренние координаты плана. При pinch-zoom в приложении Home Assistant такие слои остаются размером с экран, поэтому на пространствах с сеткой 1 см/точку в стенах и полу больше не появляются фиксированные белые провалы. Внешний вид контура и статичный фон не изменились (#582).

  • Солнечные лучи от внешних углов окна теперь учитывают затенение откосами толстой стены: при косом солнце в комнату проходит только видимая через весь оконный проём часть луча, а не свет сквозь сплошную стену (#580).

  • Комната, которой вернули «Как у пространства», больше не остаётся своего цвета: этот выбор теперь забывает цвет комнаты, а строка цвета в настройках комнаты показывается только при «Свой цвет». Комнаты, уже застрявшие с чужим цветом (свой цвет без своего режима), после обновления красятся цветом пространства без каких-либо действий (#581).

v1.76.0-beta.4 — 2026-09-15

  • В общих настройках теперь можно выбрать, от каких углов окна начинаются солнечные лучи: от внутренних (прежнее поведение по умолчанию) или от внешних. Во внешнем режиме видимая часть луча проходит к комнате только через физический оконный тоннель; направление, длина, цвет и тени не меняются (#577).

  • При масштабировании щипком в приложении Home Assistant план больше не переключается между режимами композитинга, пока пальцы остаются на экране. Стены, пол, заливки, штриховка и свет теперь остаются непрерывно видимыми при плановых перерисовках и обновлениях Home Assistant; поведение обычного браузера, изометрии и kiosk не изменилось (#579).

  • Масштабирование щипком, при котором второй палец попал на значок устройства, больше не запускает заново таймер долгого нажатия и не открывает одновременно карточку House Plan и стандартное окно Home Assistant. Запоздалое touch- событие контекстного меню остаётся частью навигационного жеста, а следующий намеренный тап, long-press, правый клик мышью или действие с клавиатуры работают сразу (#578).

v1.76.0-beta.3 — 2026-09-14

  • Только внутренние изменения; поведение House Plan по умолчанию не изменилось.

v1.76.0-beta.2 — 2026-09-14

  • Навигация по пространствам теперь сообщает вспомогательным технологиям текущее пространство, тревога больше не повторяется в доступном имени устройства, а клавиатурный фокус открывает ту же подсказку устройства, что и наведение мыши. Цвета подписей комнат и поведение touch/pen не изменились. Наведение на комнату не заменяет клавиатурную подсказку; наведение на другое устройство временно показывает его и возвращает сфокусированное устройство после ухода указателя (#565).

  • Близко размещённые значки устройств больше не перехватывают друг у друга наведение, нажатие, долгое нажатие или перетаскивание. В нарисованной области выбирается видимый значок; пересечение невидимых зон нажатия разрешается в пользу ближайшего значка, а минимальная область 44 пикселя не уменьшается. Клавиатурная и программная активация остаётся привязана к явно выбранному значку (#564).

  • Масштабирование плана щипком, начатое на значке устройства, больше не запускает его действие из-за запоздалого синтетического нажатия браузера. Следующий намеренный одиночный тап работает сразу, без искусственной паузы (#563).

v1.76.0-beta.1 — 2026-09-13

  • Видимость и размеры сводной панели больше не переходят между карточками House Plan после полной перезагрузки Masonry на другой ширине. Теперь карточки различаются по логическому порядку в дашборде, а не по визуальным колонкам; из-за неоднозначности старых ключей существующие настройки панели в Masonry может понадобиться один раз выставить заново (#561).

  • Загрузка вложения больше не сообщает о нехватке места только потому, что уже записанный staging-файл посчитали повторно. Сам резерв безопасности 512 МиБ не изменился (#554).

  • Источники диапазонов и зон радара теперь обновляются в предпросмотре настройки, а проверка прав Home Assistant использует тот же полный список источников, что и расчёт данных радара (#545).

  • План, изменённый в другом браузере, больше не откатывается к старой версии, если подложка старого ответа загрузилась позже новой. Последний принятый план, его ревизия и кэш быстрого запуска теперь остаются согласованными при одновременных перезагрузках, переподключении и смене пользователя (#543).

  • При перетаскивании и масштабировании плана у входящего края больше не появляется пустая полоса, пока изображение догоняет жест. Быстрый путь теперь удерживает уже нарисованную сцену на всей площади карточки между плановыми перерисовками, в том числе если палец или мышь остановились посреди жеста (#544).

v1.75.0 — 2026-09-12

  • Пункт меню House Plan больше не застревает на прошлой версии карточки: он тянул её по единственному адресу в дистрибутиве, у которого нет версии, и браузер был вправе часами отдавать копию из кэша. Теперь панель просит реализацию по имени с хешем содержимого — либо приезжает ровно та карточка, с которой она собрана, либо панель вслух говорит, что страницу надо перезагрузить (#535).

v1.75.0-beta.1 — 2026-09-12

  • Пункт меню House Plan больше не может застрять на прошлой версии карточки. Он тянул её по единственному адресу в дистрибутиве, у которого нет версии, а входные файлы отдаются без указаний по кэшированию — и браузер был вправе часами отдавать старую копию. Плашка о несовпадении версий при этом честно горела, а перезагрузка страницы помочь не могла: адрес не менялся. Теперь панель просит реализацию по имени с хешем содержимого: либо приезжает ровно та карточка, с которой она собрана, либо панель вслух говорит, что страницу надо перезагрузить (#535).

v1.74.0 — 2026-09-11

  • Переключение между этажами на большом плане снова быстрое. Каждое переключение пересобирало маркеры устройств самым долгим способом — сверяло двести старых маркеров с двумя сотнями новых, чтобы затем выбросить все, — и это стоило около десятой доли секунды подвисшей карточки. Внешне не меняется ничего, и дверь, которая никуда не двигалась, по-прежнему не анимируется (#534).

  • Фон «Следует за Солнцем» больше не замедляет план. Внешний контур плана — это размытие по габариту всего листа, и оно жило в общем слое с планом: любое движение мыши заставляло движок прогонять его заново. Теперь контур держится отдельным слоем. Замер на панораме демо-стенда: растеризация упала с пятнадцатикратной к статичному фону до сопоставимой с ним. Вид прежний: ореол вокруг плана совпадает пиксель в пиксель, а штриховка внутри стен сглаживается чуть иначе — разделение слоёв сдвигает её на субпиксель (#532).

  • План стал заметно плавнее, а в Firefox разница разительная. Перетаскивание каждый кадр рисовало весь план заново вместо того, чтобы сдвинуть уже нарисованное, а тень маркера устройства заново запускала анимацию сразу у всех значков при любом изменении ширины контейнера — шестьдесят одна такая анимация роняла Firefox до девяти кадров в секунду. Обоих поводов больше нет, картинка при этом ровно та же (#531, #524).

  • Печатный план стал крупнее примерно на треть: подписи размеров внутри плана уменьшены на четверть, а столбец вынесенных размеров сбоку убран — числа теперь стоят на самом чертеже. Короткие размеры, которым не хватает места внутри комнаты, больше не печатаются (#530).

  • План, доставшийся от времён «комнат без стен», снова редактируется. Такой план мог отбивать любую правку сообщением про конфликт идентификаторов стен, отправлять в «Оптимизировать планы», который отвечал, что всё уже оптимально, и вдобавок отказывался выгружаться — выхода не оставалось вовсе. Наследие теперь снимается при первом же сохранении, а по-настоящему устаревшей карточке честно говорят обновиться и перезагрузить страницу (#529, сообщено в #527).

  • Направляющие выравнивания снова идут за объектом во время жеста; сводная панель больше не подвешивает первый кадр на большом плане и не пишет «Источник недоступен», пока считает значения, а её диалог настроек снова прокручивается в Home Assistant. Переключение между пространствами не доигрывает движение створки соседней двери, и карточка скачивается на 12,8 КБ меньше при холодном старте (#521, #509, #508, #525, #526).

v1.74.0-beta.3 — 2026-09-11

  • Печатный план стал крупнее примерно на треть: подписи размеров внутри плана уменьшены на четверть, а столбец вынесенных размеров сбоку убран — числа теперь стоят на самом чертеже. Короткие размеры, которым не хватает места внутри комнаты, больше не печатаются (#530).

  • Перетаскивание плана снова плавное. Каждый кадр жеста заново рисовал весь план целиком вместо того, чтобы сдвинуть уже нарисованное, — на экране с высокой частотой в Firefox панорама превращалась в слайд-шоу. Теперь план едет за курсором, а содержимое подтягивается несколько раз в секунду; итоговая картинка ровно та же (#531).

v1.74.0-beta.2 — 2026-09-11

  • План, доставшийся от времён «комнат без стен», снова редактируется. Такой план мог отбивать любую правку сообщением про конфликт идентификаторов стен, отправлять в «Оптимизировать планы», который отвечал, что всё уже оптимально, и вдобавок отказывался выгружаться — выхода не оставалось вовсе. Наследие теперь снимается при первом же сохранении, а по-настоящему устаревшей карточке честно говорят обновиться и перезагрузить страницу (#529, сообщено в #527).

  • Карточка скачивается на 12,8 КБ меньше при холодном старте. Минификатор таблиц стилей не работал ни разу — он искал свой тег в одном написании, а сборка отдаёт его в другом, — поэтому все пояснительные комментарии из стилей уезжали в браузер. Внешне и по поведению не меняется ничего, план просто появляется раньше (#526).

  • План снова плавный в Firefox. Тень маркера устройства считается от размера маркера, а он — от ширины контейнера, поэтому всё, что эту ширину меняло — подсказка, полоса прокрутки, поворот экрана, — заново запускало анимацию тени сразу у всех маркеров. Шестьдесят одна такая анимация роняла Firefox до девяти кадров в секунду; теперь тень просто появляется, оставшись прежней (#524).

  • При переключении между пространствами двери и окна больше не доигрывают движение створки соседней двери — ни в одну сторону, ни в другую. Анимация остаётся только за настоящей сменой состояния датчика (#525).

v1.74.0-beta.1 — 2026-09-10

  • Направляющие выравнивания снова идут за объектом во время жеста: за значком в редакторе устройств, за фигурой и курсором в подложке и в плане. Пунктирная линия и точка-якорь появляются в тот момент, когда объект встаёт на одну ось с другим, а не после того, как жест закончился (#521).

  • Сводная панель больше не подвешивает первый кадр на большом плане и не пишет «Source unavailable», пока значения ещё считаются: в строках появляются пульсирующие плашки, которые плавно сменяются числами, а сама панель снова появляется и исчезает плавно (#509).

  • Диалог настроек сводной панели в Home Assistant снова прокручивается — колесом мыши на десктопе и свайпом на телефоне; шапка и кнопки остаются на месте (#508).

v1.73.0 — 2026-09-09

  • House Plan открывается с собственной страницы в боковом меню Home Assistant; отдельный дашборд больше не обязателен. Обычная карточка сохранена (#486).
  • Настраиваемая сводная панель показывает текущие значения HA, количество устройств, площадь комнат, дату и время. Общие группы задаёт администратор, а показ на каждой карточке пользователь включает независимо. Панель, её кнопки и широкий диалог настроек оформлены по дизайнерскому макету; появление и скрытие плавные (#437, #505).
  • Текущее пространство можно экспортировать в одностраничный PDF A4: архитектура, названия и площади комнат, размеры, штриховка стен и компас. Подложка, мебель и декор добавляются по выбору; устройства и живые состояния в документ не входят (#53).
  • Первый этап поддержки радаров присутствия показывает актуальные наблюдения на плане и позволяет сопоставить источники, разместить и откалибровать радар. Поддерживаются ESPHome LD2450 и явная настройка других форматов наблюдений; диагностический след остаётся в текущей сессии, без долговременной истории (#485).
  • Для комнаты можно задать собственные нижнюю и верхнюю границы комфортной температуры; незаданные границы наследуются от пространства (#487).
  • Каждый принятый отрезок цепочки стен сразу сохраняется как обычная стена; незавершённые цепочки больше не требуют отдельного режима восстановления. Завершение, удаление и объединение комнат согласованно обновляют геометрию, привязки устройств и карты пылесоса через Undo/Redo (#478, #477).
  • Линии и подписи Zigbee-топологии видны поверх названий комнат и посторонних маркеров, а связанные устройства остаются над линиями. Серый пунктир получил контрастную обводку; в окнах выбора цвета появилась явная кнопка «ОК» (#464, #476).
  • Повышена надёжность восстановления после ошибок записи при импорте, оптимизации и удалении пространства; удалённые маршруты робота не возвращаются после перезапуска. Исправлен подсчёт квоты загрузки вложений и усилены проверки SVG и приватности пакетов поддержки (#491, #495, #498).
  • Опубликован стабильный набор UI-хуков для внешних end-to-end тестов и правил card-mod, без привязки к приватным CSS-классам (#489).

v1.73.0-beta.9 — 2026-09-09

  • Повторное открытие плана на странице, где сводная панель уже загружена, больше не вызывает позднего перемера шапки и лишнего круга тяжёлых перерисовок сразу после первого кадра: элементы панели входят в первый кадр, и первое обновление устройств/свечения ложится на стабильную сцену (#506).

v1.73.0-beta.8 — 2026-09-09

  • Загрузка вложений больше не считает собственный ещё не сохранённый файл дважды в квоте хранилища: последний файл, который ещё влезает, принимается, а не отклоняется на границе. SVG-декор с цепочкой локальных ссылок глубже 64 переходов отклоняется понятной ошибкой «слишком большой» вместо ошибки сервера. Пакет поддержки несёт палитру заливок только под одиннадцатью именами слотов карточки; любой другой ключ в fill_colors остаётся дома (#498).

  • Применение импорта из резервной копии больше не отвечает «preview expired» после того, как план уже заменён: когда обе половины импорта записаны, ответ и события обновления следуют за записью, даже если срок предпросмотра истёк или его вытеснил более новый предпросмотр во время записи. Удаление или перенацеливание маршрута карты робота теперь убирает записанные проезды и с диска, а не только из памяти — перезапуск Home Assistant их не вернёт (#495).

  • Сводная панель, её кнопки в шапке и широкий диалог настроек приведены к дизайнерскому макету. Скрытие панели тоже плавное; лишние настройки размеров убраны из её диалога, а переключатель показа на мобильных недоступен, когда панель выключена на карточке. В остальных диалогах сохраняется удобный размер кнопок действий независимо от панели (#505).

v1.73.0-beta.7 — 2026-09-09

  • Настройки сводной панели теперь остаются отзывчивыми даже при большом числе сущностей Home Assistant: у каждого показателя открывается один поисковый список максимум со 100 видимыми результатами вместо полного списка в каждой строке. Локальные размеры значков и текста больше не скачут после обновления конфигурации, узкая форма и увеличенный системный текст не обрезаются по горизонтали, а уход со страницы или смена пользователя/прав безопасно отбрасывает старый черновик. Оптимизация теперь сохраняет и проверяет панель по тем же правилам, что обычное сохранение (#493).
  • Оптимизация, её серверная отмена, импорт и удаление пространства теперь используют единый восстанавливаемый протокол записи конфигурации и расположения. Если временная ошибка хранилища прервала такую запись, следующая правка сначала завершит восстановление и только потом проверит ревизии или запишет свои данные — половина плана и позиции устройств больше не могут быть незаметно потеряны (#491).
  • Значения сущностей в сводной панели теперь обновляются сразу, даже если эта сущность больше нигде не размещена на плане. Если ответ на сохранение был потерян, восстановление также сохраняет несвязанные параллельные изменения из другого клиента House Plan и не затирает их следующей записью; текущая подложка остаётся видимой, пока параллельно заменённая подложка не готова (#490).
  • House Plan теперь публикует документированный машиночитаемый набор стабильных UI-хуков для внешних end-to-end тестов и расширенных правил card-mod. Тесты могут определять готовность карточки и режим редактора, находить действия шапки, панели инструментов, диалоги, сообщения и элементы боковой страницы без привязки к приватным CSS-классам и деталям реализации (#489).
  • Над планом появилась настраиваемая информационная панель: в ней можно показывать состояния сущностей Home Assistant, количество размещённых устройств, общую чистую площадь комнат, дату и время. Администратор задаёт общие блоки и пространства, а каждый пользователь независимо включает панель и выбирает размеры значков и текста View для каждой карточки. Панель располагается справа или снизу, учитывает мобильный режим Home Assistant и скрывается, если карточка слишком мала. Настройки удобны для касания и остаются привязаны к той же карточке при перестроении дашборда. Первый жест камеры также применяется уже к итоговой геометрии шапки, поэтому план не смещается, пока новый контрол завершает компоновку; при тёплом пересоздании карточка удерживает фактически показанную высоту сцены до полной стабилизации новой шапки и больше не сдвигает её на несколько пикселей в первом кадре. Загрузка другого языка остаётся визуально нейтральной, а подписи комнат не меняют размер при переходе в редактор и исчезновении View-контролов (#437).
  • Радары присутствия теперь могут показывать на плане актуальные наблюдения, обрезанные по границам выбранной комнаты. House Plan распознаёт координатные наборы ESPHome LD2450, поддерживает явное сопоставление декартовых, полярных, дальностных, зональных и presence-only источников и проводит установку и калибровку прямо на плане с диагностикой состояния данных. Сырые наблюдения и короткий диагностический след остаются только в текущей сессии. Автоопределение LD2450 теперь требует точного совпадения модели и общего устройства ESPHome; смена сохранённой привязки не удаляет настройку радара, оставляя её доступной для исправления, а отмена установки, статусы источников и неверное размещение контрольных точек получают отдельные понятные сообщения (#485).

v1.73.0-beta.6 — 2026-09-08

  • Страница House Plan в боковом меню теперь показывает план с первого захода в реальном Home Assistant: панель принимает свойства, которые HA присваивает до определения элемента, и берёт высоту от viewport, а не от контейнера без высоты — страница больше не пустая со стейджем 0 px (#488).
  • В настройках отдельной комнаты теперь можно задать собственные нижнюю и верхнюю границы комфортной температуры. Каждая пустая граница независимо наследуется от пространства; настройка меняет только температурную заливку комнаты и проёмов (#487).

v1.73.0-beta.5 — 2026-09-08

  • House Plan теперь открывается напрямую с собственной страницы в боковом меню Home Assistant — с теми же пространствами, живым управлением и редакторами, что у полной карточки. Необязательная карточка для дашборда сохранена и в Sections по умолчанию занимает всю ширину; пользователь без права редактирования получает безопасное read-only состояние пустого плана (#486).
  • PDF-экспорт теперь сохраняет полную цепь горизонтальных и вертикальных размеров у прямоугольных выступов фасада: глубина выступа и соседние внешние участки больше не пропадают (#484).

v1.73.0-beta.4 — 2026-09-07

  • PDF-экспорт теперь эффективнее вписывает в лист всю сцену, печатает серые стены со штриховкой и полноценный векторный компас, а также показывает более чистые горизонтальные и вертикальные размеры без локального дублирования противоположных сторон и наложения подписей на геометрию плана. Техническая легенда убрана, а узкому диалогу больше не нужна горизонтальная прокрутка (#482).

v1.73.0-beta.3 — 2026-09-07

  • Администратор теперь может сохранить текущее пространство как чистый одностраничный PDF A4 с архитектурой, названиями комнат, чистой площадью пола и размерами; мебель, декор и подложка добавляются по желанию. Устройства и живые состояния в PDF не попадают (#53).

v1.73.0-beta.2 — 2026-09-06

  • Во всех окнах выбора цвета появилась понятная полноширинная кнопка «ОК». Цвет и прозрачность по-прежнему применяются сразу, а при некорректном HEX окно остаётся открытым, чтобы значение можно было исправить (#476).
  • Цепочка стен теперь сразу сохраняет каждый принятый отрезок как обычную независимую стену. Незавершённые цепочки остаются на плане, но больше не возобновляются особым образом после перезагрузки; старые сохранённые контуры безопасно мигрируют в новую модель, а поглощённые созданной комнатой стены не остаются дубликатами кладки (#478).
  • Завершённая цепочка стен теперь сразу объединяет собственные совместимые прямые участки и устраняет доказанно дублирующую кладку. Удаление и объединение комнат согласованно обновляет привязки устройств и межэтажные карты пылесоса через Undo/Redo, а оптимизация сохраняет плавные трансформации мебели и изображений (#477).

v1.73.0-beta.1 — 2026-09-06

  • Активные линии и подписи Zigbee-топологии теперь читаются поверх названий комнат и посторонних маркеров, а полные маркеры связанных устройств остаются сверху, включая маркер прямо под курсором. У серого пунктира неизвестного качества также появилась тонкая тёмная контрастная обводка (#464).

v1.72.0 — 2026-09-05

  • Администратор теперь может явно загрузить снимок топологии ZHA или Zigbee2MQTT и посмотреть на плане наблюдаемых прямых соседей выбранного устройства. Качество связи, пунктир для неизвестного LQI, стрелки к координатору и честные окончания пути в другом пространстве или у неразмещённого узла собраны в одну контекстную легенду; hover никогда не запускает сканирование сети (#54, #450, #457, #459).
  • Клик или тап по комнате теперь центрирует и вписывает её с полями 10%, а двойной клик или тап по свободному фону выполняет «Вписать всё». В настройках пространства также можно создать копию без комнат, сохранив архитектуру, подложку и настройки отображения, но не копируя размещённые устройства (#152, #449, #456).
  • На больших планах тяжёлая сцена остаётся стабильной при hover, pan, pinch и перетаскиваниях в редакторах, а промежуточные отрезки цепочки стен фиксируются ограниченной локальной проверкой с полной fail-closed проверкой при завершении (#451, #461).
  • Установка и обновление карточки теперь сами объясняют своё состояние, безопасно восстанавливаются при несовпадении версий frontend и интеграции, а нативные подтверждения и резервные диалоги сохраняют центрирование и модальность после переподключения Home Assistant (#462, #463).
  • Мебель можно примагничивать к обеим физическим граням наружной стены, стрелки двигают выбранные объекты подложки на одну клетку, а превью мебели надёжно исчезает при уходе указателя с плана (#447, #460).
  • Скрытые эксперименты теперь включаются единым постоянным локальным ключом браузера hp_alpha=1; hp_alpha=0 выключает весь набор (#448).

v1.72.0-beta.5 — 2026-09-05

  • Нативные подтверждения и резервные диалоги House Plan теперь остаются по центру экрана с настоящим затемнённым модальным фоном. Если Home Assistant временно отсоединяет и восстанавливает карточку, открытый диалог возвращается в верхний слой браузера вместо немодального окна, прижатого к краю экрана (#463).
  • При рисовании цепочки стен на большом плане каждый промежуточный отрезок теперь фиксируется через ограниченную локальную проверку вместо двух полных пересчётов всего этажа; завершение цепочки по-прежнему запускает полную fail-closed проверку (#461).
  • Установка и обновление карточки теперь сами объясняют своё состояние: House Plan различает режимы ресурсов Lovelace, показывает регистрацию в «Состоянии системы», один раз напоминает о полной перезагрузке страницы и безопасно восстанавливает открытую карточку при несовпадении версий frontend и интеграции; киоск перезагружается не более одного раза и только в покое (#462).

v1.72.0-beta.4 — 2026-09-05

  • Превью размещения мебели теперь надёжно исчезает при уходе указателя с плана, в том числе после полной перерисовки редактора; у живого редактора также появилась детерминированная точка ожидания отрисовки для браузерных проверок (#460).

  • На линиях топологии Zigbee при наведении теперь видны стрелки в сторону координатора; входящие стрелки показывают устройства за роутером, а если следующий узел находится на другом плане или не размещён, короткая подпись честно завершает путь (#457).

  • У настройки «Связи Zigbee» появилась контекстная подсказка: она коротко объясняет функцию, разбирает легенду — цвет линии как качество связи, пунктир как несообщённое качество, стрелки как путь к координатору — и называет ограничения: данные из последней загрузки устаревают, а связи видны только при работе мышью (#459).

  • В настройках пространства теперь можно создать под новым именем копию без комнат: стены, проёмы, колонны, элементы подложки, положение фонового плана, масштаб и настройки отображения сохраняются, а размещение устройств не переносится; отдельное подтверждение появляется только тогда, когда сначала требуется оптимизировать весь план (#456).

v1.72.0-beta.3 — 2026-09-05

  • На больших планах тяжёлая сцена комнат, стен, света, подложки и устройств теперь остаётся неизменной во время hover, pan, pinch и перетаскиваний в редакторах, а посторонние обновления Home Assistant больше не перестраивают карточку целиком; внешний вид и результат действий не меняются, но отклик становится заметно плавнее (#451).

v1.72.0-beta.2 — 2026-09-05

  • Двойной клик или двойной тап по свободному фону плана в Просмотре и киоске теперь выполняет то же действие «Вписать всё», что кнопка в панели; комнаты, устройства, проёмы и редакторы сохраняют собственные жесты (#449).
  • Обновление топологии Zigbee2MQTT теперь понимает реальные camelCase-поля raw-карты сети, сохраняя совместимость со snake_case: корректная карта заполняет устройства и связи вместо ошибки неподдерживаемых данных (#450).

v1.72.0-beta.1 — 2026-09-04

  • Скрытые эксперименты теперь включаются одним бессрочным локальным ключом браузера: hp_alpha=1 активирует весь alpha-набор и возвращает существующий 3-D Просмотр, а hp_alpha=0 выключает его. Прежнее состояние hp-labs=iso не переносится, поэтому тестировщикам нужно включить alpha заново (#448).
  • Администратор теперь может явно загрузить снимок топологии ZHA или Zigbee2MQTT и при наведении реальной мыши видеть только наблюдаемых прямых соседей выбранного устройства. Диагностика по умолчанию выключена, никогда не запускает сканирование от наведения, считает вместо отрисовки связи с другими пространствами и не появляется на touch, в киоске, редакторах и статической карточке (#54).
  • В Просмотре и киоске клик или тап по комнате теперь центрирует и вписывает её видимый пол и ограничивающие стены с полями 10%; видимая подпись комнаты даёт то же действие с клавиатуры (#152).
  • Мебель теперь может примагничиваться к обеим физическим граням наружной стены и не проваливается сквозь кладку, а стрелки сдвигают любой выбранный объект подложки ровно на одну текущую клетку без повторного магнита стен или декора (#447).

v1.71.0 — 2026-09-04

  • В редакторе подложки теперь можно загружать и повторно использовать закрытые PNG, JPEG, WebP и безопасные SVG, а затем размещать, менять размер, отражать, вращать, заменять и раскладывать их по слоям как мебель, но без магнита к стенам; для пропавшего файла сохраняется восстанавливаемая рамка, а переносной экспорт хранит данные целостности без встраивания байтов (#51).
  • Роботу с несколькими картами теперь можно сопоставить и откалибровать каждую карту на своём этаже: живая позиция и след рисуются там, а док остаётся на месте; для несопоставленной или неоднозначной активной карты план показывает точную причину вместо попытки угадать этаж (#162).
  • В общих настройках можно скрыть информационное окно комнаты, не отключая её подсветку; мебель примагничивается к видимой физической грани стены, а в каталоге HACS интеграция теперь называется просто House Plan (#426, #445, #444).
  • Подтверждения и «Помощь и обратная связь» теперь безопасно завершаются при пропавшем пространстве, позднем превью, изменённом повторе, совместимых смешанных версиях и некорректных вложенных данных; отслеживание HA-зон и отклонённые сохранения общих настроек, устройства или калибровки также сохраняют последний подтверждённый план (#417, #418, #419, #420, #423, #439, #442).

v1.71.0-beta.4 — 2026-09-04

  • Мебель теперь примагничивается задней гранью к видимой физической поверхности стены, а не к её оси: учитываются локальная толщина и выбранная сторона общей стены, поэтому предмет больше не оказывается внутри кладки (#445).
  • Если Home Assistant отклоняет сохранение общих настроек, устройства или калибровки робота, план теперь возвращается к последнему подтверждённому состоянию даже после канонизации отправляемого конфига, но сохраняет открытый редактор, автоматическое предложение или ручную подгонку для повтора; сообщение об успехе появляется только после принятой записи (#442).
  • После удаления последнего маршрута карты робота список теперь остаётся явно пустым и не возвращает старую калибровку; маршруты в удалённые пространства собраны в понятную группу, а живой слой больше не перебирает повторно все устройства, не являющиеся роботами (#443).
  • Вторую и последующие карты робота теперь можно добавить: сначала редактор просит выбрать этаж и только потом сохраняет маршрут, а отказ Home Assistant не оставляет ложную локальную запись (#441).

v1.71.0-beta.3 — 2026-09-03

  • Если робот убирает, а его текущая карта не сопоставлена этажу, не откалибрована, неоднозначна или ссылается на удалённое пространство, у дока появляется янтарное предупреждение с точной причиной — вместо плана, на котором робота просто нет (#162).
  • В редакторе устройства появился блок «Карты и этажи»: каждую карту робота можно сопоставить пространству, откалибровать её именно в этом пространстве, а позже перенести или удалить — док при этом остаётся на своём месте (#162).
  • Робот-пылесос с несколькими картами теперь показывается на своём этаже: док остаётся в своём пространстве, а живое положение и след рисуются в том пространстве, которому назначена активная карта; несопоставленная, неоднозначная или незакалиброванная карта не рисует ничего вместо того, чтобы угадывать этаж (#162).
  • Пользовательские изображения подложки теперь отклоняют специальные файловые объекты без зависания Home Assistant, переживают исчезновение файлов во время подсчёта лимита и отличают повреждённое изображение от переполненного хранилища; движение пером или пальцем также снимает зависшее наведение комнаты при выключенной подсказке (#440).
  • Если Home Assistant отклоняет сохранение общих настроек, план снова показывает последнее подтверждённое сервером состояние вместо несохранённого локального черновика; введённые значения остаются в открытом диалоге для повторной попытки (#439).

v1.71.0-beta.2 — 2026-09-03

  • Пользовательские картинки подложки теперь корректно восстанавливаются после прерванной загрузки, всегда учитываются в лимите, повторно проверяются после изменения конфигурации и совместимы со старыми версиями интеграции; смена языка и неудачное превью обращения также завершаются безопасно, не оставляя зависших действий и занятых слотов (#434).
  • Сохранённые пользовательские картинки по-прежнему видны домочадцам без права редактирования, но произвольный поиск файлов теперь закрыт; повторные загрузки карточки и HTTP используют одну ограниченную потоковую проверку вместо нового чтения каждой картинки (#432).
  • Пользовательские изображения декора теперь проходят тот же стабильный барьер записи координат, что мебель и фигуры, поэтому повторные сохранения и «Оптимизировать планы» больше не сохраняют float-шум только у изображений (#431).
  • Экспорт, созданный при отсутствующем файле пользовательской картинки декора, теперь можно импортировать с обычным подтверждением вместо ошибки всего плана; полный экспорт, одно пространство и режим «Только планировка» сохраняют восстанавливаемый объект (#428).
  • Слишком большой исходник изображения декора теперь можно добавить через безопасную уменьшенную копию: House Plan скрывает только запрещённый оригинал, а не оба действия (#427).
  • В общих настройках теперь можно отключить информационное окно комнаты при наведении мышью, не отключая подсветку комнаты и подсказки устройств; существующие планы сохраняют включённое поведение по умолчанию (#426).

v1.71.0-beta.1 — 2026-09-03

  • В редакторе подложки теперь можно загружать и повторно использовать закрытые PNG, JPEG, WebP и безопасные SVG, а затем размещать, плавно менять размер, отражать, вращать, заменять и раскладывать их по слоям как мебель, но без магнита к стенам. Для пропавшего файла сохраняется восстанавливаемая рамка, а экспорт записывает хэш без встраивания байтов (#51).
  • «Помощь и обратная связь» теперь работает при совместимых смешанных версиях карточки и интеграции, использует безопасное имя вложения на основе SHA, сообщает обо всех семействах Repair House Plan и отклоняет исчерпанный лимит превью до сборки диагностического пакета (#423).
  • При построении privacy-проекции support-пакет теперь проверяет типы флага и позиции бейджа значения, поэтому некорректный вложенный конфиг не может дословно попасть в отчёт (#420).
  • Провенанс автоматического переноса между HA-зонами теперь переживает временно пустой или усечённый реестр Home Assistant: уборка сверяется с полным roster привязок и забывает исчезнувшее устройство лишь после двух непустых авторитетных наблюдений (#419).
  • «Помощь и обратная связь» теперь учитывает отказ от вложения даже при позднем ответе превью, а изменённая повторная отправка получает новый ключ идемпотентности, чтобы исправленный репорт дошёл до поддержки (#418).
  • Подтверждение опасного действия больше не зависает, если активное пространство исчезло или запрос пришёл во время переключения лениво загружаемого языка: когда показать диалог невозможно, House Plan безопасно отвечает отказом (#417).

v1.70.0 — 2026-09-02

  • В House Plan появился закрытый канал «Помощь и обратная связь», ошибки бэкенда и контекстные подсказки локализованы, а опасные действия используют единый доступный диалог подтверждения (#43, #42, #86, #32).
  • Работа с устройствами получила видимые фильтры обнаружения, Undo/Redo позиций, автоматический перенос в связанную HA-зону, действие «Ничего не делать» и более безопасное редактирование привязок (#44, #74, #126, #381, #385).
  • Камера теперь движется плавно, мебель можно точно менять в размере, зеркалить и вращать, а плотное кадрирование дома игнорирует скрытую архитектуру; старые и будущие конфиги защищены проверками совместимости (#82, #396, #383, #384, #33).
  • Мелкие исправления и улучшения.

v1.70.0-beta.5 — 2026-09-02

  • Первая загрузка после обновления больше не рассчитывает большой этаж дважды, пока House Plan создаёт служебную привязку к зонам Home Assistant. Время запуска тестового этажа из 20 комнат вернулось к уровню предыдущей стабильной версии (#126).

v1.70.0-beta.4 — 2026-09-02

  • Кнопка «Помощь и обратная связь» теперь совпадает по размеру 44 px с кнопкой «Общие настройки», а поле сообщения использует обычный фон поля ввода вместо серой заливки (#415).

v1.70.0-beta.3 — 2026-09-02

  • Новый диалог «Помощь и обратная связь» объединяет версию, документацию и ссылки проекта и умеет отправлять закрытый репорт без публичной публикации. Диагностическое вложение всегда включается отдельно: House Plan сначала показывает точный обезличенный JSON, убирает имена и HA id, предупреждает о сохранении точной геометрии дома, а при ошибке оставляет черновик для повтора или ручной отправки (#43).

  • Подтверждения удаления и разблокировки теперь используют нативную оболочку House Plan и передаются скринридеру как срочный диалог вместе с текстом последствий; обычные окна по-прежнему используют оболочку Home Assistant (#406).

  • Отказ записи конфига при переносе устройства в другую HA-зону больше не стирает молча поставленную вручную позицию: House Plan восстанавливает точку перед повтором, а если не удалось и это — отмечает маркер для внимания. Перенос теперь удаляет Undo/Redo только этого маркера, а не очищает историю позиций всех устройств (#403).

  • Подтверждения работают и до создания первого пространства: удаление сохранённого плана в онбординге теперь спрашивает и отвечает, а не молчит (#402).

v1.70.0-beta.2 — 2026-08-31

  • Перенос устройства или отдельно размещённой сущности в другую HA-зону теперь переносит и маркер в связанную комнату House Plan, даже если маркер раньше двигали вручную. Новое место выбирает обычная сетка комнаты и отмечает его для внимания; явный выбор комнаты в House Plan по-прежнему важнее (#126).

  • Мелкую мебель проще тянуть за угол: угловая ручка теперь выигрывает нажатие у боковой там, где они перекрываются, — а перекрываются они на всём уже примерно 80 см (#400).

  • История Undo/Redo позиций маркеров больше не гаснет сама: карточка хранит ровно то, что отправила серверу, поэтому переподключение или вторая вкладка перестали выглядеть чужой правкой (#397).

  • Опасные действия теперь используют единый доступный диалог подтверждения House Plan вместо системного окна браузера. Удаление устройства, черновика, файла плана и пространства, а также открытие замка получили понятные последствия, безопасные «Отмена»/X/Esc и защиту от уже изменившейся цели (#32).

  • Зум снова честный: масштаб, который вы видите в момент касания плана, и запоминается, а быстрая серия колеса или трекпада удерживает точку под курсором ровно на месте (#396).

v1.70.0-beta.1 — 2026-08-30

  • Колесо, кнопки масштаба, «Вписать всё», стрелка возврата и двойной тап в киоске теперь плавно перемещают камеру за короткую анимацию. Щипок и панорамирование остаются непосредственными, а при системном уменьшении движения масштаб меняется мгновенно (#82).

  • Ошибки бэкенда теперь всегда приходят локализованными: у каждого стабильного кода есть перевод на все четыре языка, неизвестный код даёт локализованный текст с кодом вместо сырой английской фразы, а детали ошибок проёмов передаются структурированно. Под капотом бэкенд получил гейты покрытия, линта и типизации в CI (#42).

  • В редакторе устройств появилась отдельная история отмены и повтора позиций маркеров. Одно завершённое перетаскивание — один шаг; отменённые и неудачные перемещения в историю не попадают. До 50 шагов текущей сессии доступны через постоянные кнопки панели или Ctrl/Cmd+Z, Ctrl/Cmd+Shift+Z и Ctrl+Y (#74).

  • У обнаружения устройств не осталось скрытых ручек: группировка света и список исключённых интеграций стали видимыми «Фильтрами обнаружения» на вкладке «Доступны» каталога — со счётчиками «появится/скроется» до записи и именем интеграции у каждого исключённого кандидата. Климат комнаты теперь следует тем же пользовательским исключениям, что и обнаружение (#44).

  • Старые и будущие конфигурации плана теперь защищены механикой, а не привычкой: схема бэкенда выгружается в закоммиченный манифест, списки значений фронта и бэкенда сверяются в CI с явным allow-list'ом немногих легитимных компат-расхождений, а lifecycle-фикстуры доказывают, что конфиг старейшей поддерживаемой эпохи — или из будущего — загружается без тихих потерь (#33).

  • У критичных настроек плана, света, фона и каталога устройств появились короткие контекстные подсказки на всех четырёх языках интерфейса; открытие подсказки не меняет саму настройку (#86).

  • Клик по уже выбранной привязке в диалоге маркера больше не сбрасывает молча настроенный источник значения и бейдж на «авто» — сброс происходит только при реальной смене привязки (#385).

  • Мебель теперь можно плавно масштабировать угловыми и одноосевыми ручками, зеркалить по горизонтали/вертикали перетаскиванием через грань или в свойствах и свободно вращать с привязкой к 45° по Shift. Область выбора расширена на физические 10 см вдоль линий предмета, не захватывая пустую рамку (#383).

  • Для маркера устройства теперь можно выбрать действие «Ничего не делать». Короткий клик, тап, Enter и Space ничего не открывают и не отправляют, при этом внешний вид маркера, карточка House Plan по долгому нажатию и HA more-info по правому клику сохраняются (#381).

  • fit: house в houseplan-space-card больше не позволяет скрытой архитектуре расширять плотный кадр: при выключенном show_borders стены, перегородки и колонны не голосуют — как и скрытые символы проёмов (#384).

v1.69.0 — 2026-08-30

  • House Plan заговорил по-немецки и по-французски, редакторы больше не входят в начальную загрузку View, а режим «Значение + состояние» позволяет выбрать точный источник показания. Внешние клиенты теперь обязаны передавать expected_rev при записи в непустое хранилище конфигурации или раскладки (#348, #371, #337, #378, #340).
  • Редактор подложки получил 56 типов мебели, живое превью размещения, безопасное уменьшение огромных изображений, пассивные ориентиры устройств и единый сохраняемый стиль по умолчанию для новых элементов (#159, #359, #39, #362, #360, #377).
  • Glow теперь следует за живой геометрией дверей и ворот и может быть включён в houseplan-space-card, где также появились плотное кадрирование по дому и кэшированный рендеринг света (#20, #374, #373, #375).
  • Мелкие исправления и улучшения.

v1.69.0-beta.5 — 2026-08-29

  • В режиме «Значение + состояние» теперь можно выбрать нужный показатель, а не полагаться только на автоматически выбранное состояние сущности. Редактор устройства предлагает те же состояния, полезные атрибуты, LQI и значения связанных источников света, что внешний бейдж: например, положение cover отображается как 42 % вместо Открыто. Старые маркеры сохраняют прежнее автоматическое поведение, а нажатие по значению выполняет то же действие (#378).

  • Glow в houseplan-space-card больше не пересобирает граф света и сцену стен с нуля на каждый тик Home Assistant: статический путь получил кэш-механику полной карты (кэш графа света, LRU-пул барьерных сцен — движущаяся дверь переиспользует оба своих состояния, быстрый recut-путь кладки и кэш выреза комнат). Заодно исправлен регресс кэша графа света, который полная карта получила в beta.4 (#375).

  • В houseplan-space-card появилось опциональное fit: house: вся конструкция дома заполняет компактную карточку без обычного внешнего поля 5%, а подложка, декор, подписи и маркеры больше не уменьшают дом. Прежнее кадрирование по всему содержимому остаётся default, сам дом никогда не обрезается (#373).

  • Цвет и стиль по умолчанию для новых элементов редактора подложки теперь переживают перезагрузку страницы: выбор сохраняется вместе с планом (settings.decor_default_style) и общий для всех редакторов этого плана (#377).

  • houseplan-space-card с title: null (строка title: без значения в YAML) теперь получает тот же компактный кадр, что и явный title: ""; попутно — мелкий полиш из аудита beta.4: штрихи мебели в labs-изометрии снова следуют за камерой декора, небулево значение light_pools больше не держит простаивающий glow-рантайм, а руководства фиксируют, что подписи комнат не перехватывают указатель в редакторе подложки (#376).

v1.69.0-beta.4 — 2026-08-29

  • В read-only houseplan-space-card теперь можно включить радиальный Glow и тени от стен как на полном плане: light_pools: true. Цвет, яркость, радиус, проёмы и физические преграды общие с полным рендерером, а схема остаётся полностью неинтерактивной. По умолчанию опция выключена, чтобы существующие карточки сохранили дешёвый путь отрисовки (#374).

  • houseplan-space-card с явно заданным title: "" теперь убирает вместе с заголовком пустую полосу кадрирования сверху, сохраняя боковые и нижнее поля (#372).

  • House Plan заговорил по-французски: полный перевод сообщества от @OUARZA, загружается лениво, как немецкий, — обычный View-бандл не вырос. Français выбирается явно и включается автоматически для французских профилей Home Assistant (#371).

  • Ломающее для внешних клиентов (скрипты, автоматизации, кастомные интеграции, пишущие планы напрямую): houseplan/config/set и houseplan/layout/set поверх непустого хранилища теперь требуют expected_rev и без него отвечают conflict. Сначала прочитайте текущий rev через houseplan/config/get / houseplan/layout/get; сама карточка шлёт ревизию с v1.60 и не затронута (#340, #356, #368).

  • В редактор устройств вернулась отдельная кнопка Добавить перед Устройства: новый маркер снова можно создать напрямую, не открывая сначала каталог (#363).

  • Ворота или дверь на cover-сущности с позицией больше не дёргают карточку во время движения: световой вырез проёма ступает по сетке 5%, и тяжёлых пересчётов геометрии вместо ~сотни за цикл — не больше двадцати (#366).

  • Редактор подложки теперь постоянно показывает основной цвет и прозрачность на главной панели при любом инструменте. Один выбор применяется к новым линиям, контурам фигур, тексту и мебели, не меняя готовые объекты и независимую заливку фигур (#360).

  • Толщина контура мебели теперь меняется вместе с масштабом плана, как та же физическая толщина у линий и фигур, а независимое изменение ширины и глубины предмета по-прежнему не искажает горизонтальные, вертикальные и диагональные штрихи (#361).

  • Пакет мелких честных фиксов из аудита: климат комнаты добирается до легаси-маркеров без явного признака «нет HA Area»; устройство с полностью отключёнными сущностями больше не светится как живое; превью мебели реагирует на Shift мгновенно; правый клик с выбранным инструментом больше не ставит объекты; отброшенный сегмент следа пылесоса (битая калибровка) теперь виден в консоли, а не исчезает молча (#369).

  • Маркеры устройств в редакторе подложки теперь служат только полупрозрачными ориентирами: ядро, кольцо, капсула значения и бейджи больше не реагируют на наведение, не открываются, не выполняют действия и не перетаскиваются, а инструмент рисования или мебели получает нажатие сквозь всю видимую область маркера (#362).

  • Очень большие подложки больше не вешают планшет: карточка читает разрешение из заголовка файла до каких-либо тяжёлых операций, показывает честные цифры и предлагает безопасную уменьшенную копию (пропорции и прозрачность сохраняются). Исходный файл не изменяется, а текущий план переживает любой сбой (#39).

v1.69.0-beta.3 — 2026-08-29

  • При размещении мебели в редакторе подложки мышь теперь показывает на плане полупрозрачный символ с точным будущим размером, поворотом и привязкой к стене. Предпросмотр обновляется вместе с полями размера и исчезает без изменений при отмене; на touch движение, отмена или второй палец не создают случайный предмет (#359).

  • След пылесоса теперь повторяет те же записанные точки с мягко скруглёнными поворотами вместо заметной ломаной. Текущая и предыдущая уборки используют одну ограниченную кривую, сохраняют разрывы телеметрии и не отклоняются от записанного маршрута более чем на 17,5 см (#209).

  • Робот-пылесос с живой позицией больше не замораживает карточку на только что открытой странице: определение id карты выполнялось внутри цикла отрисовки и требовало код редактора, который холодная вкладка ещё не загрузила, — первый кадр оказывался последним (#358).

  • Glow теперь учитывает текущее состояние привязанных внутренних дверей и ворот: закрытый проём останавливает свет, открытый пропускает его, а cover с позицией открывает соответствующую долю прохода. Открытые проходы остаются прозрачными, окна и наружные проёмы — непрозрачными; посторонние обновления Home Assistant переиспользуют готовую геометрию света (#20).

  • Нажатие на устройство на только что открытой странице снова работает без предварительного захода в какой-либо редактор. Выключатель, управляющий виртуальными источниками света (и любое другое устройство с тап-переключением), молча игнорировал нажатие в холодной вкладке, пока настройки устройства не откроют один раз — теперь View-карточка разрешает нажатие сама, без ленивого кода редактора (#357).

v1.69.0-beta.2 — 2026-08-28

  • В библиотеке мебели редактора подложки теперь 56 видов сверху и компактный двухуровневый выбор: сначала категория с видом спереди, затем точный вариант для плана. Уже размещённая мебель сохраняет геометрию, а 18 рисунков получают новый авторский дизайн (#159).

  • Если необязательный языковой пакет (сейчас — немецкий) не загрузился, карточка говорит об этом тостом, а не молча переключается на английский; рантайм локалей в продакшне теперь тот же код, что доказывает тестовый набор i18n (#354).

  • Устаревший или сторонний клиент больше не может молча заменить сохранённые позиции устройств, отправив весь layout без его ревизии. Инициализация без ревизии остаётся доступной только пока хранилище layout пусто (#356).

  • Температура и влажность комнаты теперь следуют фактическому размещению реального датчика в House Plan, а не остаются в его HA-зоне. Автоматические климатические показатели работают и в комнатах без HA-зоны; подпись, подсказка и температурная заливка согласованы (#317).

  • Активные физические настенные выключатели, для которых Home Assistant не предоставляет собственных сущностей, больше не выглядят постоянно недоступными: теперь они остаются непрозрачными и становятся жёлтыми при работающей управляемой цели или нейтральными в остальных случаях (#318).

  • Устаревшая вкладка или сторонний клиент больше не может молча заменить новый сохранённый план, не передав ревизию конфигурации. House Plan отклоняет такую запись как конфликт и сохраняет серверную копию; инициализация без ревизии разрешена только пока хранилище конфигурации пусто (#340).

  • Ленивый редактор переживает нестабильную сеть и обновления: после сетевого сбоя повторное нажатие «Редактировать» пробует загрузку заново, а не молчит до перезагрузки страницы; тост подсказывает, что делать. Устаревший houseplan-card.js из кэша после обновления показывает плашку «перезагрузите страницу» вместо пустой карточки. Чанки с контент-хэшами теперь отдаются с иммутабельным кэшированием (#353).

  • Очень острая вершина между стенами разной толщины (например, 15 и 30 см) на старых планах снова рисуется честным остриём, а не «трезубцем»: расчёт смыкания внутренних граней учитывает обе толщины, а не одну наибольшую (#339).

  • Серверные трейлы пылесосов теперь согласуются с обычным редактированием плана: удаление маркера удаляет и сохранённые маршруты, даже если клиентская очистка прервалась, а точка, полученная при запуске Home Assistant, сохраняется на диск и не остаётся только в памяти (#335).

v1.69.0-beta.1 — 2026-08-28

  • В House Plan появилась полная немецкая локализация. Deutsch можно выбрать вручную, а для немецкого профиля Home Assistant она включается автоматически; словарь загружается по требованию и не утяжеляет обычный режим просмотра (#348).

  • Режим просмотра теперь запускается без загрузки трёх редакторов: их общий runtime подгружается при первом обращении и защищён повторной попыткой и проверкой версии сборки. Релизные инструменты сверяют версии обоих runtime, а тестовые — всё дерево frontend-ассетов, а не один JavaScript-файл (#337).

  • Проверки стыков стен стали честными на границах: ложные отказы на микроскопических погрешностях координат устранены, очень длинные стены не роняют проверку, а внутренняя ошибка проверки больше не пропускает запись (#331).

  • Сохранение и изменение размеров на больших планах больше не подвешивают Home Assistant: проверка ограничений стыков (#329) ускорена на порядки — тяжёлая часть ушла из основного цикла сервера, повторные вычисления кэшируются (#330).

  • Острые углы комнат снова выглядят честно: очень острая вершина распадалась на «трезубец» из пиков и вырезов, а рисование теперь не разрешает саму причину — стены под углом меньше 15°, больше шести стен в узле, стены короче 20 см или собственной толщины, узлы ближе 5 см и комнаты без внутреннего просвета. Длина меряется по всей стене, поэтому короткий доборный участок, компенсирующий перепад толщин, остаётся законным (#329).

  • В редакторе устройств появился единый каталог с поиском: устройства на плане, доступные привязки, скрытые маркеры и привязки для повторного добавления. Статус Home Assistant объясняется отдельно, а поиск использует видимые на плане имена комнат; скрытие, показ и повторное добавление собраны в одном месте (#29).

v1.68.1 — 2026-08-27

  • Создание пространства больше не выдаёт ошибку v8+ space requires wall_segments и не оставляет на экране несохранённое пространство-призрак; после неудачного сохранения состояние возвращается к серверному до следующего создания или удаления (#324).

v1.68.0 — 2026-08-27

  • Структурные изменения плана теперь опираются на стабильные ID сегментов стен: толщина, происхождение черновиков и принадлежность проёмов сохраняются при Resize, Undo/Redo, импорте, оптимизации и повторном редактировании. Переход на model v9 выполняется атомарно, а конфликты старых границ с проёмами разрешаются автоматически и детерминированно. Перед первым структурным сохранением или запуском «Оптимизировать планы» рекомендуется экспортировать резервную копию: старые версии не понимают новую модель стен (#282, #316, #319).
  • Виртуальные стены заменены обычными стенами толщиной 0 см. Их можно рисовать и менять инструментами «Стены» и «Толщина», а в настройках пространства — выбрать пунктирный вид, пропускающий Glow и солнечные лучи, либо сплошной, работающий как световой барьер нулевой площади (#306).
  • Улучшена работа редактора стен: оси и узлы остаются видимыми во всех инструментах, отдельно стоящие и черновые стены доступны инструменту «Толщина», а сложные стыки и острые углы больше не оставляют зубцов, ступеней и белых клиньев.
  • Мелкие исправления и улучшения.

v1.68.0-beta.4 — 2026-08-27

  • Обновление на новую модель стен больше не замораживает редактирование: сервер распознаёт первую запись более новой карточки поверх старого документа (например, с осиротевшей легаси-границей) вместо требования обновить уже обновлённую карточку (#319).
  • Рисование снова работает везде: преобразование плана к новой модели стен больше не останавливается на конфликте легаси-границы с проёмом. Дверь внутри бывшей «границы» сохраняет настоящую стену (разрыв продолжается по обе стороны), неоднозначный носитель выбирается детерминированно, а проём вовсе без пригодной стены сохраняется в данных — бездействует, пока его не переставят (#316).

v1.68.0-beta.3 — 2026-08-26

  • Теперь у стен одна модель при любой толщине. Отдельные инструмент «Граница» и сущность виртуальной стены удалены: «Стены» и «Толщина» принимают 0 см для контуров комнат, сохранённых черновиков и независимых стен. Для пространства можно выбрать общий вид нулевых стен: пунктир (по умолчанию, пропускает Glow и солнце) либо сплошную линию (точный световой барьер нулевой площади). Старые виртуальные участки атомарно мигрируют в стабильные сегменты model v9; все прежние cm:0 намеренно получают ту же семантику, поэтому у небольшой части старых планов может измениться вид или прохождение света. Нулевая стена не создаёт кладку, площадь или тоннель и не может содержать проём. Перед первым структурным сохранением, импортом или «Оптимизировать планы», записывающим model v9, экспортируйте резервную копию: старая версия не понимает новую модель стен, и поддерживаемый путь назад — восстановление этой копии (#306).

v1.68.0-beta.2 — 2026-08-26

  • Флаг диалога привязки называется «Показывать сущности» — как в руководстве пользователя (#269).

  • Отказ проверки геометрии теперь объясняет себя: диалог называет причину по каждому пространству, даёт скопировать диагностический блок одной кнопкой (с фолбэком прямо в диалоге, если буфер недоступен) и пишет одну структурированную запись в консоль разработчика. Совет «обновите House Plan» показывается только при реальном расхождении версий карточки и интеграции (#295).

  • Инструмент «Толщина» теперь берёт любую стену: отдельно стоящие перегородки и сегменты сохранённых черновиков выбираются и меняются так же, как контуры комнат; при точном наложении клик достаётся отдельно стоящей стене. Ноль для неё по-прежнему отклоняется — стены без толщины не существует (#313).

  • Рисование комнат на планах model v8 снова работает надёжно: незавершённая цепочка стен сохраняет ID сегментов при промежуточных сохранениях и отмене, а отклонённая сервером запись сразу возвращает последнюю принятую геометрию, не оставляя временную комнату или случайную перегородку (#314).

v1.68.0-beta.1 — 2026-08-26

  • Две стены, сходящиеся под острым углом, снова сходятся в полное остриё — фаска #309 действует только в узлах из трёх и более стен. Вместо этого убран настоящий зубец: торец толстой стены больше не торчит вбок из грани тонкой (#310).

  • Стыковочные узлы больше не выпускают зубцы: вылет mitre ограничен 1.5 полутолщины, всё длиннее закрывается плоской чертёжной фаской — у острых пар исчезают хвосты, у толстых многолучевых узлов пики, а кресты смешанных толщин теряют ступеньку в чужом квадранте. Прямые углы не изменились (#309).

  • Структурные изменения стен теперь сохраняют толщину, происхождение черновых сегментов и принадлежность дверей, окон, ворот и проходов через стабильные ID сегментов стен. Существующий план обновляется атомарно при первом структурном изменении или через «Оптимизировать планы»; Resize, отмена/повтор и последующие правки сохраняют те же ID без накопления координат вне сетки; серверная транзакция Optimize также гарантирует это обновление при прямом вызове. Принятая пользователем цепочка остаётся допустимой при преобразовании в комнату или независимые стены, а отклонённая транзакция не записывает частичный результат и не показывает ложное сообщение об успехе. Невалидный открытый проход по-прежнему получает своё точное сообщение об ошибке, а не общий блокер миграции стен. Компактная карточка пространства также не теряет после миграции двери, окна, ворота и проходы, привязанные к стенам, включая физический разрыв кладки в месте прохода. Окна на стенах продолжают пропускать солнечные лучи после правки, частичные открытые границы сохраняются и на уже мигрированных планах, а удалённая толщина стены больше не восстанавливается в прежнее значение. Неоднозначная старая геометрия остаётся без изменений с подсказкой по восстановлению. Кнопки редактора плана и поведение стен нулевой толщины не менялись (#282).

  • Во время рисования цепочки стен осевая линия и узлы остаются видимыми на уже поставленных сегментах. Разметка цепочки теперь рисуется поверх кладки стен (и под снап-оверлеем), поэтому каждый клик больше не прячет жёлтую ось под только что записанным телом стены (#307).

v1.67.0-rc.3 — 2026-08-25

  • Стыки стен больше не оставляют белых клиньев и зазубрин. Узел, где сходятся три и больше стен, теперь достраивается угловыми веерами и точными полосами своих лучей: узел смыкается полным mitre, как обычное пересечение стен на чертеже, — прежние фаски на стыках ушли. Инвариант «дыр нет» проверяется автоматически на сете из 16 крупноплановых сцен стыков и на плане из исходного сообщения (#302).
  • Во всех инструментах редактора Плана теперь отображается один и тот же полный набор осевых линий и узлов стен. При переходе из «Стены» в «Толщина» оси комнат больше не исчезают, а подсказки и предпросмотр активного инструмента остаются независимыми (#304).
  • Повторный импорт уже импортированного пространства больше не наращивает служебные префиксы внутренних ID. Предпросмотр и применение теперь используют один и тот же неизменяемый кандидат, безопасно восстанавливают единственные доказанные ссылки на прошлые копии и сохраняют неоднозначные ссылки без догадок или удаления; подробности доступны прямо в диалоге импорта (#265).
  • Инструмент толщины стен теперь подсвечивает реальную стену по её фактической физической ширине, не раздувая тонкие стены из-за размера клетки плана. Стены без толщины сохраняют видимую, независимую от масштаба подсветку, а широкая зона попадания указателя не изменилась (#303).
  • Контактные датчики и замки в свойствах проёма теперь можно искать по имени или полному entity_id. Селектор сохраняет приоритет дверных и оконных сущностей и показывает идентификатор рядом с каждым результатом (#301).

v1.67.0-rc.2 — 2026-08-25

  • Оси и исходные узлы скрытых независимых стен и сохранённых цепочек теперь видны поверх всей кладки во всех инструментах Плана. «Оптимизировать планы» умеет поглощать каждый точно покрытый участок одной или несколькими соседними стенами комнат, сохраняет недоказанный остаток вместе с его проёмами и удаляет цепочку только при полной избыточности. Это устраняет реальные невидимые блокеры Resize, не уменьшая толщину стен и не удаляя незавершённую работу. Сервер независимо доказывает всю удаляемую ось, включая стены без проёмов, а отчёт Optimize отдельно называет избыточные сохранённые цепочки (#296).
  • Resize больше не сдвигает пропорционально концы записей толщины соседних стен. Fixed-topology перенос сохраняет нетронутые записи, оставляет новые концы на сетке и реальных границах стены, а неоднозначный результат отклоняет до того, как он повредит другую стену (#298).
  • Resize теперь подписывает и подсвечивает только две измеряемые боковые стены, не показывает лишнюю длину на перемещаемой стене и ставит живую площадь каждой затронутой комнаты с её стороны. Для общих и узких комнат обе площади остаются видимыми с выносными линиями и не перекрывают друг друга или кнопку настроек комнаты (#300).
  • «Оптимизировать планы» и удаление комнаты больше не склеивают одинаковую толщину через границу общей и наружной стены или между разными парами комнат. Профиль стены сохраняет каждую физическую роль до её точной границы, поэтому одна запись больше не меняет смысл посередине своего участка (#299).
  • При рисовании стен Esc теперь завершает все принятые отрезки как независимые стены и отцепляется от последней точки, не удаляя геометрию и не покидая инструмент. Следующий клик начинает новую цепочку, а Ctrl/Cmd+Z по-прежнему удаляет последнюю точку и отрезок (#294).

v1.67.0-rc.1 — 2026-08-24

  • Проверенный кандидат beta.10 переопубликован с RC-идентификатором, чтобы HACS корректно видел его после beta.9; код приложения и поведение для пользователя не изменились.

v1.67.0-beta.10 — 2026-08-24

  • Доступность Resize на реальных планах теперь защищена точным аудитом каждой стены через production safety-resolver. Отключённые ручки понятнее объясняют реальное геометрическое ограничение; click/tap, Enter и Space показывают одну и ту же причину, а для перекрывающей отдельной перегородки, чернового контура или колонны явно предлагается безопасное действие — удалить или переместить объект (#292).
  • Активная ручка Resize теперь действительно следует за указателем на проблемной планировке второго этажа, а не остаётся неподвижной. Жест считает смещение от точки нажатия, сохраняет одну непрерывную запись толщины боковой стены, продолжает работать за пределами ручки благодаря pointer capture и останавливается на последнем отображаемом preview с явным сообщением вместо молчаливого бездействия. Undo остаётся доступным после подтверждения записи, в том числе для старого плана, который storage-барьер ремонтирует при сохранении (#293).
  • Все сохраняемые координаты плана теперь приводятся к точному общему узлу сетки 1/240, если отличаются от него только невидимым хвостом вычислений. Авторская off-grid/диагональная геометрия не сдвигается. «Оптимизировать планы» отдельно показывает число очищенных значений, максимальный субмиллиметровый сдвиг и только затронутые этажи, а обычные записи config/layout не дают шуму вернуться (#291).
  • Resize теперь до начала жеста проверяет обе боковые стены. Движение упирается в точный узел сетки, где стена перестала бы быть общей или стала бы общей, а жест без безопасного направления отключается. Поэтому общая толщина 20 см больше не растягивается на новый наружный участок (#289).
  • Короткий луч в многостенном узле больше не позволяет локальной маске фаски вырезать общую стену, примыкающую к его дальнему концу. Четыре разрыва по 45 шагов на реальном плане второго этажа закрыты во всех потребителях геометрии стен без удлинения короткого луча и без изменения сохранённого плана (#288).
  • Инструмент «Стены» теперь сохраняет визуально горизонтальный или вертикальный отрезок строго по оси и не создаёт незаметный уклон в один шаг. Оптимизировать планы может явно выпрямить такой дефект в старом плане: общая стена считается один раз, максимальный сдвиг показывается до подтверждения, настоящие диагонали сохраняются, а Cancel и одноуровневый Undo делают операцию обратимой (#290).

v1.67.0-beta.9 — 2026-08-24

  • «Оптимизировать планы» теперь безопасно убирает точные лишние перегородки поверх внешних стен комнат, включая неизменное перепривязывание размещённых на них окон. После этого «Изменить размер» действительно двигает доступную общую стену; ручка без единого допустимого шага больше не выглядит активной и объясняет причину блокировки (#281).
  • Backend теперь принимает доказанное преобразование совпадающей перегородки из Optimize: её проём сохраняется на той же общей стене и корректно проходит Apply/reload/Undo. Произвольное снятие host обычной записью или поддельным candidate по-прежнему отклоняется (#280).
  • Почти перпендикулярный T-стык теперь сохраняет всю реальную кладку при небольшом допустимом уклоне оси. Два белых клина исчезают во всех режимах, сохранённые координаты не выпрямляются, а явно диагональная фаска остаётся ограниченной (#279).

v1.67.0-beta.8 — 2026-08-24

  • Локальный сбой объединения стен больше не скрывает кладку всего пространства. Валидные компоненты стен одинаково остаются видимыми в Plan, View, Static, скрытой изометрии и световых барьерах, а любое изменение физической геометрии проверяется до истории и записи. Небезопасное изменение отменяется с явным сообщением; настройки, не меняющие геометрию, остаются доступны для восстановления и экспорта (#278).
  • «Изменить размер» теперь двигает только доказуемо безопасную горизонтальную или вертикальную стену комнаты. Точная общая стена может изменить размеры не более двух комнат и упирается в первый угол, косяк проёма, третью комнату или другое изменение топологии; частичные, наклонные и неоднозначные стены остаются видимыми, но объясняют причину блокировки. Preview и сохранение используют один результат с неизменной топологией, поэтому ресайз больше не разрезает записи толщины, не оставляет фрагменты стен и не заставляет кладку пространства исчезнуть. Если записи толщины или виртуальных отрезков нельзя перенести без потерь, стена видимо останавливается в последней безопасной точке (#277).
  • «Оптимизировать планы» теперь исправляет точную лишнюю перегородку, нарисованную поверх одной сплошной общей стены комнат. Её дверь, окно или ворота перепривязываются к стене без сдвига и потери датчиков, сохраняется более широкое из двух соосных тел, а «Граница» и «Толщина» затем работают с единственной канонической стеной. Частичные и неоднозначные совпадения не меняются (#276).

v1.67.0-beta.7 — 2026-08-24

  • В перпендикулярных T/X-стыках теперь сохраняется полная конечная ширина каждой участвующей стены, в том числе у соседних стыков с пересекающимися окнами обработки. В Plan, View, Static, скрытой изометрии, подложке/поле и световых барьерах больше нет соединённых с фоном белых уголков, видимой потери толщины и крупной выемки при смешанной толщине. «Оптимизировать планы» может корректно остаться no-op: валидные сохранённые оси и толщины не переписываются (#275).

v1.67.0-beta.6 — 2026-08-24

  • Беспроводной контроллер теперь одинаково показывает доступность и работу на плане и в preview диалога устройства, даже если отдельно удалённый маркер цели отфильтровывает настроенный свет из runtime-реестра. Живые диагностические сущности battery/LQI/update по-прежнему подтверждают связь с контроллером, а жёлтым его делает только активная управляемая цель (#274).
  • «Оптимизировать планы» теперь удаляет микроскопическую ступень толщины рядом с T-стыком, если короткий фрагмент ограничен двумя участками одинаковой толщины одной прямой стены. T-узел и перпендикулярная стена остаются на месте; фрагменты между двумя топологическими узлами или на границе проёма по-прежнему защищены. Preview, Apply, перезагрузка и служебная отмена используют один канонический результат (#273).
  • Стыки трёх и более стен больше не продолжают короткое плечо на расстояние до 8× максимальной полутолщины. Plan, View, Static, скрытая изометрия, пол, тени и световые барьеры теперь заканчиваются в реальной сохранённой точке — в том числе когда короткое толстое плечо сонаправлено более длинной тонкой стене (#271).
  • В стыках нескольких стен больше не остаются замкнутые белые треугольные дыры, когда допустимая ограниченная фаска соприкасалась с внешней пустотой лишь одной математической точкой. У фаски появился конечный локальный выход в окружающую комнату/фон, но предел 1.25 × H, осевые линии ветвей и защита от длинных mitre-зубов не изменились. Геометрические, браузерные и golden- инвентари теперь требуют ноль замкнутых дыр в Plan, View, kiosk, Static, скрытой изометрии и световых/солнечных барьерах (#272).

v1.67.0-beta.5 — 2026-08-23

  • После удаления целого HA-устройства с плана теперь можно отдельно вернуть любую его активную сущность через Добавить → Показывать сущности. Выбранная сущность появляется как обычный живой маркер на свежей позиции, а родительское устройство и невыбранные siblings остаются удалёнными; само устройство по-прежнему доступно для осознанного последующего возврата (#262).
  • В толстых T-стыках больше не появляются белые треугольные щели с наружной стороны, когда сходятся три и более стены разной толщины. Ограниченная фаска теперь сохраняет допустимую кладку и подложку до одного предела по обе стороны контура комнаты — одинаково в Plan, View, kiosk, Static, скрытой изометрии и световых/солнечных барьерах — и не возвращает прежний длинный mitre-зуб (#261).
  • После перезаписи compatibility-key командой «Оптимизировать планы» толщина стены теперь остаётся согласованной у всех структурных потребителей. Идентификатор стены стабилен, когда точный узел сетки 1/240 сохраняется с девятью знаками, а уже затронутые записи читаются по точной паре концов без расширения старого поиска по середине. Optimize канонически исправляет сохранённый ключ и после перезагрузки остаётся no-op (#258).

v1.67.0-beta.4 — 2026-08-23

  • Изменение размера комнаты больше не превращает толстую стену в тонкую осевую линию, когда перемещаемое ребро покрывает только часть более длинной стены. Покрытая часть теперь сохраняет толщину и следует за комнатой, нетронутое продолжение остаётся на месте, а проём на перемещаемой части переносится в той же операции Undo/Redo (#253).
  • «Оптимизировать планы» теперь удаляет сохранённую позицию, только когда доказано, что её подписи комнаты, устройства или групповой метки больше не существует. Предпросмотр описывает очистку понятными категориями, прячет технические id в свёрнутые «Подробности» и сохраняет живых либо непроверенных владельцев. Отдельная явная опция позволяет включить старые позиции живых объектов в основной Apply; Cancel ничего не записывает, а служебная отмена восстанавливает прежнюю раскладку целиком. Это уточняет обещание v1.59 сохранять все непривязанные записи: временно недоступные и непроверенные объекты по-прежнему защищены, а доказанно забытые позиции больше не накапливаются (#252).
  • В узлах, где сходятся три и более физические стены, длинные выступающие клинья штриховки теперь заменяются ограниченной прямой фаской, в том числе при разной толщине стен. Сам узел остаётся заполненным и одинаковым в Plan, View, kiosk, Static, скрытой изометрии и световых/теневых барьерах; обычные углы из двух стен сохраняют прежнюю форму. Чистая заливка комнаты использует ту же ограниченную геометрию стен, поэтому сильно различающаяся толщина в узле не выводит пол за контур здания и не оставляет пропущенный участок пола (#249).
  • Беспроводной выключатель или другой контроллер больше не выглядит недоступным только из-за недоступности настроенной лампы или группы света. Полупрозрачность теперь определяется собственными живыми сущностями контроллера, включая батарею и Zigbee LQI, а цели по-прежнему определяют жёлтое рабочее состояние. Если ни одна настроенная цель недоступна, нажатие теперь называет её и объясняет, что действие не выполнено (#251).

v1.67.0-beta.3 — 2026-08-23

  • Символы дверей, окон и ворот теперь остаются точно на осевой линии стены при обоих направлениях открывания. Настройка «Открывается в другую сторону» только зеркалит геометрию двери/окна либо меняет знак 10° поворота ворот и больше не сдвигает уже сохранённую перевёрнутую дверь или окно к грани стены. Косяки и вырез стены по-прежнему проходят через полную физическую глубину во Flat, Static и скрытой изометрии (#250).

  • Повторный запуск «Оптимизировать планы» сразу после успешной оптимизации теперь честно сообщает, что исправлять нечего, в том числе после события обновления backend или перезагрузки страницы. Optimize сравнивает и оставляет то же девятизнаковое представление геометрии, которое сохраняет интеграция, поэтому двоичный шаг сетки 1/240 больше не возвращается как заново устранённый шум координат (#248).

  • «Оптимизировать планы» теперь восстанавливает ссылки устройств, оставшиеся после удаления или независимого импорта пространства. Для точной импортной копии сохраняются позиции; в остальных случаях активное устройство теряет только отсутствующее размещение и возвращается через свою Area HA либо в первое пространство. Предпросмотр отдельно показывает исправленные и неразрешённые ссылки. Пространство с активными устройствами удалить нельзя, пока остаётся другое пространство; единственное оставшееся можно удалить без потери привязок и настроек маркеров. Импорт пространства исправляет совпавшие ссылки в текущем плане, а редактор карточки предупреждает, если default_floor указывает на отсутствующее пространство (#244).

v1.67.0-beta.2 — 2026-08-22

  • Символы дверей, окон и ворот теперь по умолчанию находятся на центральной оси толщины стен комнат и независимых стен — одинаково в предпросмотре, плоском виде, Static и скрытой изометрии. Существующие перевёрнутые двери/окна сохраняют явное выравнивание к грани; ворота остаются по центру, а флаг без повторной зеркальной инверсии меняет направление их 10° открытия на общей стене комнат и независимой стене. Косяки по-прежнему проходят через полную глубину стены (#242).

  • Вкладки пространств снова можно переставлять реальным перетаскиванием мышью в редакторе. Захват указателя браузером больше не удерживает цель на исходной вкладке; разделитель показывает точную сторону вставки, а отпускание мыши вне панели вкладок не меняет сохранённый порядок (#243).

  • Декоративные линии, фигуры, текст и мебель теперь рисуются поверх непрозрачной заливки комнат, hover-подсветки, заливки проёмов и тёмной основы Glow, поэтому пол больше не скрывает декор. Живой свет и солнечные лучи, стены, символы проёмов, устройства и названия комнат по-прежнему остаются над декором (#231).

v1.67.0-beta.1 — 2026-08-22

  • «Оптимизировать планы» теперь проверяет точный кандидат из предпросмотра теми же построителями стен, проёмов, перегородок, колонн и пола, которыми пользуется карточка. Если геометрию хотя бы одного пространства нельзя безопасно построить, диалог называет до трёх проблемных пространств, объясняет, как сообщить об ошибке, и оставляет только «Отмена»: конфигурация, раскладка, ревизии и одношаговая отмена не меняются (#199).

  • Каждая запись конфигурации и раскладки устройств теперь приводит геометрию к девяти десятичным знакам, не привязывая её к сетке. Невидимые floating-point-хвосты удаляются до того, как смогут сломать общие стены, объединение комнат или Glow; тот же инвариант действует для импорта, восстановления служебных операций и серверной отмены. Повторное сохранение уже канонических данных больше не создаёт ревизию и не съедает одношаговую отмену. Старый план очищается при следующей записи либо сразу через «Оптимизировать планы» (#224).

  • Точность сетки больше не меняет внешний вид одного и того же физического плана. Контуры комнат и стен, проёмы и их зоны попадания, подсказки редактора, статическая карточка и скрытая изометрия сохраняют эталонный вид cell_cm: 5 при любом допустимом размере клетки; физические объекты и экранные элементы повторно не масштабируются. Новое метрическое пространство начинается с 1 см на клетку, а в имперской системе HA — с 1 дюйма и поле показывает дюймы. Существующие значения не мигрируют и не округляются при обычном открытии и сохранении настроек (#239).

  • При размещении двери, окна, ворот или открытого проёма Редактор плана теперь показывает полезные расстояния от обоих косяков до физических внутренних концов стены — с тонкими размерными линиями и засечками. На общей стене видны четыре размера, по два для каждой комнаты; на независимой стене размер идёт до ближайшей грани примыкающей стены, а если её нет — до собственного торца (#238).

  • Рисование плана теперь останавливается там, где нельзя безопасно угадать геометрию: активная стена показывает ось и конечный узел, визуально неразличимые узлы просят увеличить масштаб, а Shift принимает только точную конечную точку или пересечение на луче с шагом 45°. Клик внутри уже готового пустого контура стен позволяет создать комнату; единственный однозначный разрыв до 2 см исправляется только вместе с подтверждённой комнатой. Более широкий неоднозначный разрыв остаётся обычным рисованием, а стена с явно привязанным проёмом repair-механикой не сдвигается. При удалении комнаты теперь можно явно оставить её физические стены либо удалить их; общие стены и их проёмы сохраняются (#228).

  • При изменении размера комнаты показываются внутренние размеры — расстояние от стены до стены, то самое, которое даёт рулетка: пролёт 300 см между стенами 15 см читается как 285 см. Площадь и раньше считалась по полу, поэтому в одном облачке подписей жили две разные конвенции и ни одно число нельзя было ни с чем сверить. Проём и сторона, открытая в соседнюю комнату, сохраняют полную длину: измерять там не от чего. Площадь по-прежнему вычитает колонны и перегородки, поэтому произведение длин может с ней не совпасть — это мебель в комнате, а не смена линейки (#233).

  • Цепочка стен сохраняет ту толщину, которой её нарисовали. Отрезок, толщина которого не была записана — это случалось, если поле толщины правили между отрезками, — показывался с нарисованной толщиной, а сохранялся с 15 см, и расхождение обнаруживалось позже: инструмент «Толщина» подсвечивал значение, которого никто не выбирал. Теперь превью, оба пути записи и подсветка читают один резолвер: старый пропуск наследует толщину предыдущего отрезка, а live rubber-band использует текущее значение поля и больше не меняет толщину при клике (#234).

  • Плотность штриховки стен больше не зависит от масштаба пространства. Раньше одна и та же стена 15 см выглядела на планах с разным cell_cm по-разному — от плотной сетки полос до почти пустой полосы, разброс достигал 25 раз. Теперь шаг штриховки — это расстояние на плане (9.6 см при любом масштабе сетки), то есть ровно сегодняшний вид при cell_cm: 5, а стена вдвое толще получает вдвое больше полос, как на строительном чертеже. Заодно штриховка перестала меняться при зуме (#230).

  • Прямая стена, нарисованная в несколько кликов, теперь хранится одной перегородкой: швы между отрезками одинаковой толщины и направления срастаются сразу при завершении цепочки. Узел остаётся там, где есть за что держаться — примыкание третьей стены, стена комнаты, колонна или конец сохранённого черновика. Старым планам швы убирает «Оптимизировать планы» отдельной строкой предпросмотра; двери и окна остаются на своих местах (#229).

  • Порядок вкладок пространств теперь можно менять: в режиме редактора возьмите вкладку мышью и перетащите на нужное место. Порядок сохраняется, свайп и карусель следуют ему. Устройства при этом остаются на своих местах (#220).

  • «Оптимизировать планы» теперь устраняет микроскопический floating-point шум сохранённых координат сетки, даже если визуально ничего не сдвигается. В предпросмотре отдельно показаны обновлённые пространства и очищенные координаты, а повторный запуск становится точным no-op (#223).

  • Размещение отдельной сущности Home Assistant больше не оставляет рядом дублирующий автоматический маркер всего родительского устройства. В auto-marker теперь входят только оставшиеся активные видимые сущности, а при пустом остатке он исчезает; две явно размещённые привязки entity/device по-прежнему могут сосуществовать (#226).

  • Исправлено: резервная копия с прикреплёнными PDF отказывалась импортироваться обратно с сообщением «Резервная копия содержит некорректные или несогласованные ссылки на файлы». Ссылки на вложения с кэш-бастером (…/files/маркер/doc.pdf?v=1783170649) теперь разбираются по пути — как URL, а не как строка (#225).

v1.66.0 — 2026-08-20

  • Текстовые маркеры устройств снова получают капсульную внешнюю обводку вместо овальной.
  • Glow больше не исчезает во всём пространстве из-за floating-point шума или одного некорректного контура комнаты.
  • Закрытые замки дверей и ворот теперь зелёные, открытые — красные; иконки на оранжевой подложке согласованы со светлой и тёмной темами.
  • Мелкие исправления и улучшения.

v1.66.0-beta.1 — 2026-08-20

  • Замки дверей и ворот теперь зелёные в закрытом состоянии и красные в открытом — и на компактном значке проёма, и на обычном маркере устройства. Все иконки на оранжевой подложке устройства теперь белые в светлой теме и тёмные в тёмной (#219).
  • Исправлено исчезновение Glow во всём пространстве из-за безвредных хвостов вычислений с плавающей точкой или одного некорректного контура комнаты. Входные данные для геометрических операций теперь стабилизируются только при отрисовке, а остаточный сбой изолируется в проблемной комнате и не выпускает свет за пределы корректного пола (#218).
  • Исправлена внешняя обводка текстовых маркеров устройств: она снова повторяет капсульную форму значения и дизайнерского макета вместо овала (#217).

v1.65.0-beta.9 — 2026-08-20

  • Core маркера устройства теперь остаётся соосным внешнему shell при дробных размерах и распространённых DPR. Текущий размер сохранён без позднего коэффициента 0.9, а MDI-глиф увеличен на 10%. Вся видимая капсула со значением получает единые hover и выбранное действие; компактные значки замков проёмов соответствуют светлым/тёмным Lock/Unlock макетам; цвет LQI маркера снова плавно меняется от красного к зелёному (#213).

v1.65.0 — 2026-08-20

  • Редактор Плана получил единый непрерывный инструмент «Стены», открытые проходы и проёмы с привязками Home Assistant в независимых стенах. Точная толщина, разрывы направляющих, стыки и геометрия комнат сохраняются в предпросмотре, оптимизации, импорте и всех режимах отображения.
  • Размещение устройств и управление ими стали предсказуемее: точная сущность переключения, привязки проёмов без Entity Registry, связанные виртуальные источники света, комнаты без зон HA и явные состояния работы бытовой техники используют единые живые источники Home Assistant.
  • Пространство теперь можно экспортировать как шаблон «Только планировка» или закрепить экземпляр карточки за одним этажом. Начальные настройки нового пространства, подписи комнат, влажность в подсказках и след робота остаются согласованными между поддерживаемыми режимами и редакторами.
  • Маркеры устройств используют новую светлую/тёмную дизайн-систему в плане, киоске, preview редактора и статической карточке: вся капсула интерактивна, touch-hover не залипает, состояния работы и недоступности, значки замков и плавная шкала LQI отображаются единообразно.
  • Мелкие исправления и улучшения.

v1.65.0-beta.8 — 2026-08-20

  • Маркеры устройств стали на 10% компактнее без сдвига сохранённого центра и без уменьшения области нажатия 44×44 px; широкий Text-маркер получил ровные отступы капсулы. Реальная отправка toggle/run-команды даёт плавный отклик уменьшением на 5% за 0,2 с с отдельным вариантом для reduced motion. Касание пальцем или пером больше не оставляет hover комнаты, маркера, Device preview и общих контролов «прилипшим», а настоящая мышь возвращает hover на гибридном устройстве без перезагрузки (#212).

v1.65.0-beta.7 — 2026-08-20

  • Экземпляр карточки теперь можно закрепить за одним пространством параметром floor: рекомендуется стабильный ID, а в YAML также доступен числовой индекс с нуля. Закреплённая карточка игнорирует общее последнее пространство, floor в URL, вкладки других пространств, свайп и автолистание киоска; неверное значение теперь показывает явную ошибку конфигурации вместо молчаливого открытия другого пространства. Для незакреплённых карточек default_floor сохраняет прежнее стартовое/fallback-поведение (#210).
  • Маркеры устройств теперь соответствуют исходным макетам из пакета дизайнера, а не увеличенной скруглённо-квадратной проекции из v1.65.0-beta.6. Core иконки стал круглым, MDI-глифы и соседние value-pill получили пропорции пакета, а светлые и тёмные состояния hover, active, lock, unlock, alert, selected, focus, virtual и unavailable сохраняют правильные shell, обводку и тень. План, киоск, preview редактора и статическая карточка пространства по-прежнему используют один renderer (#211).

v1.65.0-beta.6 — 2026-08-19

  • Маркеры устройств теперь используют единый дизайн shell/core из пакета дизайнера в светлой и тёмной теме, с отдельными состояниями фокуса, выбора, блокировки, разблокировки, работы, тревоги, виртуального и недоступного устройства. Текст и соседние значения находятся в одной подложке и больше не сокращаются многоточием; LQI маркера окрашивается красным при 0–40, жёлтым при 41–179 и зелёным при 180+. Пульсации получили новые тайминги и цвета, а явно сохранённые пользовательские настройки сохранили приоритет. Живой маркер робота-пылесоса использует те же цвета темы, обводку и тень. Интерактивный маркер также имеет область нажатия не меньше 44×44 px и по Enter/Space использует прежний click/confirmation path (#179).
  • Диалог нового пространства теперь показывает именно те значения, которые сохранит: для плана с изображением границы и названия изначально выключены, а при переходе к ручному плану оба переключателя видимо включаются. После изменения любого из них смена источника сохраняет всю выбранную пару; мастер этажей/зон следует тому же правилу (#204).
  • Если робот вернулся на базу, поставлен на паузу или ненадолго перешёл в другое доступное неподвижное состояние, при возобновлении движения на той же карте в течение 30 минут он продолжает прежний серверный след. Путь до мойки швабр и похожих визитов на станцию больше не теряется; смена карты или более долгая остановка по-прежнему начинает новую уборку (#205).
  • «Оптимизировать планы» теперь убирает изолированный участок толщины стены короче половины шага сетки, только если он строго расположен между двумя коллинеарными участками одинаковой толщины и на его концах нет узла комнаты или проёма. Торцевые участки, реальные топологические границы и неоднозначные перепады толщины по-прежнему сохраняются; предпросмотр, применение и серверная отмена работают прежним потоком (#198).

v1.65.0-beta.5 — 2026-08-19

  • Выключение «Показывать названия» теперь полностью убирает названия комнат из Просмотра, киоска, статической карточки и скрытой изометрии, а редактор Плана по-прежнему временно показывает существующую карточку для настройки позиции. Повторное включение восстанавливает сохранённую компоновку. Несовместимое изменение styling-hook: публичный резервный SVG-хук text.rlabel / .rlabel удалён; включённые названия используют [data-hp="room-label"].roomlabel (#203).
  • При закрытии виртуальной границы теперь наследуется реальная толщина соседней стены, даже если другая комната разделила сохранённую стену на несколько атомарных участков. Поэтому на стене 20/22 см больше не появляется случайная ступень 15 см, а частичные участки толщины по-прежнему не распространяются дальше своих границ (#201).
  • Подписи комнат в редакторе Плана теперь сохраняют ту же геометрию имени, иконки зоны Home Assistant и строк состояний, что и в Просмотре, поэтому при переключении режимов аккуратно выставленная подпись больше не сдвигается. Иконка по-прежнему открывает зону только в Просмотре, а в Плане остаётся частью области перетаскивания подписи (#200).
  • Новые и явно редактируемые проёмы в независимых стенах теперь оставляют у каждого торца физический откос не меньше половины толщины этой стены. Размещение, перетаскивание, перепривязка и изменение длины используют одну границу и объясняют отказ, а существующие проёмы у торца и полные резервные копии остаются без изменений (#186).
  • У крестика в активной вкладке редактора теперь удобная зона нажатия 24 × 24 px при прежнем компактном значке и неизменной компоновке шапки. Близкий промах больше не попадает в намеренно неактивную команду самой вкладки (#195).

v1.65.0-beta.4 — 2026-08-19

  • В подсказке комнаты при наведении теперь рядом с температурой показывается средняя влажность. Значение берётся из настроенного источника влажности или среднего по зоне Home Assistant и скрывается, если корректных данных нет (#196).

  • Численно вырожденный стык виртуальных стен больше не может скрыть всю толстую кладку после «Оптимизировать планы». Вычисляемые заплатки стыков стабилизируются с точностью значительно меньше геометрического допуска и обрабатываются независимо, а общая кладка, пол, подложка и световые барьеры остаются доступны в Плане, Просмотре, киоске, статической карточке и скрытой изометрии (#197).

  • Все оставшиеся настройки цвета теперь используют одну палитру House Plan: общие цвета света, температуры, LQI, Glow и стен, фон плана и пространства, цвет комнат и пульсации активности устройства. Существующая прозрачность находится в той же поверхности, а поля только с цветом и поведение «По умолчанию / Наследуется» сохраняют прежнюю модель данных. На узких экранах цвет и размер пульсации находятся в отдельных строках, поэтому обе подписи остаются читаемыми (#180).

  • Перед размещением открытого проёма теперь виден точный будущий разрыв стены: полупрозрачный сегмент цвета стены показывает реальную длину и глубину, а две оранжевые засечки отмечают его границы. После сохранения проём по-прежнему остаётся физическим разрывом без отдельного символа (#193).

  • Палитра House Plan теперь показывает полный спектр прямо на шкале «Оттенок», поэтому нужную группу цветов видно ещё до движения ползунка. Значения и управление мышью, касанием и клавиатурой не изменились, а контрастный контур сохраняет видимость ползунка на любом оттенке (#192).

v1.65.0-beta.3 — 2026-08-19

  • Выбор цвета в редакторах теперь сразу открывает единую палитру House Plan с насыщенностью, яркостью, оттенком, точным HEX и прозрачностью. Вложенный системный диалог браузера больше не нужен, а сохранённый формат цветов комнат, пространств, декора и Glow не меняется (#57).
  • Подтверждение действия «Переключить состояние» теперь показывает текущее состояние и точный ожидаемый результат. Для группы отдельно видны число включённых целей и недоступные цели; перед выполнением состояние по-прежнему вычисляется заново, а смена набора целей отменяет команду (#103).
  • Дверь, окно, ворота и открытый проём теперь можно поставить в законченный независимый отрезок «Стен». Проём прорезает его на всю глубину, движется вместе со своей стеной, сохраняет обычные состояния и действия Home Assistant, а при удалении стены удаляется только после отдельного подтверждения. Проём больше не разрывает структурную ось стены: замкнутый контур предлагает создать комнату, даже если в одной из стен уже есть проём. Импорт резервной копии этажа сохраняет привязку проёма к стене, а визуальная направляющая привязки по-прежнему показывает физический разрыв в месте проёма (#132, #185).
  • Датчики и замки дверей, окон и ворот теперь работают и для живых YAML-сущностей без unique_id, у которых поэтому нет строки в Entity Registry. Список выбора, анимация в Просмотре, значок замка и карточка проёма используют одну точную ссылку; отключённые, потерянные и отсутствующие сущности по-прежнему недоступны (#117).
  • Glow теперь остаётся непрозрачным при сбое построения объединённой геометрии стен: источник света внутри окна или внешнего проёма в независимой стене подавляется, а корректный внутренний проход по-прежнему пропускает свет (#187).
  • Визуальная направляющая привязки в редакторе Плана теперь сохраняет реальный разрыв в проёме независимого отрезка «Стены»: ховер и клик внутри двери, окна, ворот или прохода больше не привязываются к отсутствующей кладке (#189).
  • Мелкие исправления и улучшения.

v1.65.0-beta.2 — 2026-08-18

  • У составных устройств Home Assistant с несколькими сущностями света/реле теперь можно выбрать точную сущность для действия «Переключить состояние». Диалог сразу показывает новую цель, сохраняет пропавший выбор с предупреждением и может включить выбранную собственную сущность в явно настроенную группу без изменения старых планов (#178).
  • Виртуальный источник с ролью «Всегда», связанный с реальным реле, теперь следует состоянию реле вместо отдельного ручного состояния. Нажатие на любой из двух маркеров управляет реальным устройством Home Assistant, а Glow, заливка «Свет», статистика комнаты и оба маркера обновляются вместе; после снятия последней связи возвращается сохранённое ручное состояние (#174).
  • В редакторе Плана теперь один инструмент «Стены» вместо отдельных «Контура комнаты» и «Перегородки». Незамкнутая цепочка становится обычными стенами при смене инструмента, редактора или этажа; замыкание через конечные, T- и X-точки предлагает все новые комнаты по возрастанию площади, а Create/«Оставить стенами»/Cancel применяются атомарно. Ctrl/Cmd+клик не добавляет лишнюю точку, пока для замыкания ещё недостаточно рёбер (#173).
  • Коллинеарные внешние стены теперь меняют толщину точно в сохранённой точке перехода. После разделения комнаты стена 10 см сохраняет полную толщину до перегородки и не продолжается по соседнему фасаду с нулевой толщиной; План, View, статическая и скрытая изометрическая геометрия, а также свет используют один исправленный контур (#150).
  • Нулевой разделитель после «Разделить» больше не получает треугольный клин от примыкающей толстой стены, если разрез нарисован под небольшим углом. Разделитель остаётся визуально открытым по всей длине, а настоящая стена заканчивается локальным торцом одинаково в Плане, View, Static, скрытой изометрии и световой геометрии (#172).
  • Устройства и отдельные сущности Home Assistant, вручную назначенные комнате без HA-зоны, теперь остаются именно в ней, а не возвращаются в исходную зону из реестра. Уже сохранённые назначения восстанавливаются автоматически, а смена комнаты внутри одного пространства не двигает маркер (#170).
  • В редакторе плана появился «Открытый проём» — архитектурный проём шириной 90 см по умолчанию, без створки, дуги и привязки Home Assistant. Он вырезает кладку и продолжает пол в полном и Static-видах, пропускает свет между комнатами и остаётся полноразмерным разрывом без панелей в скрытой изометрии (#157).

v1.65.0-beta.1 — 2026-08-17

  • Экспорт текущего пространства теперь может создать JSON-шаблон «Только планировка» с комнатами, стенами, проёмами, декором, подложкой, позициями и масштабом подписей комнат, но без устройств и структурных привязок Home Assistant. Предпросмотр помечает такой файл до добавления новым пространством (#167).
  • Составная техника, например стиральная машина, теперь использует явный Status/Run state/Job state Home Assistant и получает жёлтую подложку во время активного цикла. Одного Power=on по-прежнему недостаточно, Power=off подавляет устаревший активный статус, а обычные одиночные реле сохраняют прежнее поведение (#164).
  • Оконные солнечные лучи теперь правильно складывают азимут Home Assistant с буквальным направлением стрелки N и освещают физически верную сторону плана при повёрнутом севере. Если раньше компас был выставлен зеркально для обхода ошибки, после обновления верните стрелку к реальному северу (#166).
  • Мелкие исправления и улучшения.

v1.64.0-beta.3 — 2026-08-14

  • Большие планы больше не пересчитывают неиспользуемое объединение физических стен при каждом переключении этажа, а цель привязки в Плане до первого клика обновляется без полной перерисовки карточки. Регрессии производительности релизной линии v1.64.0 устранены без изменения геометрии и поведения snap (#156).
  • Мелкие исправления и улучшения.

v1.64.0 — 2026-08-14

  • «Следует за Солнцем» теперь создаёт вокруг плана четырёхфазное окружение рассвета, дня, заката и ночи с движущимся мягким светом, сохраняя без изменений живые заливки плана, Glow, устройства, декор, пылесос, hover и оконные лучи (#146).
  • При рисовании «Контура комнаты» и «Перегородки» теперь видны точные узлы и осевые линии привязки стен; допустимый контур замыкается по существующей стене, а толстые угловые и T-стыки выглядят бесшовно в плоской, статичной и скрытой изометрической геометрии (#137, #138, #141).
  • Read-only карточки View и киоска теперь сразу показывают полный первый кадр, даже если Home Assistant запрещает подписки на события live-sync (#131).
  • Виртуальные маркеры, настроенные как постоянно активный источник света, теперь можно переключать без helper Home Assistant; общее состояние сохраняется и согласовано между полной и статичной карточками (#107).
  • Диалоги свойств проёма и физического объекта сохраняют кнопки футера в одной строке на настольном экране и адаптивный перенос на узком (#140).
  • Большие планы больше не пересчитывают неиспользуемое объединение физических стен при каждом переключении этажа, а цель привязки в Плане до первого клика обновляется без полной перерисовки карточки (#156).
  • Мелкие исправления и улучшения.

v1.64.0-beta.2 — 2026-08-14

  • «Следует за Солнцем» теперь создаёт вокруг плана четырёхфазное окружение: рассвет, день, закат и ночь, с движущимся мягким светом и полупрозрачным внешним контуром. Полный снимок sun.sun используется при наличии, иначе включается локальное время браузера; компас фону больше не нужен. Сам план, Glow, заливки, устройства, декор, пылесос, hover и оконные лучи между фазами не меняются. Полный View, киоск и статическая карточка показывают один результат. Новые установки и пространства включают режим явно, а однократная миграция и перенос full/space сохраняют прежний выбор фона существующих планов. Существующий индикатор масштаба с процентами остаётся видимым поверх плана при увеличении (#146).
  • Диалоги свойств проёма и физического объекта теперь используют существующую настольную ширину 500 px: «Удалить», «Отмена» и «Сохранить» помещаются в одну строку с запасом для локализации, а на узком экране сохраняется адаптивный перенос (#140).
  • Новый контур комнаты, начатый и законченный на одном непрерывном сплошном участке стены существующей комнаты, теперь замыкается автоматически и открывает обычный диалог комнаты. Одинаково работают конечные узлы и точки T-соединения на линии; проёмы, намеренные разрывы, разные грани и второй клик без достаточного числа сторон быстрым замыканием не считаются (#138).
  • Соединённые отрезки «Контура комнаты» и «Перегородки» теперь сразу, включая активный rubber-band, образуют одну бесшовную толстую стену. Прямые и косые углы получают ограниченный mitre/bevel, T-соединение не показывает торец, каждый отрезок сохраняет свою толщину, а hover толщины одиночного сегмента и свободные концы остаются видимыми и плоскими в Plan, View, статичной карточке, скрытой изометрии, чистой площади и световой геометрии (#141).
  • При рисовании инструментами «Контур комнаты» и «Перегородка» поверх существующих стен теперь видны их осевые линии и точные конечные узлы. Увеличенная точка заранее показывает соединение с концом стены или создание T-соединения на её линии; разрывы дверей, окон, ворот и намеренно открытых участков исключены (#137).
  • Мелкие исправления и улучшения.

v1.64.0-beta.1 — 2026-08-14

  • Read-only карточки в режимах View и киоска теперь сразу показывают полный первый кадр, даже если Home Assistant запрещает подписки на события live-sync. Выбранное пространство, заливки комнат, декор, стены, Glow и значения устройств больше не требуют нажатия на уже активную вкладку пространства (#131).
  • Виртуальные маркеры с сочетанием Источник света → Всегда и Переключить состояние теперь можно включать и выключать без helper/entity Home Assistant. Общее состояние переживает перезагрузку страницы и HA и одинаково отображается в Glow, свете комнаты, полной и статической карточках, в том числе при сохранённых исходящих связях управления (#107).
  • Мелкие исправления и улучшения.

v1.63.0 — 2026-08-13

  • Сохранены явные привязки дверей, окон и ворот после удаления отдельного маркера датчика или замка; исправлено предусмотренное пустое состояние после удаления последнего пространства (#104, #111).
  • Split из существующего угла комнаты больше не деформирует наружный фасад, в том числе с толстым разделителем. Плоский, статичный и скрытый изометрический рендер используют одну сохранённую геометрию стен (#123).
  • Мелкие исправления и улучшения.

v1.63.0-beta.2 — 2026-08-13

  • Split из существующего угла комнаты больше не деформирует наружную стену и не вытягивает толстый внутренний разделитель сквозь фасад. Редактор плана, View, киоск, статичная карточка, скрытая изометрия и световые препятствия используют одну сохранённую наружную геометрию, в том числе для уже сохранённых планов (#123).
  • Мелкие исправления и улучшения.

v1.63.0-beta.1 — 2026-08-13

  • Удаление самостоятельного маркера датчика или замка больше не разрывает его явную привязку к двери, окну или воротам: сущность остаётся доступной в настройках проёма и продолжает показывать состояние, не возвращая маркер на план (#104).
  • Исправлено падение после удаления последнего пространства: предусмотренное пустое состояние остаётся рабочим, и из него можно добавить новое пространство (#111).
  • Мелкие исправления и улучшения.

v1.62.0 — 2026-08-13

  • Добавлены переносимые резервные копии всего плана и отдельных пространств с серверной проверкой, безопасным импортом и одношаговой отменой, а также переиспользуемые контекстные подсказки для сложных настроек (#50, #68).
  • Добавлены пассивные маркеры света, явный выбор ведущей сущности и управляемые пользователем бейджи значений. Действия и отображение активности устройств унифицированы для плана, предпросмотра и статичных карточек (#84, #88, #90, #94, #98).
  • Переработано размещение проёмов: подменю «Окно / Дверь / Ворота» и полный предпросмотр символа на толстых стенах. Исправлены толщина примыкающих стен при разделении комнат, швы тоннелей проёмов и Glow для источников внутри стен и внешних проёмов (#75, #76, #81, #91, #92).
  • Добавлены согласованные переходы между просмотром и редакторами, восстановлены надёжные солнечные лучи из окон, усилены жизненный цикл редакторов, выбор состояния составных устройств, предпросмотры и регрессионные проверки (#93, #95, #101, #102).
  • Мелкие исправления и улучшения.

v1.62.0-rc.1 — 2026-08-13

  • Проверенный кандидат beta.10 переопубликован с RC-идентификатором, чтобы HACS корректно видел его после beta.9; код приложения и поведение для пользователя не изменились.

v1.62.0-beta.10 — 2026-08-13

  • По результатам ревью беты исправлены отображение и действия составных устройств: явно выбранный источник света теперь остаётся целью нажатия, основная сущность шторы сохраняет отображение шторы, а выбор состояния по реестру одинаков в полном плане, предпросмотре и статичной карточке. Усилены регрессии для разделения комнат, Glow, контекстных подсказок и предпросмотра проёмов.
  • Источник света внутри тела физической стены, тоннеля окна или внешнего дверного проёма/ворот намеренно не создаёт Glow; для появления света маркер нужно переместить на чистую площадь комнаты (#92).
  • Мелкие исправления и улучшения (#108).

v1.62.0-beta.9 — 2026-08-12

  • По результатам повторного код-ревью устранены расхождения между состоянием устройства и действием по нажатию: точная привязка больше не переключает соседнюю сущность, пассивное реле управляет своей ведущей сущностью, а вспомогательные cover- и humidity-сущности не перехватывают отображение составного устройства.
  • Усилено размещение проёмов: единые размеры по умолчанию, устойчивый кеш геометрии, корректная центральная привязка и более строгая визуальная проверка предпросмотра. Восстановлены публичные CSS-хуки активности и точки предпросмотра; улучшены доступность подсказок и внутренние проверки процесса.
  • Мелкие исправления и улучшения (#108).

v1.62.0-beta.8 — 2026-08-12

  • Переработано размещение проёмов в Редакторе плана. Кнопка «Проём» теперь открывает компактное подменю «Окно / Дверь / Ворота»; выбор типа включает размер 120 / 90 / 300 см и показывает поверх физической стены полный будущий символ с прозрачностью 50%. Наведение на толстые стены, выбор стены в сложном стыке, клик без предварительного наведения и серийное размещение теперь детерминированы, при этом сохранённая модель проёмов не менялась (#75, #76).
  • Бета усилена по результатам полного код-ревью: закрытие редактора и навигация больше не теряются во время перехода или при открытой контекстной панели; нажатия, состояние пассивных источников и бейджи значения используют одни и те же вычисленные источники на всех поверхностях; сохранён legacy-показ температуры и влажности; добавлены недостающие защиты и регрессии для подсказок, согласованного импорта/экспорта и геометрии разделённых стен. Мелкие исправления и внутренние улучшения (#50, #68, #84, #90, #91, #92, #94, #95, #98, #101).

v1.62.0-beta.7 — 2026-08-12

  • Исправлено первое открытие настроек устройства: поля «Отображение», «Комната» и «Ведущая сущность света» теперь сразу показывают фактически сохранённые значения, а не первый пункт списка. Предпросмотр и форма больше не могут сообщать пользователю разные настройки.
  • Добавлен общий контракт для нативных выпадающих списков и браузерные проверки повторного открытия устройства с непервыми сохранёнными вариантами. Новый селектор больше нельзя случайно реализовать прежним небезопасным способом.

v1.62.0-beta.6 — 2026-08-12

  • Исправлена оставшаяся причина невидимых солнечных лучей из окон в реальных установках Home Assistant. У системных/runtime-сущностей вроде sun.sun может быть актуальное состояние без строки в Entity Registry; House Plan теперь сохраняет такое состояние, продолжая исключать явно деактивированные сущности и устройства (#102).
  • Добавлен детерминированный визуальный эталон внешнего окна и солнечного луча. Браузер сравнивает проверенный кадр с тем же кадром, где скрыт только слой солнца, и требует заметного количества реально нарисованных пикселей — пустой скриншот больше нельзя принять как успешный результат.

v1.62.0-beta.5 — 2026-08-12

  • Все виды активности устройств сведены в одну предсказуемую систему: тревога показывает красную пульсацию, зафиксированное событие — три конечные волны, а продолжающаяся работа, движение или присутствие — одну постоянную пульсацию. Статичные кольца убраны; при уменьшении движения обычная активность обозначается компактной точкой. Полный план, предпросмотр устройства и статичная карточка используют один resolver и renderer (#98).
  • Переходы между Просмотром и всеми тремя редакторами стали цельными. Высота панели, доступная область плана, камера, фон и слои редактора меняются по одной короткой шкале времени; при смене редакторов новые элементы плавно появляются, быстрый повторный выбор продолжает движение из видимого кадра, а режим уменьшения движения сохраняет мгновенный атомарный переход (#101).
  • Исправлено отображение первой строки вместо реально сохранённого и используемого источника в поле «Значение» редактора устройства. Сохранённые источник и расположение теперь выбираются явно при открытии диалога, включая временно отсутствующие источники (#100).
  • Исправлено появление дополнительной вертикальной прокрутки диалога при открытии контекстной подсказки. Скрытое accessibility-описание больше не участвует в scroll-геометрии ни в native Popover, ни в fallback-режиме (#99).
  • Исправлена регрессия переходов между режимами, из-за которой солнечные лучи из окон могли оставаться невидимыми в режиме просмотра. Слой лучей снова независимо управляет своим жизненным циклом; положение солнца, геометрия окон и существующая анимация порога не менялись (#102).

v1.62.0-beta.4 — 2026-08-12

  • Исправлено отображение неработающего значка подсказки, когда самого текста подсказки нет. Неполная подсказка теперь целиком скрывается, а обычный символ ? заменён на единообразную контурную иконку «вопрос в кружке» (#68).
  • Усилена надёжность универсального «Переключить состояние» после код- ревью беты. Для climate, бойлеров, сирен, камер, медиаплееров и legacy- пылесосов теперь проверяются точные capability bits сущности и наличие сервиса; клик использует актуальные controls, а не сохранённый визуальный кадр, и деактивированная legacy-штора сохраняет прежнюю объяснимую цель (#94).
  • Исправлено отображение «Карточка устройства» у лампы, фактическим действием которой по умолчанию является «Переключить состояние». Нетронутая настройка теперь следует за актуальной ведущей сущностью в предпросмотре, не меняя явный выбор пользователя и lossless-хранение legacy (#97).
  • Исправлено бездействие пункта «Карточка устройства» у составных устройств штор и жалюзи. Локальная карточка House Plan теперь открывается независимо от кратковременной повторной проверки реестра HA, а HA more-info и сервисные действия сохраняют защитную проверку (#96).
  • Исправлена гонка при закрытии редактора после технического ре-маунта на том же маршруте. Видимый редактор теперь закрывается с первого нажатия, даже если право записи ещё уточняется; поздний ответ сервера больше не открывает его повторно (#95).

v1.62.0-beta.3 — 2026-08-12

  • Отдельные действия Toggle и управления шторами объединены в одно универсальное «Переключить состояние». В редакторе устройства теперь заранее показаны точная цель, текущее и следующее состояние, а также пропущенные или неподдерживаемые сущности; шторы и клапаны сохраняют open/close/stop, защищённые устройства остаются no-op, а действие без цели больше не подменяется открытием карточки. Старые записи cover сохраняются без скрытой миграции до намеренного изменения (#94).
  • При возвращении в House Plan теперь восстанавливается только последнее пространство и всегда открывается Просмотр. Редактор и его диалоги больше не переживают перезагрузку или переходы по другим страницам Home Assistant, но технический ре-маунт на том же маршруте сохраняет незавершённую работу (#93).
  • Исправлен Glow от источника, попавшего внутрь толстой стены или внешнего проёма: он больше не освещает половину тоннеля внешней двери или ворот. Источник внутри итогового непрозрачного тела стены теперь не создаёт Glow вообще, а настоящие внутренние проходы остаются прозрачными (#92).

v1.62.0-beta.2 — 2026-08-11

  • Добавлен управляемый бейдж со значением рядом с устройством. Пользователь может явно выбрать показатель и разместить его справа, снизу, слева или сверху; предпросмотр, основной план и статическая карточка используют один resolver, а старые нетронутые маркеры сохраняют прежнее автоматическое поведение (#90).
  • Исправлена потеря толщины примыкающих стен при разделении комнаты. Split теперь материализует точные интервалы legacy-профиля до изменения геометрии, поэтому новое значение применяется только к разделяющей стене (#91).
  • Усилена надёжность переносимых резервных копий: полный импорт сохраняет версию модели, write-endpoint и preview-токены получили негативное покрытие, а тестовый harness очищает временные планы и вложения.
  • Устранена утечка scroll-listener у контекстных подсказок, а плановый граф источников света теперь вычисляется один раз на кадр вместо повторного полного обхода для каждого маркера.
  • Усилены golden-, smoke- и repository-gates: сценарий швов действительно пересекает ступенчатую стену, инвентарь эталонов проверяется точно, а временные файлы и browser quiescence больше не создают флейки.

v1.62.0-beta.1 — 2026-08-11

  • Исправлена потеря одноразовой отмены оптимизации или импорта при обслуживании геометрии. Явный repair и его отмена теперь сохраняют служебные данные layout-store и поддерживают актуальную ревизию снапшота плана (#87).
  • Добавлены пассивные источники света и явный выбор ведущей сущности. Теперь виртуальная «тупая» лампа может иметь собственные позицию, цвет, яркость и радиус Glow и следовать умному выключателю; несколько контроллеров работают по OR, а marker:*-ссылки безопасно проверяются и никогда не отправляются в Home Assistant как entity ID. Для многоканальных устройств роль «Всегда» позволяет выбрать осмысленную light.*/switch.* вместо случайной первой (#84, #88).
  • Добавлены переносимые резервные копии House Plan: редактор может экспортировать всю модель или одно пространство, перед записью показать проверенный сервером предпросмотр JSON, безопасно обработать повторяющиеся привязки HA и отменить полную замену до следующего изменения плана. Внутренние планы и вложения остаются локальными ссылками и не копируются между экземплярами Home Assistant незаметно для пользователя (#50).
  • Исправлено повторное появление тонких SVG-швов в заливке дверных, оконных проёмов и ворот. Одинаковые и ступенчатые профили стен теперь отображаются цельными контурами без полупрозрачных перекрытий и зазоров на дробном масштабе (#81).
  • Добавлены переиспользуемые локализованные кнопки подсказок для сложных настроек. Они работают с мышью, клавиатурой и касанием, не выходят за экран и используют общий с диалогом порядок Escape и фокуса (#68).

v1.61.0 — 2026-08-11

  • Расширена поддержка роботов-пылесосов: детерминированный выбор источника, понятная диагностика возможностей и состояния, сохранение разрывов маршрута, безопасный выбор карты и более строгая проверка калибровки.
  • Переработаны настройки цвета комнат и освещения. Glow стал независимым аддитивным слоем, заливки комнат сохраняют точный заданный цвет, а для каждого источника доступны автоматический, постоянный и отключённый режимы с ручными цветом, яркостью и радиусом там, где это применимо.
  • Распространение света теперь использует те же физические тела стен, которые отображаются на плане, включая толщину, откосы, перегородки и колонны. Проёмы и виртуальные границы пропускают свет без швов, а стены и углы формируют стабильные обрезанные тени.
  • При возврате на вкладку, восстановлении соединения Home Assistant или remount карточка сохраняет последний цельный кадр. Устройства, комнаты, Glow, солнце, проёмы, пылесосы и живой декоративный текст обновляются атомарно без вспышек частично собранного состояния.
  • Мелкие исправления и улучшения диалогов, hover комнат, маркеров устройств, стабильности редакторов, проверок и процесса публикации.

v1.61.0-beta.8 — 2026-08-11

  • Восстановление плана теперь ограничено общим двухсекундным барьером: зависшая подпись или декодирование защищённой подложки больше не могут навсегда оставить уже готовый план под непрозрачным слоем. Карточка сохраняет последний цельный кадр, а при отсутствии такого кадра показывает явную ошибку с повтором.
  • Добавлен неизменяемый снимок данных одного кадра. Устройства, позиции, заливки комнат, Glow, солнце, проёмы, пылесосы и HA-переменные декоративного текста обновляются согласованно и не смешивают старое и новое состояния при reconnect.
  • Событие готовности соединения считается восстановлением только после подтверждённой потери связи; обычные HA-tick больше не меняют структурный отпечаток кадра. Устранены гонки принудительного обновления конфигурации, кеша подписанных URL и запоздалых событий загрузки изображений.
  • Усилены детерминированные проверки непрерывности кадра, защищённых подложек и screencast: сценарий теперь проходит через настоящий listener видимости и одновременно контролирует геометрию, устройства, Glow, солнце и декор.

v1.61.0-beta.7 — 2026-08-11

  • Исправлены редкие, но серьёзные сбои геометрии Glow: ошибка clipping больше не может залить светом пространство вне дома, источник на привязанной к сетке стене остаётся тёмным, а угловой шов больше не вырезает клин из корректного пятна. Кэш барьеров теперь инвалидируется при изменении любой точки тела, конца стены, масштаба или пространства.
  • «Удалить»/«Отмена»/«Сохранить» в диалогах проёма и пространства переведены на тот же адаптивный групповой футер, что свойства физических объектов: локализованные действия не выходят за границы узкого диалога.
  • Возврат на дашборд больше не скрывает и не пересобирает уже готовый план. Полная и компактная карточки удерживают последний согласованный кадр при сне вкладки, reconnect, remount и переходном resize; одинаковые ответы config/layout принимаются без пересборки геометрии, а защищённые подложки используют общий ограниченный cache загруженных ресурсов. Локализованный слой восстановления оставлен только для редкого случая, когда удержать полноценный кадр невозможно. (#73)
  • Восстановлен контракт hover комнаты без возврата вспышки Glow: нейтральный слой по чистому полу затемняет фактическую заливку комнаты, а поздний контур остаётся над стенами; Glow, солнце, проёмы и устройства визуально не затрагиваются. (#79)
  • Работающие устройства сохраняют жёлтую подложку в покое с обычной нейтральной тенью, получают тот же hover, что остальные интерактивные маркеры, и больше не создают лишнее жёлтое свечение вокруг подложки. (#80)

v1.61.0-beta.6 — 2026-08-11

  • Исправлена общая компоновка диалогов для длинных локализованных строк: многострочный заголовок теперь увеличивает header Home Assistant и не обрезается, а в свойствах физических объектов «Удалить» остаётся в левом отступе, тогда как «Отмена»/«Сохранить» вместе переносятся на вторую строку узкого диалога. (#77, #78)
  • Свет теперь работает по одному правилу: лампа освещает тот пол, который видит. Стены не пропускают его своей настоящей толщиной — теми же телами, которые нарисованы на плане, — как и колонны с отдельными перегородками; проёмы, ворота и виртуальные стены — не стены, поэтому свет через них проходит, а откосы толстой стены сужают луч ровно так же, как в доме. Всё остальное следует из этого правила: в проёме свет непрерывен, а не «тёмная перемычка плюс оторванное пятно»; луч заканчивается там, где кончается принимающая комната; колонна и угол стены дают чёткие тени — в том числе если стена принадлежит комнате через одну; границы теней стали линиями с волосяной полутенью, а не размытыми пятнами. Окно и наружная дверь для света глухие — за входной дверью нет пола, освещать нечего, и она больше не светится наполовину. Пул вдобавок затухает по всему радиусу, а не держит плато до 70%, поэтому дальний пол слабее просто потому, что он дальше. Побочно слой света стал одной обрезанной окружностью на источник. Холодный расчёт геометрии сложного плана стал радикально быстрее; тёплый путь в целом остался сопоставим с beta.5 и контролируется отдельно. (#71)
  • Исправлена однокадровая вспышка яркости Glow при наведении на любую комнату. Hover теперь использует обычную SVG-заливку и двойной контур без фильтров композитора. (#72)
  • Публикация пре-релиза теперь корректно принимает намеренно пропущенную задачу анонса и не отклоняет уже валидный релиз при восстановлении workflow.

v1.61.0-beta.5 — 2026-08-10

  • В настройках устройства появились роли источника света «Авто», «Всегда» и «Никогда». Для Glow можно использовать данные Home Assistant, задать свой цвет с живой яркостью либо зафиксировать и цвет, и яркость; тусклые лампы остаются заметными благодаря перцептивной кривой интенсивности. (#65, #66, #67)

  • Важно для совместимости: явно сохранённое is_light: false теперь означает «Никогда», а не работает как «Авто». Старый UI обычно записывал null, поэтому изменение в основном касается конфигураций, отредактированных вручную.

  • Проверка пре-релизов теперь использует короткий performance-smoke кандидата с 60 источниками Glow. Дорогое сравнение кандидата с baseline остаётся обязательным для стабильных релизов и запускается на main, еженедельно и вручную. (#69)

  • Уведомления о релизах в Telegram теперь отправляются только для стабильных версий; беты и release candidate публикуются без уведомления. (#70)

v1.61.0-beta.4 — 2026-08-10

  • Performance-сравнение теперь допускает отсутствие недавно добавленных приватных полей у поддерживаемых старых baseline, но проверяет runtime-типы всех присутствующих полей. После переписывания истории за baseline берётся родитель кандидата с явным warning, а не молча старый релиз. (#15, #16)

  • В пространствах с Glow режимы LQI/«Свет»/«Температура» без доступных данных Home Assistant теперь получают тёмную базу комнаты вместо светлой незалитой дыры. Реально разрешённая data- или пользовательская заливка по-прежнему сохраняет точные цвет и прозрачность. (#61)

  • В настройках пространства «Свой цвет» теперь является обычным первым режимом заливки комнат и заменяет отдельный пункт «Нет». Старые пространства с fill_mode: none открываются как свой цвет с прозрачностью 0%, сохраняя прежний вид пола и Glow при Preview и Save. Новые пространства также начинают с прозрачности 0%, поэтому замена пункта не меняет их прежний внешний вид. Отдельная комната по-прежнему может отключить унаследованную динамическую заливку. (#64)

  • Публикация пре-релиза теперь выполняется одной fail-closed локальной командой или ручным запуском GitHub Actions. До завершения проверяются все файлы версии, двуязычный release body, зелёный Validate точного SHA, аннотированный тег, оба ассета и обнаружение версии в HACS. Содержимое скачанных JS/ZIP сверяется с hash кандидата и версией manifest, а per-tag concurrency не допускает параллельную публикацию. ZIP проверяется одинаково на Windows и Linux без зависимости от системного tar, а standalone JS и хеши берутся из точных Git blobs без зависимости от CRLF рабочего дерева; устаревшие ассеты автоматически заменяются, лок снимается и при обрабатываемом прерывании. Публичный релиз сначала безопасно собирается как draft, частичный сбой допускает повторный запуск. Прежние release-workflows сохранены как fallback. (#63)

v1.61.0-beta.3 — 2026-08-10

  • Performance-инструменты теперь до начала замеров сообщают об исчезнувшем приватном API карточки в candidate/base, документируют безопасное двухэтапное переименование и при недостижимом SHA после force-push выбирают последний достижимый релиз. Для заголовков двуязычного release body явно закреплён один канонический шаблон. (#15, #16, #17)
  • Для комнат и пространств появилась постоянная заливка своим цветом и прозрачностью, независимая от цвета границ/названий и состояния Home Assistant. Цвет комнаты безопасно наследуется от пространства и сбрасывается отдельной кнопкой. (#56)
  • Glow больше не затемняет и не меняет цвет заливки по LQI, свету, температуре или пользовательскому цвету: эти заливки остаются точными, а живые световые пятна продолжают отображаться. (#61)
  • Общий радиус свечения перенесён к остальным настройкам Glow. Мелкие правки по код-ревью также убрали недостижимую legacy-ветку и пустые SVG-слои статичной карточки. (#60)

v1.61.0-beta.2 — 2026-08-10

  • Свечение источников света стало независимым слоем и может одновременно работать с заливкой по температуре, Zigbee-сигналу, состоянию света или без заливки. Старые планы с режимом Glow сохраняют прежний результат и без потерь мигрируют при обычном сохранении или «Оптимизации планов».
  • Пересекающиеся световые пятна теперь складываются как свет: пересечение становится ярче и смешивает цвета. Карточка проверяет реальную поддержку SVG в браузере и безопасно возвращается к обычному наложению, если её нет.
  • После закрытия карточки устройства, открытой долгим нажатием мыши, план больше не прилипает к курсору и диалог не открывается повторно из старого жеста.

v1.61.0-beta.1 — 2026-08-09

  • Сохраняемые цвета плана теперь используют единый строгий формат #RRGGBB на границах API и рендера. Некорректные старые или импортированные значения безопасно заменяются штатным цветом и не могут добавить CSS declarations; динамические RGB-цвета ламп Home Assistant продолжают работать через отдельную числовую генерацию.
  • Покрытие интеграций пылесосов стало явным и диагностируемым. Единый закрепляемый и независимый от порядка resolver автоматически находит источник в устройстве и позволяет лениво выбрать registry-less камеру карты, различает удаление, деактивацию, недоступность и ограниченные права и не выводит на план старую телеметрию деактивированного источника.
  • Многосегментный путь Xiaomi Cloud Map Extractor сохраняет настоящие разрывы; арбитраж пути, лимиты точек и ID карты детерминированы во фронтенде и бэкенде. Автокалибровка использует площадные центроиды с обеих сторон и сохраняет bbox-only диалекты через последний fallback на центр bbox, а физическая ошибка более 40 см требует явного применения или ручной подгонки до изменения настроек.
  • Серверный recorder выдаёт одно дедуплицированное предупреждение на инцидент удаления/деактивации источника и фиксирует восстановление. Документация содержит честную матрицу Dreame/XCME/Valetudo; Roomba остаётся этапом 2.

v1.60.3 — 2026-08-09

  • Панели редакторов больше не меняют рабочую область: действия выделения, временные настройки инструментов и палитра мебели открываются в единой доступной суб-панели поверх плана, а кнопка закрытия остаётся на месте. Широкая, средняя и узкая компоновки покрыты детерминированными golden-сценариями.
  • При возврате на вкладку план больше не мигает и кратковременно не сбрасывает масштаб или дневное состояние. Жест двумя пальцами не активирует лежащий под ним marker, а подгонка карты пылесоса изолирует собственную область жестов.
  • Символ, вырез и заливка проёма в толстой стене используют единую привязку к стене. Отдельные и T-образные стены не перехватывают сторону, перекрывающиеся проёмы не усиливают непрозрачность, а между атомарными участками тоннеля больше не появляются тонкие SVG-полосы.
  • Предпросмотры мебели остаются внутри своих кнопок, крестик закрытия редактора отцентрирован, а закрытие невыбранной палитры не оставляет блокировку клика.
  • Технические улучшения включают детерминированное golden-покрытие, performance-gate на одном runner и перенос активного backlog в GitHub Issues
    • Project v2.
  • Мелкие исправления и улучшения.

v1.60.3-beta.2 — 2026-08-09

  • Панели редакторов сохраняют стабильную высоту при выделении объектов и смене контекста инструмента. «Свойства», «Удалить», параметры рисования, подсказки операции и палитра мебели используют одну полупрозрачную суб-панель поверх рабочей области: план больше не сжимается и не масштабируется заново, а кнопка закрытия закреплена на месте. Та же доступная поверхность подготовлена для будущих явно спроектированных групп инструментов; существующие кнопки автоматически не объединяются.
  • Жест двумя пальцами больше не активирует интерактивный объект плана, даже если начался над ним, а при подгонке карты пылесоса масштаб плана под оверлеем не меняется. Палитра мебели и будущие группы инструментов надёжно закрываются по нажатию вне карточки и не поглощают следующий посторонний клик.
  • Мелкие исправления и улучшения: снова учитывается системное сокращение анимаций, устаревшие действия суб-панели сразу отклоняются после локальных правок, а регрессионные проверки UI и производительности стали строже.

v1.60.3-beta.1 — 2026-08-08

  • При быстром возврате на вкладку больше не выполняется принудительный однокадровый сброс дневного фона и hover, из-за которого мог мигать весь план. После долгого сна защитная стабилизация и актуализация солнца сохраняются.
  • Проёмы в толстых стенах теперь используют единую кэшируемую привязку стены для символа, выреза и тоннеля с цветом комнаты. Отдельно стоящая параллельная стена и перпендикулярное плечо T-стыка больше не перехватывают сторону тоннеля, а перекрывающиеся проёмы не усиливают непрозрачность заливки. Старый проём, сохранённый с углом или смещением, которые фактически уже не совпадают со стеной, больше не вырезает и не сдвигает её; для восстановления достаточно повторно привязать проём к стене в редакторе плана.
  • Расширено покрытие режима «Всегда статичный значок»: проверяются подавление RGB, размер и поворот, приоритет lifecycle, переключение режимов, паритет плана/предпросмотра/статической карточки и отсутствие live-слоя пылесоса.
  • Подготовлен maintenance-фундамент: локальный реестр и аудит compatibility- полей, проходящий backend-схему performance-baseline большого дома с защитой от старого bundle и ложных замеров памяти, детерминированная golden-image инфраструктура capture/review и первый render-only вынос из корневой карточки. Сохранённые данные, SVG-контракт и пользовательское взаимодействие не меняются.

v1.60.2 — 2026-08-08

  • Тоннели дверей, окон и ворот в толстых стенах теперь продолжают фактическую заливку комнаты вместо белой полосы подложки. Во внешней стене цвет комнаты занимает всю глубину проёма, а в общей стене разные заливки ровно делятся по её оси. Поведение Glow, солнечных лучей и символов проёмов не изменилось.
  • В настройках отображения устройства появился режим «Всегда статичный значок». Он сохраняет обычный тёмный значок при работе, открытии, тревоге, недоступности, RGB-цвете и любых значениях, скрывает дополнительные бейджи и живой puck/след пылесоса. Hover, действия, controls и отдельное влияние устройства на освещение комнаты не меняются. Прежний режим «Значок» переименован в «Значок + динамическая подложка».
  • Выключатель больше не становится физической точкой Glow только из-за списка управляемых источников: controls по-прежнему задаёт групповое управление, состояние освещения и статистику комнаты, но световое пятно рисуется у маркера самой лампы. Собственный switch.* в старом controls также больше не включает скрытое legacy-поведение — для реле-светильника нужен явный флаг «Это устройство — источник света».

v1.60.2-beta.3 — 2026-08-08

  • Сохранённые устройства, деактивированные в Home Assistant, теперь полностью исключаются из плана и всех расчётов до повторной активации, а в редакторе устройств остаются подписанными служебными ghost-маркерами. Сверка реестров восстанавливается даже при недоступной подписке на обновления; статусы и объяснения предпросмотра и статической карточки синхронизированы. Также вошли небольшие исправления accessibility и навигации.
  • В список проёмов добавлены «Ворота». Датчик, замок, вырез стены и пропуск Glow работают как у двери, но по умолчанию ширина равна 300 см, а две половинные створки открываются наружу только на 10° без огромной дуги на плане.
  • Солнце в окнах больше не зависит от погодной сущности: облачность, дождь и снег не ослабляют и не скрывают геометрически корректные лучи. Устаревший выбор погоды удалён из настроек, сохранённые старые значения безопасно игнорируются.
  • В настройках устройства появился живой предпросмотр: он показывает фактическое текущее состояние, используемые сущности, интеграцию-провайдера, объяснение результата и безопасный локальный пример эффекта активности. Полный план, предпросмотр и read-only карточка пространства теперь используют общий resolver отображения и единый renderer значка.
  • Уже сохранённый режим «Значение вместо иконки» теперь показывает не только числа, но и локализованные текстовые состояния. Длинное корректное значение сокращается многоточием без расширения зоны marker, а полный текст остаётся доступен в подсказке и accessibility-описании.
  • При нескольких равноправных источниках режим «Значение вместо иконки» больше не берёт случайно первую сущность registry: отображается иконка, а предпросмотр объясняет неоднозначность.
  • Для готовой линии в редакторе подложки теперь можно выбрать сплошной или пунктирный стиль в свойствах, открываемых двойным кликом. Старые и новые линии по умолчанию остаются сплошными; пунктир удобно выбирается и в промежутках.
  • В редакторе плана отдельные кнопки «Виртуальная стена» и «Физическая стена» заменены одним контекстным инструментом «Граница». Две точки на сплошной общей стене открывают виртуальный участок, а один клик по пунктиру целиком восстанавливает его физическое тело; будущая толщина видна в предпросмотре. Экранные зоны попадания не меняются от масштаба, неоднозначные стыки и независимая кладка блокируют опасное редактирование, а незавершённая первая точка отменяется через Esc, Undo/Redo, навигацию, reconnect или multi-touch.
  • Общий hp-dialog теперь переносит длинные локализованные заголовки и имена устройств целиком вместо обрезания по ширине. Числовые поля угла во всех редакторах показывают не более трёх знаков после запятой, не округляя сохранённую геометрию.

v1.60.2-beta.2 — 2026-08-08

  • Составные устройства, представленные только набором switch-сущностей, теперь используют один репрезентативный источник состояния вместо трактовки каждого служебного переключателя как работы всего устройства. Отдельная сущность Power определяется по общим метаданным Home Assistant: включённое устройство остаётся нейтральным, а выключенное или недоступное отображается приглушённым. Одиночные реле по-прежнему подсвечиваются жёлтым при работе.
  • Информационная карточка устройства переведена на широкий адаптивный диалог; кнопки «Редактировать», «Открыть в HA» и «Закрыть» корректно располагаются и переносятся на узких экранах.
  • В диалоге «Новая комната» оставлен единый сценарий сохранения: выбор «— без зоны —» и введённое имя активируют обычную кнопку «Сохранить», комната записывается с area: null. Дублирующая кнопка «Без зоны» удалена.
  • Инструмент «Стереть» в редакторе подложки получил невидимую экранную область попадания 16 px для тонких линий и контуров. Внешний вид объектов не меняется, а удобная ширина сохраняется при любом масштабе.

v1.60.2-beta.1 — 2026-08-07

  • Финальные правки по ревью сделали инвалидацию геометрических кэшей независимой от пути загрузки конфига и ограничили кэши LRU-вытеснением. Pan/pinch снова работает над незавершёнными контурами, частично числовой ввод отклоняется, оптимизатор не материализует отсутствующий угол колонны, а ручка поворота получила полноценную область 24 px. Для булевой геометрии добавлен безопасный последовательный fallback; объединение контуров и анимация высоты панелей теперь проверяются browser smoke-сценариями.

  • В редакторе плана появились сохраняемые незавершённые контуры комнат, независимые перегородки и квадратные/круглые колонны. Они всегда привязаны к сетке, вычитаются из чистой площади, блокируют Glow и солнечные лучи и входят в общий Undo/Redo геометрии. В режиме «Выбрать» доступны перенос, свойства и ручка поворота квадратной колонны; сохранённые контуры можно продолжать и соединять конец с концом. Лимиты клиента и сервера совпадают, а неверная толщина теперь отклоняется с подсказкой вместо молчаливого обрезания.

  • По итогам аудита добавлены кэши чистого пола и световой геометрии, полная блокировка источника внутри стены, непротекающая тень длинных перегородок, строгая серверная проверка колонн, отмена активных жестов при серверном echo и браузерный smoke-сценарий новых физических объектов.

  • При рисовании контура комнаты Shift теперь фиксирует новый отрезок по ближайшему направлению, кратному 45°. Предпросмотр и итоговая вершина совпадают, а точка остаётся строго на сетке.

  • Панель редактора плана стала компактнее: инструменты теперь называются «Объединить», «Виртуальная стена», «Физическая стена» и «Толщина». У кнопок «Отменить» и «Повторить» оставлены только иконки, при этом локализованные подсказки и доступные имена сохранены.

  • В редакторе подложки физические, толстые и пунктирные виртуальные стены теперь приглушаются до тех же 35%, что и остальные слои вне декора.

  • Переключение редакторов внутри одного пространства теперь заметно и плавно проявляет новую панель, одновременно интерполируя её измеренную высоту. Разное количество строк и состав инструментов больше не дёргают план, а быстрое повторное переключение продолжается с текущей промежуточной высоты.

  • Усилена надёжность по итогам аудита: Undo/Redo однозначно работают на QWERTZ/AZERTY и нелатинских раскладках, SVG-текст получил цельную область попадания с резервным режимом для Gecko/WebKit, а скрытая панель редактора и анимации полностью сбрасываются при смене жизненного цикла. Высота области плана теперь следует точному измерению шапки.

  • Открытие и сохранение маркера больше не теряет порядок, повторы и временно неизвестные внешние controls. Climate распознаёт preheating/defrosting и игнорирует служебные псевдо-action перед проверкой режима; «Оптимизировать планы» исправляет нулевой, пустой и отрицательный масштаб сетки на 5 см.

v1.60.1-beta.1 — 2026-08-07

  • Climate-маркеры интеграций без hvac_action теперь используют текущий включённый режим из hvac_modes, поэтому работающий кондиционер снова имеет жёлтую подложку. Если action присутствует, он остаётся приоритетным: hvac_action: idle по-прежнему нейтрален.
  • Настройки комнаты теперь открываются в диалоге средней ширины. Длинные подписи вариантов и имена источников переносятся или сокращаются внутри окна, поэтому горизонтального скролла больше нет, в том числе на мобильных.
  • «Стереть» теперь воспринимает текстовую надпись как единый объект по всей её рамке. Клик между буквами или по подсветке выделения больше не может визуально удалить только «обводку»; промах по пустому холсту ничего не меняет.
  • Переключение пространств, вход и выход из редакторов, а также переходы между редакторами получили единую короткую плавную анимацию. Панель инструментов раскрывается и закрывается без скачка; при prefers-reduced-motion анимации по-прежнему отключены.
  • При рисовании контура комнаты Ctrl/Cmd + клик теперь замыкает последнюю точку на первую, не добавляя новую вершину. Нужны минимум две уже нарисованные грани; вырожденный или самопересекающийся контур не замыкается.
  • «Отменить»/«Повторить» в редакторах теперь используют независимые от раскладки коды клавиш: Ctrl/Cmd + Z, Ctrl/Cmd + Shift+Z и Ctrl/Cmd + Y работают и при русской раскладке. В полях ввода сохраняется нативная история.
  • Закрыты замечания повторного аудита v1.60.0: переподключение во время resume больше не оставляет план под вечным veil; старые self-controls выключателей сохраняют роль источника света и мигрируют в is_light; выбор цвета и прозрачности вынесен в верхний слой браузера с переворотом/ограничением внутри мобильных диалогов; оптимизация исправляет cell_cm вне диапазона, но не удаляет неизвестные или повторяющиеся controls; у entity-привязки старого реле удаляется только её точный self-control, а явно добавленные соседние источники света сохраняются; SVG-fallback стен стал валидным буквальным цветом.

v1.60.0 — 2026-08-07

  • Исправления по аудиту. Удаление одного виртуального маркера больше не удаляет соседние; реальные id вида v_* можно перемещать; tombstone скрыт даже для старых клиентов и действует на привязку, а не вырезает entity из живого родительского HA-устройства. Временно неактивные controls больше не стираются при обычном сохранении. Удаление trail стало транзакционным. Оптимизация ограничивает мигрируемые физические размеры, валидирует cell_cm, не выбрасывает некорректный legacy transform и честно отделяет bump версии модели от миграции. Нулевые фигуры отбрасываются, список мебели выбирает сохранённый символ, resize повернутого объекта сохраняет опорный угол, а смена режима отменяет незавершённый transform. Английские имена устройств со словом thermometer теперь распознаются как датчики температуры, а не попадают под более общее правило счётчиков.

  • Автоиконка обновляется сразу после смены привязки и может быть явно закреплена; границы толщины в imperial-режиме показываются в дюймах; геометрия магнита кешируется; Undo и Redo одинаково работают с живым жестом.

  • Маркер больше не может записать собственную entity или сущность привязанного устройства в список других управляемых источников света. Старая самоссылка сразу игнорируется; сохранение маркера удаляет её, а оптимизация планов также чистит прямую самоссылку entity:*; считать само реле источником света можно только явным флагом. Включённая вытяжка/вентилятор по-прежнему получает жёлтую подложку работающего устройства, но не участвует в Glow, заливке «Свет» и статистике освещения комнаты.

  • Редактор подложки получил единую систему стилей и трансформаций. Любой объект декора можно выбрать, переместить, пропорционально масштабировать (Shift — разные оси), повернуть и точно изменить числами; у линии есть ручки концов. Контур/текст и заливка имеют независимые цвет и прозрачность, толщина и размер текста хранятся физически в см/дюймах, прямоугольник показывает площадь, а овал — радиусы. Магнит использует только декор и контуры комнат. Декор и картинка сохраняют обе стороны на сетке даже при пропорциональном размере и используют общий именованный Undo/Redo на 50 шагов. У картинки отдельный инструмент, непрозрачность 0.5 под остальными инструментами, независимые оси и поворот; вне редактора она полностью непрозрачна. Старые стили/трансформации не меняются визуально и мигрируют только явной оптимизацией планов.

  • Устройства теперь можно действительно удалить с плана, а не только скрыть. Кнопка «Удалить» находится рядом со «Скрыть»/«Показать» и требует подтверждения. Удалённая HA-привязка не рисуется, не показывается среди скрытых и не участвует в LQI, климате, источниках комнаты, свете/Glow, статистике, controls, проёмах и живом тексте, но снова доступна через «Добавить». Повторное добавление заменяет служебную запись и начинает с новой позиции. Виртуальный маркер удаляется полностью; layout, вложения, runtime активности и следы пылесоса очищаются, а поздний drag из старой вкладки не способен воскресить позицию.

  • Нижняя панель диалога устройства снова занимает всю ширину. Общий hp-dialog теперь передаёт footer как полноширинный элемент, а не как сжимаемую по содержимому flex-строку. Разделитель больше не начинается с середины окна, «Скрыть» остаётся слева, «Отмена» и «Сохранить» — справа.

  • У автоматической иконки больше не пропадает подпись в редакторе. Если у маркера нет явной замены иконки, селектор HA получает вычисленную автоиконку как отображаемое значение и показывает и сам значок, и его имя mdi:*. Сохранённое переопределение при этом остаётся пустым, пока пользователь сам не выберет иконку.

  • Питание медиаплеера больше не считается работой. Маркеры media_player остаются нейтральными в состояниях on, idle, playing, paused и других состояниях транспорта; явный off использует то же приглушённое отображение, что unknown / unavailable. Это правило домена для телевизоров, ресиверов, колонок и саундбаров, а не исключение для конкретной модели. Составной медиамаркер бледнеет, только когда среди его сущностей нет доступной и включённой.

  • Возврат к давно свёрнутому Просмотру больше не дёргает план. В обычном Просмотре (не киоск) нулевые и промежуточные размеры ResizeObserver больше не перезаписывают сохранённый viewport. После действительно долгого сна вкладки план открывается, когда размер сцены уже измерен и успокоился, а масштаб и центр применяются одним кадром. Критические параметры заливки и контура толстых стен теперь также заданы прямо на SVG-путях: при тёплом пересоздании Lovelace браузер не успевает показать стандартную чёрную заливку до восстановления стилей компонента. Редакторы, киоск и быстрые переключения вкладок работают по-прежнему без задержки.

  • Действия карточки устройства не выходят за границы узкого диалога. Кнопки «Редактировать», «Открыть в HA» и «Закрыть» теперь переносятся только целиком, если в малом диалоге HA не хватает одной строки; на телефоне также уменьшены боковые отступы. Первая кнопка больше не уезжает за левый край.

v1.59.2 — 2026-08-07

  • A11Y-02: единая доступная оболочка диалогов. Все модальные окна House Plan переведены на hp-dialog: внутри Home Assistant используются штатная модальная поверхность и focus trap ha-dialog, а автономный demo-режим получает fallback на нативном <dialog>. У каждого окна теперь есть объявляемый скринридеру заголовок, предсказуемый начальный фокус, закрытие по Esc, удержание Tab-фокуса внутри и возврат фокуса на открывший элемент, включая вложенные окна и переход из одного диалога в другой.

v1.59.1 — 2026-08-06

Технический релиз сводит состояние устройств и все световые представления к общим семантическим resolver-функциям, смягчает Glow и устраняет последний артефакт Т-стыка после объединения стен.

  • Системный resolver состояния устройства вместо «первой сущности». У HA нет единого состояния Device: House Plan теперь сначала исключает config/diagnostic, затем выбирает функциональную роль устройства, семантические binary-сигналы и лишь при их отсутствии обычные switches. Пассивные датчики агрегируются, поэтому одна недоступная сущность не делает недоступным весь маркер. Это одним правилом исправляет X50 с недоступным Customized Cleaning, presence с включённым Anti interference, TRV со служебными switches и аналогичные интеграции. Настоящая сущность cover также сильнее настройки reverse-direction, но смешанное устройство lamp+cover остаётся лампой до явного выбора действия шторы.
  • UX-12: один набор источников света. Glow, заливка «Свет», строка света карточки комнаты, индикация маркера и групповое управление теперь используют resolvedLightSources(room). Приоритет един: controls → флаг «Это источник света» → автоматические light.*; скрытые маркеры исключаются, сущности не дублируются, а ручной room_id точнее HA-зоны. Поэтому отмеченное реле и управляемая группа одинаково трактуются во всех световых режимах.
  • Более мягкий glow источников. Весь слой свечения теперь отображается с непрозрачностью 0.7; затемнение комнат и жёлтая подложка работающего устройства не изменились.
  • Чистые Т-стыки реальных и виртуальных стен после объединения отрезков. Один максимальный реальный отрезок может проходить через более короткие коллинеарные стороны нескольких комнат. Теперь точные концы восстанавливают толщину на каждой полностью покрытой стороне, даже если midpoint длинной записи находится за пределами комнаты. Поэтому hover остаётся на внутренней грани, а у виртуального продолжения не появляется ложный торец реальной стены.

v1.59.0 — 2026-08-06

Стабильная 1.59 превращает House Plan в существенно более полный редактор планов, сохраняя цельное живое представление Home Assistant. В неё входят все изменения beta/RC ниже; линейку завершают hover по границе чистого пола и устойчивое объединение тел стен.

  • Реальные стены, виртуальные границы и проёмы работают как одна система. В комнате можно смешивать толщины, одна стена может состоять из реальных и виртуальных участков, а соседние одинаковые фрагменты снова объединяются. Resize сохраняет точные концы интервалов; частичные открытия, виртуальные Т-стыки, дверные тоннели в толстых стенах и солнечные лучи из внутренних углов окон обрабатываются согласованно.
  • Правки плана однозначны и обратимы. «Контур комнаты», Split, «Закрыть границу», «Объединить комнаты», «Удалить комнату», Resize, толщина стен и операции с проёмами имеют по одному результату и используют общий именованный Undo/Redo на 50 команд. Delete удаляет только выбранный объект.
  • Единый обязательный инвариант сетки. Комнаты, проёмы, маркеры, декор, мебель и подложка всегда попадают в сетку либо квантуются вдоль своей стены. «Оптимизировать планы» показывает preview и применяет все актуальные миграции без потерь, исправляет старые/off-grid данные, уплотняет фрагменты стен и оставляет безопасную одношаговую отмену.
  • Редакторы получили рабочие пользовательские сценарии. Свойства объектов подложки открываются двойным кликом; мебель имеет реальные размеры и магнит к стенам; живые надписи принимают произвольный текст вперемешку с вручную введёнными или вставленными из picker токенами Home Assistant; управление видимостью слоёв и объектов стало явным.
  • Индикация устройств говорит на одном семантическом языке. Жёлтый означает фактическую работу, оранжевый — открыто/разблокировано, тревога имеет высший приоритет, недоступное устройство приглушается, движение является коротким событием, а присутствие длится весь детект. Подложка маркера, пульсация и заливка «Свет по источникам» согласованы для штор, климата, вентиляторов, реле, медиаплееров и других работающих устройств.
  • Комната объясняет себя в Просмотре. Glow и toast не перехватывают указатель; hover и тултип работают сквозь световое пятно, тултип показывает чистую площадь, а диалог устройства содержит явное действие «Скрыть»/«Показать». Акцент hover теперь идёт по тем же внутренним граням, что используются для площади; у вложенной комнаты выбирается грань, обращённая к родительскому полу, а двери, окна и виртуальные участки остаются разрывами.
  • Финальная коррекция тел стен. Тела формируются как объединение собственного кольца внешний − внутренний каждой комнаты. Чистый пол родительской комнаты больше не может вырезать половину вложенной стены толщиной 15 см либо оставить белую щель на сложном перекрёстке.
  • Документация заново собрана по продукту. Полное русское руководство, таблицы поведения настроек/устройств и план улучшений описывают выпущенный код; устаревшие аудиты и разовые debug-материалы перенесены в legacy/.

v1.59.0-rc.2 — 2026-08-06

Второй release candidate делает редактирование плана предсказуемым и обратимым, вводит единый инвариант сетки и завершает обновление документации.

  • Один инструмент — один результат. Закрытие виртуальной границы, объединение комнат и удаление комнаты теперь являются тремя отдельными действиями редактора плана. Delete удаляет только явно выбранную комнату, а инструмент открытия больше не закрывает существующий пунктирный участок. Рисование переименовано в «Контур комнаты»: оно создаёт замкнутую комнату, а не свободную стену.
  • Единая именованная история геометрии. Создание, Split, Merge, Resize, удаление комнаты, толщина стен, виртуальные границы и добавление, редактирование, перемещение или удаление дверей/окон используют общий стек Undo/Redo на 50 команд. Кнопки панели и Ctrl+Z, Ctrl+Shift+Z/Ctrl+Y работают с теми же именованными шагами; новая ветка очищает Redo. Эхо собственных серверных записей карточки сохраняет историю, а действительно новая внешняя ревизия безопасно её сбрасывает.
  • Сетка обязательна. Shift больше не позволяет поставить комнаты, маркеры, подписи, декор, мебель, подложку или проёмы между позициями сетки. Свободные точки попадают в узлы, а привязанные к стене объекты проецируются и квантуются вдоль неё. Shift остался только у явно угловых контролов. «Оптимизировать планы» исправляет старые и импортированные off-grid данные.
  • Понятнее обратная связь. Glow больше не перехватывает указатель, поэтому hover комнаты и тултип работают сквозь световое пятно. Контур hover в режиме просмотра охватывает весь физический периметр, включая общие толстые стены. В диалоге существующего устройства появилось явное нижнее левое действие «Скрыть»/«Показать». Из редактора статической карточки удалено неработавшее поле aspect_ratio. Toast-уведомления не перехватывают указатель и больше не могут перекрыть рабочую ручку инструмента под собой.
  • Документация и порядок в репозитории. Новое полное русское руководство и продуктовый аудит/план улучшений описывают фактическое поведение, матрицы настроек и устройств. Устаревшие аудиты, отклонённые дизайн-заметки и разовые debug-скрипты перенесены в legacy/; активная документация и автоматические сценарии приведены к новым контрактам сетки, Undo и раздельных действий.

v1.59.0-rc.1 — 2026-08-06

Первый release candidate линейки 1.59: безопасная оптимизация всех планов, понятнее редактирование объектов и обратная связь по комнатам, а также правки по результатам аудита beta.10.

  • Оптимизация всех планов с безопасной отменой. Бывшее действие «Выровнять по сетке» заменено на «Оптимизировать планы». В одном preview выполняются все актуальные без потерь миграции модели, привязка геометрии к сетке и стенам, материализация старых открытых границ, объединение соседних виртуальных частей и одинаковых по толщине реальных фрагментов. Config и layout записываются через устойчивое намерение для двух хранилищ; одна отмена доступна до следующей правки плана. Калибровка подложки, сохранённые виды, непривязанные позиции и пользовательские файлы не изменяются. Прерванная оптимизация или отмена завершается при следующем запуске интеграции.
  • Свойства объекта подложки по двойному клику. В режиме «Выбрать» редактора подложки двойной клик по любому объекту открывает его свойства: для надписи остаётся форма текста, а для линии, прямоугольника, овала и мебели появляется компактный диалог цвета и толщины линии (для замкнутых фигур — ещё и заливка). Черновик нового диалога переживает тёплый ре-маунт карточки.
  • Комната обозначает себя в Просмотре. При наведении подсвечивается именно текущая комната, в том числе без настроенной заливки или HA area. В тултипе также показывается форматированная чистая площадь пола; при толстых стенах используется тот же внутренний контур, что в подписях и измерениях Resize.
  • Жёлтая подложка работающего устройства остаётся универсальной. Устройство в семантическом состоянии «включено / работает» остаётся жёлтым и при заливке комнаты «Свет по источникам». Световое пятно дополняет состояние маркера, а не заменяет его.
  • Исправления по аудиту beta.10. Первое настоящее событие устройства после загрузки больше не поглощается перестроением реестра, а смена фактического источника маркера сразу сбрасывает короткий эффект старого источника. При редактировании старой живой надписи явная единица или непредставимый inline- грамматикой атрибут сохраняются без потерь; старый выбор attr: state превращается в токен состояния, а не в несуществующий атрибут. Фрагменты толщины стен теперь хранят точные нормализованные концы (старые midpoint-ключи продолжают читаться), переживают Resize и после закрытия виртуальных частей объединяются в максимальные сплошные отрезки одинаковой толщины. Пунктир виртуальных стен виден во всех редакторах даже при скрытых границах. Release CI теперь явно сообщает о проблеме порядка prerelease в GitHub/HACS, а не молча публикует beta, которую HACS не может обнаружить.

v1.59.0-beta.10 — 2026-08-05

Десятый pre-release линейки 1.59: единая система состояния устройств и набор точечных улучшений стен, света через дверные проёмы и надписей подложки.

  • Единый язык состояния устройств. Подложка и эффекты маркера теперь вычисляются одним семантическим resolver: жёлтый означает фактическую работу, оранжевый — открыто/разблокировано, недоступное устройство приглушается, а тревога всегда остаётся красной. В списке отображения остались «Значок», «Значок + активность» и «Значение вместо иконки»; удалённый режим «Только пульсация» при следующем сохранении переходит в «Значок + активность». Активность различает короткое событие, постоянное присутствие, механическое движение и фактическую работу, не создавая ложного события при загрузке или восстановлении связи. Короткие эффекты также сбрасываются при смене фактического источника маркера, а реальное открытие/закрытие шторы имеет приоритет над временной реакцией на нажатие.
  • Более понятная панель рисования стен. Бывшая кнопка «Добавить» в редакторе плана теперь называется «Стены», а поле толщины новых стен стоит сразу справа от неё, а не после остальных инструментов панели.
  • В режиме просмотра виртуальные стены находятся под телом толстой стены. Их сохранённая геометрия по-прежнему доходит до физической осевой линии, но в View штриховка скрывает концы пунктира внутри примыкающих толстых стен. Во всех трёх редакторах сохранённый пунктир и живой preview остаются поверх тела стены, чтобы весь отрезок был виден во время правки.
  • Свет из двери учитывает откосы толстой стены. Теперь свет проходит через дверной проём только по свободной ширине его физического тоннеля. Ближний и дальний внутренние срезы совместно ограничивают пучок, поэтому оба стеновых откоса корректно отсекают лучи смещённого источника; для стены без толщины сохраняется прежний сектор проёма.
  • Inline-переменные HA в тексте подложки. Одна надпись теперь может сочетать обычный текст и несколько ссылок {entity} / {entity:attribute}. Выбор состояния или атрибута вставляет токен в позицию курсора textarea. Отдельное поле единицы, подсказка про один слот и предпросмотр удалены; старые связанные надписи продолжают читаться и при редактировании переходят на inline-токены.
  • Канонические фрагменты стен. Соседние или перекрывающиеся виртуальные отрезки на одной границе одной пары комнат теперь объединяются в один open_span; части Split, принадлежащие разным парам комнат, остаются раздельными. Если после удаления последних виртуальных участков исходная стена снова целиком реальная и имеет одну толщину, её атомарные ключи схлопываются обратно в один ключ цельной стены.

v1.59.0-beta.9 — 2026-08-05

Девятый pre-release линейки 1.59: целостный resize смешанных виртуальных/толстых стен и чистые, видимые виртуальные Т-стыки.

  • Resize сохраняет смешанную виртуальную/толстую стену. Во время перетаскивания open_spans и целые/атомарные ключи толщины теперь двигаются вместе с polygon комнат; commit больше не удаляет толщину реальных остатков, а Undo восстанавливает всю транзакцию целиком.
  • Чистые Т-стыки с виртуальной стеной. Реальные плечи, принадлежащие разным контурам комнат, получают недостающий митровый угол у конца open_span вместо ступеньки. Пунктир и двухкликовое preview виртуальной стены рисуются поверх реального тела стены и видны до самой осевой линии стыка.

v1.59.0-beta.8 — 2026-08-05

Восьмой pre-release линейки 1.59: правки после аудита beta.7, fail-closed контур выпуска, паритет рендера стен в полной и статической карточках и солнечные лучи из внутренних углов толстых оконных проёмов.

  • Солнечные лучи начинаются из внутренних углов окна. При заданной толщине стены полное основание луча теперь лежит на внутренней грани проёма, поэтому оба чётких боковых ребра выходят точно из двух внутренних углов даже при косом солнце. Внутренний контур пола по-прежнему не даёт свету проходить через тело стены.
  • Правки по аудиту beta.7. Split поперёк одного open_span теперь сохраняет все валидные отрезки для разных пар комнат и строит open_to для обеих новых комнат, не превращая половину прохода обратно в сплошную стену (AUD-159B7-01).
  • Безопасный выпуск. release.yml разворачивает опубликованный tag в точный commit и ждёт зелёного завершения всех Validate этого SHA; отсутствие, ошибка, отмена или timeout не дают приложить asset (AUD-159B7-02). Для той же fail-closed политики добавлены автоматические negative tests.
  • Паритет тестов и рендера. Smoke общих настроек учитывает группу Walls, inventory считает методы классов и trail-тесты backend, а статическая карточка применяет тот же порог 3 px для отключения штриховки тонкой стены, что и полная (AUD-159B7-03, AUD-159B7-04).

v1.59.0-beta.7 — 2026-08-05

Седьмой pre-release линейки 1.59: правки по аудиту частичных стен и lifecycle, плюс цвет заливки под штриховкой.

  • Заливка + штриховка. Общая настройка fill_colors.wall_fill (по умолчанию непрозрачный белый) рисуется под диагональной штриховкой; штриховка остаётся. На экране тоньше ~3px — только заливка, чтобы штриховка не превращалась в шум.
  • Атомарные интервалы стен (AUD-159B6-01). Толщина и открытые отрезки идут по концам shared / open-span, а не по целой грани polygon — частичная общая стена больше не «протекает» толщиной на внешний остаток, а открытый отрезок не у midpoint грани снимает толщину только со своего куска.
  • Транзакция open_spans (AUD-159B6-02). open_spans в snapshot/Undo ресайза; Split / Merge / Delete пересчитывают spans и open_to одним шагом, без воскрешения legacy mid-mutation.
  • Схема backend open_spans (AUD-159B6-03) с cap / finite points / dedupe; frontend fail-soft отбрасывает битые записи.
  • Warm owner vs pending nav (AUD-159B6-04): принятие warm viewport сбрасывает глобальный pending mode из LS.
  • Smoke / inventory (AUD-159B6-06): двухкликовые фикстуры, island по id, inventory считает test и it.

v1.59.0-beta.6 — 2026-08-05

Шестой pre-release линейки 1.59: частичные открытые отрезки стен и «Удалить» по стенам.

  • Частичные открытые (виртуальные) отрезки стен (space.open_spans): два клика в «Открытая граница» (якорь → второй конец на общей стене, не дальше ближайших углов); курсор-крестик; проёмы на виртуальном удаляются и не ставятся; толщина сбрасывается при открытии и восстанавливается с соседнего глухого / 15 см при закрытии. Старый open_to на чтении = вся shared boundary.
  • «Удалить» по стенам: виртуальная → обычная; общая глухая → confirm merge (вся shared); внешняя или клик внутрь → confirm удалить комнату.

v1.59.0-beta.5 — 2026-08-05

Пятый pre-release линейки 1.59: переработка толщины стен (бесшовные кольца ±½, чистый пол/заливка/солнце), рисование с толщиной, новое пространство открывает редактор плана, hygiene по аудиту beta.4.

  • Рисование с толщиной стен. В панели Draw редактора плана — поле толщины (по умолчанию 15 см / дюймы HA). Новые комнаты получают её при сохранении; общие стены сохраняют значение соседа; пустое поле — без толщины. Живой превью толстых стен во время черчения.

  • Новое пространство открывает редактор плана. После сохранения только что созданного пространства включается Plan с инструментом «рисовать», чтобы пустой этаж не оставался в View без содержимого (как при онбординге первого пространства).

  • Переработка толщины стен (docs/WALL-THICKNESS.md). Стены растут ±½ от осевой (наружные и общие); тела — кольца outset−inset, объединённые в одну штриховку (бесшовные L/T); заливка/glow/солнце клипятся по внутреннему контуру; м² — чистый пол; лучи сужаются в туннеле проёма. Resize/undo/scale сохраняют и пере-ключают walls; проёмы привязываются по углу; режим редактора восстанавливается после can_write. Штриховка совпадает с цветом контура.

v1.59.0-beta.4 — 2026-08-05

Четвёртый пре-релиз ветки 1.59: толщина стен в редакторе плана и фикс — в редакторах под сеткой остаётся белый лист даже с загруженной подложкой.

  • Толщина стен в редакторе плана (docs/WALL-THICKNESS.md). У стены одна толщина (space.walls: [{ key, cm }]), ввод в см или дюймах по системе HA. Общие стены растут пополам в каждую комнату; наружные — внутрь; открытая граница толщины не принимает. Штриховка следует show_borders (в редакторе плана всегда видна); проёмы вырезают slab на всю глубину, дуга двери — от внутренней грани. Площадь, glow и солнце остаются на полигоне. Static space-card рисует те же тела. Юнит + smoke: test/wall-thickness.test.mjs, demo/smoke_wall_thickness.mjs.

  • В редакторах под сеткой остаётся белый лист и с подложкой. С загруженной картинкой плана редакторы плана / устройств / декора брали цвет карточки темы вместо белого листа рукописного плана. Теперь лист белый; Просмотр без изменений (тема под картинкой, белый без неё).

v1.59.0-beta.3 — 2026-08-05

Третий пре-релиз ветки 1.59: план можно обставить символами вида сверху в реальном размере, скрыть декоративный слой или проёмы в режиме просмотра, не теряя их, нацелить card-mod на стабильные data-*, а значения сущностей форматировать так же, как родная карточка «Подробнее» в HA. С этим же — полировка редакторов (ручки-бусины, редактор подложки открывается на своём инструменте, виртуальные стены следуют опции границ) и правки по аудиту (политика записи, дифференциация в README, жёстче валидация). Толщина стен утверждена только как спецификация (docs/WALL-THICKNESS.md); в коде её ещё нет.

  • Два новых переключателя в настройках пространства: «Скрыть декоративный слой» и «Скрыть проёмы». Оба только прячут. Фигуры, надписи, мебель и проёмы остаются в конфиге, и каждый слой видно в том редакторе, которому он принадлежит: декор — в редакторе подложки, проёмы — в редакторе плана. Слой, которого не видно, — это слой, который нельзя отредактировать. Смысл проёма не меняется вообще: свет по-прежнему проходит, солнце светит в окно, датчик открытия срабатывает — исчезает только символ. По умолчанию оба выключены и в этом состоянии ничего не хранят, так что все существующие планы читаются без изменений.

  • Если пространство не рисует границы комнат — оно больше не рисует и виртуальные стены. При выключенной опции «Всегда отображать границы комнат» пунктиры открытых границ оставались сами по себе, и на плане не было стен, кроме нескольких висящих в воздухе пунктирных кусков. Теперь они подчиняются той же опции. В редакторе плана пунктиры остаются — инструменту «Открытая граница» надо показывать то, что он правит.

  • Редактор подложки открывается на том инструменте, в честь которого назван. Если в пространстве есть картинка, инструмент «Картинка-подложка» включён сразу при входе, и картинка тянется мышью с первого движения, а не после того, как инструмент найден. Рамка вокруг картинки рисовалась при входе и раньше — то есть обещала, что картинку можно двигать; теперь обещание выполняется. «Выбрать» никуда не делся, он в одном клике и по-прежнему оставляет тело картинки одностопальцевому панорамированию.

  • Ручки по углам снова бусины, а не блины. Все угловые ручки карточки — рамка картинки-подложки, рамка масштаба комнаты и подгонка карты робота — рисуются кружком вчетверо меньше прежнего, а область нажатия у них прежняя, как уже сделано у текстового блока. Ручка размером с комнату закрывает собой то, что ею настраивают.

  • План можно обставить мебелью (docs/FURNITURE.md). В редакторе подложки появился седьмой инструмент — «Мебель»: палитра из ~30 символов вида СВЕРХУ, сгруппированных по-человечески (мебель / техника / сантехника / прочее — лестница, камин, ковёр), и ставятся они в реальном размере. Выбрали диван, поправили 2,2 × 0,9 м в двух полях, если ваш диван другой, кликнули по плану — и он занимает ровно 2,2 м вашего плана, потому что размер идёт через cell_cm пространства, как и любая другая длина в этой карточке. Пока предмет ставится или тащится, ближайшая стена в пределах ~30 см забирает его себе: спинка ложится вплотную к стене, предмет доворачивается по ней — «поставить кровать к той стене» это один клик. Shift магнит отключает, как отключает здесь любое прилипание. Поставленный предмет сразу выделен в инструменте «Выбрать» и носит рамку текстового блока: угловые ручки теперь меняют ширину и глубину НЕзависимо (кровать не становится глубже оттого, что стала шире), во время растягивания видны живые плашки с обоими размерами в метрах или футах, а ручка сверху поворачивает предмет шагом 5°. Символы нарисованы нами, прямо в коде: иконочный набор рисует диван спереди в квадрате 24 × 24, и растянуть такую картинку на прямоугольник 2,2 × 0,9 м — это получить иконку, лежащую на полу, а не план. Заодно это закрывает лицензионный вопрос начисто: ничего чужого в бандл не попало. У каждого предмета есть data-kind="furniture" и data-symbol, так что card-mod красит всю сантехнику одним правилом. Вид фигуры новый, миграции нет: план, написанный до этого, читается байт-в-байт.

  • У плана появились стабильные «крючки» для card-mod (docs/STYLING-HOOKS.md). У каждого объекта, который рисует план, теперь одна и та же опознавательная тройка: data-hp говорит, что это (device, room, room-label, opening, decor, space-tab), data-id — его идентификатор в вашем конфиге, а где уместно — data-entity, data-area и data-kind (дверь/окно, линия/прямоугольник/овал/текст). И это всё: мы не заводим поле для CSS, не делаем редактор тем и не поддерживаем пользовательские стили — мы просто перестаём мешать тому, кто уже поставил card-mod, и кому не хватало только чего-то устойчивого, за что зацепиться. Эти имена теперь контракт: переименовать хоть одно — ломающее изменение. Всё, чего в таблице НЕТ — оснастка редакторов, загрузочные классы, обёртки слоёв, разметка диалогов — контрактом явно не является. В документе таблица, три разобранных примера, ограничения shadow DOM (стилизовать хост ha-icon можно, его внутренности — нет) и прямая оговорка, что card-mod не наш и поддерживать его мы не будем.

  • Значения форматирует Home Assistant, а не мы. Везде, где карточка печатает состояние одной сущности — бейдж маркера в режиме «значение вместо значка», живая надпись в декоре, инфо-карточка устройства — теперь зовётся hass.formatEntityState (и hass.formatEntityAttributeValue для атрибута), ровно то же, что делает родная карточка «Подробнее» в HA. Значит, работает настроенная у датчика точность отображения (display_precision), разделитель дробной части — ваш, а on наконец читается как «Включено», а не как on. Единица попадает в строку ровно один раз: форматтер обычно приписывает её сам, а где не приписал — приписываем мы; своя единица на надписи декора ЗАМЕНЯЕТ единицу сущности, а не громоздится следом. Старый Home Assistant без этих методов ведёт себя в точности как раньше. Маленькие плашки °/% рядом со значком намеренно оставлены нашими: это производное показание (среднее по датчикам зоны, current_temperature климата), а не состояние сущности, и весь план читается как один прибор именно потому, что они одинаковые.

  • Ручки текстового блока стали в четыре раза меньше (просьба владельца). Кружки по углам и ручка поворота над выделенной надписью теперь размером с бусину, а не с кнопку, — рамка перестала закрывать те самые слова, которые обрамляет. Область, за которую можно взяться, не изменилась: невидимый пальцевый круг по-прежнему держит жест на прежних 1,8 % видимого вида — ровно то же разделение, что у ручек ресайза стен.

  • Толщина стен — утверждённая спецификация (docs/WALL-THICKNESS.md). Пока не реализована; в документе модель (толщина у стены, а не у ребра комнаты), ключи сегментов, пережившие ресайз, штриховка без влияния на площадь и отрисовка проёмов в толстой стене.

Правки по аудиту (legacy/docs/audit-v1.58.0/AUDIT-RECOMMENDATIONS.md, 2026-08-05):

  • Политика записи выровнена (P0-4). admin_only по умолчанию включён для новых установок и при отсутствии ключа; houseplan/config/get отдаёт can_write из may_write, а редакторы карточки следуют этому флагу. Отсутствующий hass.user больше не открывает редакторы «на удачу».
  • Дифференциация в README (P0-3). Таблица сравнения ставит House Plan против YAML/SVG и против GUI-рисовалок (напр. easy-floorplan): общий .storage-план и комнаты по зонам, а не CAD мебели.
  • Жёстче валидация (P3-4). binding маркера — только device:… / entity:… / virtual; ripple_color — #rrggbb; размеры decor строго положительные; id пространства по SPACE_ID_RE.
  • Гигиена (P3-5). В quality_scale.yaml верный файл теста config-flow; card-level tap_action помечен как deprecated/ignored.

v1.59.0-beta.2 — 2026-08-04

Второй пре-релиз ветки 1.59, и он про надписи на плане. Надпись в декоре умеет показывать живое значение сущности — подпись становится показанием, не превращаясь в язык шаблонов. Сам текстовый блок лишился выбора из трёх размеров шрифта: он масштабируется углами и поворачивается ручкой, как любой другой объект плана, и в нём может быть несколько строк. Под этим закрыты три находки аудита beta.1 — две одинаковые карточки больше не делят одну тёплую памятку, быстрый двойной ре-маунт не съедает черновик, а просроченный диалог не держит в памяти файл плана.

  • Надпись на плане может показывать живое значение (docs/LIVE-TEXT.md). У текстовой фигуры появились три необязательных поля — entity, attr, unit, — а её text стал шаблоном, в котором {} — место значения: Бак {} читается как Бак 68 %. Без плейсхолдера значение добавляется в конец; без сущности надпись остаётся ровно той статичной надписью, какой была. Единица берётся из сущности, если не задать свою; мёртвая, неизвестная или отсутствующая сущность показывает прочерк, а не исчезает молча. Ничего не округляется и не переформатируется — значение такое, каким его отдаёт Home Assistant: округление живёт в display_precision сенсора, и дублировать его здесь означало бы две правды. Это не язык шаблонов: одно значение, одно место, нечего написать неправильно.

  • В форме надписи появились пикер сущности, пикер атрибута и живой предпросмотр. Список атрибутов — собственные атрибуты выбранной сущности, в поле единицы подсказкой стоит единица сущности, а предпросмотр рисуется той же подстановкой, что и сам план.

  • Размер текстового блока задаётся углами, поворот — ручкой. Выбор из трёх размеров шрифта убран: выделите надпись и тяните угол, чтобы менять размер, или крутите ручку над блоком — шаг 5°, Shift для любого угла (механика та же, что у рамки картинки-подложки). Надписи, сделанные со старыми «Мелкий/Средний/Крупный», возвращаются ровно в своём прежнем размере, а первая же протяжка заменяет эту настройку тем масштабом, который она означала.

  • В надписи может быть несколько строк. Поле текста стало многострочным: ваши переводы строк сохраняются и рисуются как переводы строк, по центру, а блок растёт вокруг своей точки. Автопереносов нет — надпись, которая перекомпоновывается при каждом изменении состояния, это надпись, которая прыгает по плану.

  • Инструмент «текст» открывает ту надпись, по которой вы нажали. Рисующие инструменты владеют холстом (начало новой линии должно вставать ровно на конец старой), и это остаётся в силе — с одним исключением: нажатие на существующую надпись инструментом «текст» открывает ЕЁ форму, а не создаёт вторую поверх. По пустому месту и по нетекстовой фигуре по-прежнему создаётся новая надпись.

  • Две одинаковые карточки на одной странице больше не делят тёплую памятку (AUD-159B1-01). Ключом памятки были размер окна и конфиг карточки — он не различает два РАЗМЕЩЕНИЯ одного и того же конфига: последним писателем оказывался сосед, и карточка, пересозданная на своём месте, просыпалась с чужим этажом, чужим режимом и чужим зумом, а черновик её настоящего предшественника съедался проверкой режима. Теперь памятка хранит запись на каждое РАЗМЕЩЕНИЕ: в ключ вошёл location.pathname (вид дашборда), а внутри ключа запись занимается по DOM-слоту — родительский элемент и позиция в нём, — и запись живого соседа не усыновляется никогда. Если два размещения действительно неразличимы, усыновляется только осевшая высота шапки (она у них одинаковая), но не вьюпорт и не диалог.

  • Быстрый двойной ре-маунт больше не уничтожает черновик (AUD-159B1-02). disconnectedCallback() сбрасывал флаг «я ещё должен предшественнику диалог» ДО снимка, поэтому промежуточный экземпляр в цепочке A→B→C писал dlg: null поверх черновика, который сам ещё не успел восстановить, и третьему не доставалось ничего. Снимок теперь делается, пока флаг ещё поднят: несохранённый диалог просто едет по цепочке, пока кто-нибудь не проживёт достаточно долго, чтобы его открыть.

  • Просроченный диалог больше не держит свой payload (AUD-159B1-03). 10-секундный TTL был правилом, которое проверяли только в момент воскрешения; сама запись продолжала держать диалог — а у диалога пространства это целый файл плана в base64 — до перезагрузки страницы. Отсоединение теперь заводит защищённую очистку, которая освобождает payload ровно тогда, когда он перестаёт быть воскрешаемым (и убирает устаревший слот, чтобы следующее усыновление снова было однозначным).

v1.59.0-beta.1 — 2026-08-04

Минорный пре-релиз: карточка переживает пересоздание в Lovelace бит-в-бит — панорамирование, зум и даже открытый диалог возвращаются вместе с ней, — у солнечных лучей появляется тонкая кромка, за счёт которой их видно на белой бумаге, «+» для добавления пространства уходит из редактора Плана в ряд вкладок, а список уже загруженных на сервер планов перестаёт схлопываться в полоску.

  • Карточка больше не дёргается — и не теряет открытый диалог — при возврате на вкладку (docs/WARM-REMOUNT.md). Lovelace пересоздаёт элемент карточки при переподключении websocket; v1.58.0 убрала мигание прелоадера, но новому экземпляру всё ещё приходилось угадывать, на что смотрел умерший. Измерено: ПАН не переживал экземпляр вообще (вид, отъеханный в угол, возвращался в центр: x=50 → x=250 при зуме 2.2), а зум РЕДАКТОРА намеренно не сохраняется, тогда как РЕЖИМ редактора — сохраняется; поэтому ре-маунт внутри редактора возвращался на 1.0 вместо 3.0. Тёплая памятка теперь несёт весь вьюпорт (пространство, режим, зум, сам прямоугольник _view, снимок вида для выхода из редактора, кадр «показать дальние», выбранный инструмент и выделение, локальный переключатель «показать скрытые») — восстанавливается тот же ПРЯМОУГОЛЬНИК, а не то же число зума: бит-в-бит, проверено покадрово.

  • Открытый диалог переживает пересоздание вместе с черновиком. Памятка — состояние модуля, её никто не сериализует, поэтому живой объект-черновик (в том числе наполовину заполненный диалог устройства с уже загруженными PDF) переезжает бесплатно. Правило: воскрешаем черновик, не воскрешаем решение — подтверждения «Выровнять всё по сетке» и объединения комнат намеренно НЕ восстанавливаются (модалка, всё содержимое которой «нажмите OK, и я перепишу ваш план», не должна встречать вернувшегося пользователя), как и подтверждение действия по тапу (оно держит замыкание на мёртвый экземпляр), мастер импорта этажей (он открывается сам) и любой диалог с записью в полёте. Воскрешение требует того же пространства и того же режима, происходит не более одного раза (снимок съедается) и только если прошлый экземпляр умер не раньше чем 10 с назад. Осознанно закрытый диалог — Esc, «Отмена» или «Сохранить» — записывает в памятку null на ближайшей же отрисовке, поэтому вернуться уже не может (smoke_warm_dialogs).

  • У солнечных лучей появилась кромка (docs/SUN.md, «The rim»). На белом плане клин света был почти не виден, и прозрачностью это не лечится: рисовать свет — значит добавлять яркость, а у белой бумаги её больше нет. Теперь у каждого клина по двум БОКОВЫМ рёбрам — тем, что уходят вглубь комнаты от концов окна, — идёт тонкая чёрная линия в 1 px. Она гаснет ровно вместе с заливкой: та же ось градиента, та же кривая, тот же порог 85 % (второй градиент собран на стопах первого), остаётся ровно в один экранный пиксель при любом зуме (non-scaling-stroke), обрезается комнатой так же, как сам клин, и живёт в том же слое — поэтому порог 3°, двухсекундная анимация, облачность, ночь и редакторы управляют ею сами, без единой строки отдельной логики. Максимальная непрозрачность 0.42 — подобрана и на белом листе, и на тёмном холсте glow. Модель «тень вместо света» из legacy/docs/SUN-CONTRAST.md отклонена в пользу этой кромки; тот файл теперь фиксирует решение и хранит анализ, из которого оно выросло.

  • «+» для добавления пространства — не инструмент редактора. Кнопка рядом с названиями этажей существовала только внутри редактора Плана, поэтому добавить второй этаж означало сначала открыть редактор, который тебе не нужен. Добавление пространства — это навигация, а не разметка: теперь «+» стоит в ряду вкладок во ВСЕХ режимах — в Просмотре и во всех трёх редакторах, ровно там же, где уже живёт шестерёнка пространства, и по тому же правилу (только администратор). Киоск — витрина: там кнопка не отрисовывается вовсе (шапка у него display:none, а скрытый, но присутствующий узел всё ещё кликабелен из скрипта). Ряд вкладок по-прежнему переносится на 390 px (smoke_gear_tabs меряет переполнение).

  • «Уже загруженные» снова показывают планы. В обоих диалогах пространства (создание и настройки) список планов, сохранённых на сервере, схлопывался в тонкую скруглённую полоску: строки отрисовывались, а сам контейнер имел высоту 14 px. Прокручиваемый блок — это flex-элемент с автоматическим минимальным размером ноль, а тело диалога — flex-колонка с потолком 66 vh, так что сжать до нуля можно было именно список. Теперь он не сжимается и держит собственный минимум: одновременно видно до пяти миниатюр, остальные прокручиваются. Состояния «пусто» и «загрузка» больше не режут собственный текст (smoke_plan_picker меряет высоты — старый смок считал только узлы DOM и проходил).

v1.58.0 — 2026-08-04

Минорный релиз: картинка-подложка становится объектом, который можно двигать и масштабировать, непрозрачный лист плана переопределён как контуры комнат, рисующие инструменты декора перестают перехватывать клик по чужой фигуре, а «Выровнять всё по сетке» честно говорит, что собирается сделать.

Картинку-подложку можно двигать и масштабировать (docs/BACKDROP.md)

  • Картинка плана больше не прибита гвоздями. В редакторе подложки у неё появляется рамка трансформации: тянешь за тело — двигается, тянешь за угол — меняет размер равномерно (пропорции сохраняются, противоположный угол стоит на месте). Пока тянешь, плашка пишет реальный размер картинки в метрах (или футах) — через cell_cm пространства. Положение и размер ложатся на сетку, Shift снимает привязку. Больше ничего не двигается: комнаты, двери, устройства и декор остаются на месте; поворота нет.
  • Три новых необязательных поля пространства: plan_x, plan_y, plan_scale. Их отсутствие — ровно прежнее поведение, поэтому старые планы рисуются один в один и ничего не мигрируется. Кнопка «Вернуть картинку» в панели их удаляет.
  • Непрозрачный лист-бумага теперь всегда строится по контурам комнат. Раньше при картинке бумагой был её прямоугольник; теперь картинка рисуется НА бумаге — над ней и под стенами. Цвет сцены (bg_color, небо daynight) поэтому доходит до наружных стен и на плане с картинкой. Осознанное следствие: у прозрачной картинки без нарисованных комнат сквозь неё виден фон сцены.
  • «Вписать всё» учитывает сдвинутую и отмасштабированную картинку — потерять её за экраном больше нельзя.

Рисующие инструменты больше не хватают фигуру под курсором

  • Рисующий инструмент владеет холстом. Когда в редакторе декора выбрана Линия, Прямоугольник, Овал или Текст, клик по существующей фигуре начинает НОВУЮ фигуру, а не выделяет старую — поэтому линию можно начать ровно на конце другой линии, а прямоугольник нарисовать поверх залитого. Двойной клик по тексту под рисующим инструментом тоже больше не открывает его на правку. Та же инертность работает в инструменте «Картинка-подложка»: лежащая поверх плана фигура декора не должна мешать тащить саму картинку.
  • «Выбрать» и «Стереть» не изменились: там фигуры по-прежнему кликабельны — выделять и удалять положено именно ими.

«Выровнять всё по сетке» держит обещание (AUD-158B1-01)

У действия нет отмены, поэтому диалог подтверждения — единственная защита, а он занижал масштаб происходящего.

  • Максимальный сдвиг измеряется по той геометрии, которая записывается, а не по промежуточной. У прямоугольника мерились только исходный угол и дальний — поэтому доводка до минимального размера, которая потом раздвигает слишком узкую коробку, в замер не попадала, а два угла, где ошибка по X одной стороны складывается с ошибкой по Y другой, не смотрели вовсе. Обычная коробка могла сдвинуться в √2 раза дальше обещанного, а коробка тоньше шага сетки — намного дальше.
  • Каждое пространство переводится через свой cell_cm. Диалог брал один нормализованный максимум и умножал его на размер клетки ПЕРВОГО пространства: на плане, где первый этаж нарисован по 5 см на клетку, а мансарда по 100 см, обещали 2,5 см вершине, которая уезжала на 50 см. Отчёт теперь несёт максимум в сантиметрах и пространство, которому он принадлежит, а диалог называет это пространство, если их больше одного.
  • Последняя десятая сантиметра округляется вверх: обещание не может оказаться меньше сделанного.

Проём, у которого неверен только угол, теперь можно исправить (AUD-158B1-02)

  • Окно, стоящее ровно на своей стене, но с неправильным angle, возвращалось с changed: false — диалог писал «двигать нечего» и не показывал кнопку, хотя возвращённый план отличался от поданного. Такие проёмы нельзя было выровнять никогда. Угол теперь входит в разницу; диалог считает такие проёмы отдельно, а смещение меряется по КОНЦАМ проёма, так что поворот на месте в отчёте тоже не бесплатен. Разворот проёма на 180° по-прежнему считается исправлением, но ничего не смещает.

v1.57.0 — 2026-08-04

Минорный релиз: холст становится бесконечным — больше нет «размера плана» и края, за который нельзя выйти, — плюс тап-действие для штор и жалюзи, полировка солнца, живые линейки при размещении проёмов и тёплый ре-маунт без миганий.

Бесконечный холст (docs/CANVAS.md)

Понятие «размер сетки» или «размер плана» упразднено. Холст условно бесконечен — допустима любая координата, а предел ±5000 оставлен только как страховка от мусора (около 60 км плана в масштабе самой карточки).

  • Если ваш план «уехал» за границу — теперь он просто работает. Некоторые планы выросли за пределы старого квадрата, и устройства снаружи было не поставить; единственным выходом было перерисовать всё заново. Этого ограничения больше нет: рисуйте, двигайте и ставьте устройства где угодно, перерисовывать ничего не нужно. Сам сохранённый план не тронут — координаты значат ровно то же, что и раньше, никакой миграции.
  • Существующие планы открываются в точности как прежде. Проверено на реальном конфиге с тремя этажами: стартовые рамки совпадают с v1.56.0 бит-в-бит.
  • Стартовый вид строится по тому, что реально нарисовано. view_box стал необязательной подсказкой только для самого первого кадра; дальше вид всегда считается по фактическому содержимому, с отбраковкой выбросов — одна случайная комната больше не сжимает весь план.
  • Панорамирование при любом зуме и во всех редакторах. Раньше план можно было тащить только выше 100%; теперь — на любом масштабе и в любом режиме правки, с запасом в один экран вокруг содержимого.
  • Зум-аут до 3× содержимого — видно и весь план, и воздух вокруг него.
  • Кнопка «Вписать всё» — одно нажатие возвращает кадр по всему содержимому.
  • Стрелка «дом там» появляется, когда вы уехали от плана, и показывает дорогу обратно.
  • Адаптивная сетка. Шаг сетки выбирается по зуму (1 / 2 / 5 / 10 … 1000) вместо фиксированной клетки, а точки остаются приглушённой подсказкой и не спорят с планом.

Шторы и жалюзи

  • Новое тап-действие «Открыть/закрыть» для штор. Закрытая — откроется, открытая — закроется, а штора в движении остановится. Предлагается только для незащищённых классов: гаражные ворота, двери и калитки намеренно остаются на информационном диалоге.
  • Состояние видно по самому значку: он морфится между открытой и закрытой формой (таблица классов штор плюс алиасы по базовой иконке) и мягко пульсирует кольцом, пока штора едет.
  • У шторы никогда нет цветной подложки. Заливки по состоянию за маркером cover не будет.
  • Cover ищется среди всех сущностей маркера, а не только среди основной — частый случай для устройств Aqara и zigbee2mqtt, — а явно выбранное «Открыть/закрыть» всегда имеет приоритет индикации.

Полировка солнца

  • Лучи ярче и короче. Непрозрачность поднята до 0.30, длина уменьшена на 30%, боковые грани снова чёткие.
  • Свет затухает только вдоль луча и гарантированно доходит до нуля раньше конца клина — клин теперь обрезается по расстоянию вдоль луча, и «светлый бортик», вылезавший на низком косом солнце, исчез.
  • Жёсткий порог в 3°. Лучи появляются и исчезают на трёх градусах высоты солнца с двухсекундной анимацией, а не вкатываются плавно.
  • Фон «день/ночь» догоняет солнце при возврате на вкладку: разрыв больше 3° перекрашивается мгновенно, обычный ход по-прежнему дышит плавно.

Прочее

  • Живые линейки и магнит центра теперь и при РАЗМЕЩЕНИИ проёма, а не только при перетаскивании; расстояния считаются по ребру своей комнаты.
  • Тёплый ре-маунт. Когда Lovelace пересоздаёт карточку при реконнекте, прелоадер больше не показывается и план не мигает, а обрыв WebSocket никогда не очищает уже показанный план.
  • Цвет границ и названий комнат по умолчанию — тёмно-серый #55606c вместо синего акцента. Если цвет выбран явно, ничего не меняется.
  • Блок «О карточке» в конце общих настроек — версия, ссылки на GitHub и Telegram.
  • Шаг угла значка — 5°.
  • Находки аудитов: кэш солнечных лучей переживает локальные правки, скрытые устройства не растягивают кадр, кадр редактора не протекает в режим просмотра, комната-выброс не раздувает размер иконок, а киоск-пан остаётся паном и не перелистывает этаж.

v1.56.0 — 2026-08-03

Минорный релиз: на план приходит солнце — компас, фон «день/ночь» и настоящий свет из окон — плюс температура с климатических устройств, дизайн-токены в UI, живые линейки при перетаскивании проёмов и фикс кэша солнечных лучей.

  • Солнце на плане дома (docs/SUN.md). Скажите плану, где север — круговой компас в общих настройках с переопределением в каждом пространстве — и карточка начинает жить по sun.sun самого Home Assistant:
    • Фон «день/ночь» (bg_mode: daynight): сцена за планом следует за высотой солнца — белый ясный день, тёплое золото золотого часа, остывающие сумерки, глубокая ночь. Сам план ночью приглушается лишь на ~10%, комнаты остаются читаемыми.
    • Свет из окон (sun_rays): каждое окно на внешней стене пускает в свою комнату мягкий клин света — обрезанный контуром комнаты, теплее у горизонта, длинный на рассвете и закате, короткий в полдень и гаснущий ночью.
    • Облачность — по желанию (weather_entity): укажите weather-сущность, и пасмурное небо приглушит клинья, а дождь или снег погасит совсем. Мёртвый датчик солнце не выключает.
    • План теперь лежит на непрозрачном листе бумаги, повторяющем контуры комнат: фон сцены — bg_color или небо «дня/ночи» — виден только вокруг стен и не просвечивает сквозь комнаты; в режиме «день/ночь» у листа мягкая тень.
    • Пока компас не задан, фича полностью молчит; без sun.sun диалог настроек объясняет, почему.
  • Температура с климатических устройств. Новый чекбокс в диалоге устройства выводит current_temperature кондиционера или термостата на плашку у значка и учитывает её в средней температуре комнаты.
  • Модернизация UI. Токен-проход по styles.ts — 209 «зашитых» значений сведены в шкалы отступов/радиусов/шрифтов/теней — и родные ha-switch / ha-slider в диалогах с жёстким фолбэком на старые инпуты там, где компоненты HA недоступны.
  • Живые линейки проёмов. При перетаскивании двери или окна теперь видны живые расстояния до обоих концов стены — по ребру своей комнаты; пунктирная направляющая и мягкий магнит центрируют проём на стене (Shift отключает магнит).
  • Фикс DEV-B701-01 — кэш солнечных лучей теперь сбрасывается и локальными правками геометрии: клин больше не «застревает», если подвинуть стену до подтверждения сервера.

v1.55.3 — 2026-08-02

Патч-релиз: два исправления вуали первого открытия из v1.55.2, найденные adversarial-аудитом жизненного цикла (AUD-1552-01/02).

  • Пересборка дашборда во время первого открытия больше не оставляет план скрытым навсегда (AUD-1552-01). Отключение карточки при поднятой вуали (Lovelace пересоздаёт DOM, переключение вью перемонтирует карточку) убивало таймеры стабилизации, но сохраняло их id — и вуаль уже никогда не снималась. Теперь жизненный цикл вуали перезапускается при каждом повторном подключении — с новым отсчётом и безусловным жёстким таймаутом; затухание тоже переживает размонтирование посреди fade.
  • Вуаль больше не открывается рано, прямо перед поздней панелью (AUD-1552-02). Два одинаковых замера высоты на 200/400 мс открывали план уже на ~400 мс, и хром Home Assistant, пришедший на 450+ мс, прыгал на видимом плане — ровно то, от чего вуаль должна защищать. Теперь вуаль держится полное защитное окно с trailing quiescence (изменения высоты у края окна продлевают ожидание), а короткое время после открытия поздний сдвиг применяется плавно (transition высоты), а не скачком. Намеренные изменения высоты (вход в редактор) по-прежнему применяются мгновенно.

v1.55.2 — 2026-08-02

Патч-релиз: спокойное первое открытие — без вспышки зума и прыжков макета, пока Home Assistant догружается, — плюс новая настройка цвета фона и две полировки редактора.

  • План больше не мигает видом по умолчанию перед сохранённым зумом (HP-1551). Сохранённый зум применялся на такт позже первого рендера: карточка на кадр рисовала стандартную подгонку и лишь потом прыгала к вашей позиции. Теперь он применяется синхронно, до первой отрисовки — план появляется ровно там, где вы его оставили.
  • Вуаль первого открытия прячет план, пока макет не устаканится (HP-1552). Пока Home Assistant догружает свои панели, высота сцены может меняться несколько раз, и план заметно прыгал вместе с ней. Теперь карточка ждёт под тёмной вуалью с пульсирующим контуром домика, пока высота не перестанет меняться, и показывает план уже на месте. В режиме киоска вуаль не показывается вовсе.
  • Новая настройка: цвет фона вокруг плана (HP-1554). Области вокруг плана теперь можно задать любой цвет — в общих настройках для всей карточки или отдельно для каждого пространства. Бэкенд проверяет значение как hex-цвет #rrggbb.
  • Круглые концы и стыки линий в редакторе подложки (HP-1553). Штрихи обрывались и стыковались квадратными срезами; теперь концы линий и углы скруглены — обведённые стены и контуры выглядят аккуратно.
  • Ручки стен в инструменте Resize теперь выглядят по делу. Они вдвое меньше прежних, несут значок «стенка со стрелочками», повёрнутый вдоль своей стены, и показывают курсор grab — при этом зона клика осталась прежней, большой.

v1.55.1 — 2026-08-01

Патч-релиз: четыре находки аудита v1.55.0, все — в новом инструменте ресайза комнат (HP-1550-01..04).

  • Отложенное сохранение больше не утаскивает живое перетаскивание на сервер (HP-1550-01). Превью ресайза писалось прямо в общий объект конфигурации, и отложенная запись, оставшаяся в очереди от прошлой правки, могла сфотографировать его посреди перетаскивания — ресайз, который вы затем отменили по Esc, тихо оставался на сервере и возвращался после перезагрузки. Теперь живая геометрия живёт в отдельном слое, который видит только отрисовка; в конфигурацию она попадает ровно один раз — при отпускании ручки.
  • Прерванное перетаскивание отменяется, а не сохраняется (HP-1550-03). Когда систему прерывает сам поток ввода — переключение приложения, ладонь на планшете — инструмент считал это отпусканием и сохранял недоделанную геометрию. Теперь такие прерывания идут тем же путём, что и Esc: исходная геометрия возвращается, без шага отмены и без записи.
  • Дверь посреди стены больше не мешает менять её размер (HP-1550-04). Невидимая зона клика двери ложилась поверх ручки стены, и такую стену нельзя было схватить ни у одной из комнат. В инструменте ресайза ручки теперь главные в hit-тесте (проёмы там всё равно не редактируются — они просто едут вместе со стеной), а во всех остальных инструментах редактора проёмы кликаются как раньше.
  • Минимум ~30 см теперь держится для комнаты любой формы (HP-1550-02). Старая проверка мерила только параллельные противоположные стены: треугольную комнату можно было сплющить в щепку, а повёрнутая комната при масштабировании незаметно уводила свою реальную короткую сторону ниже порога. Обе меры теперь не зависят от ориентации: перетаскивание стены упирается в любое препятствие на её пути (вершину треугольника, косую стену), а рамка масштабирования использует истинную минимальную ширину комнаты. Комнаты, уже более тонкие, по-прежнему можно улучшать, но не ухудшать.

v1.55.0 — 2026-08-01

Минорный релиз: комнаты больше не высечены в камне — новый инструмент «Размер» в редакторе плана меняет их габариты перетаскиванием стен; плюс обе находки аудита v1.54.3 (HP-1543-01/02).

  • Ресайз комнат — новый инструмент «Размер» в редакторе плана (спека: docs/RESIZE.md). У каждой стены появляется ручка в середине; тяните её — и стена едет целиком, оставаясь параллельной себе, с привязкой к сетке. Работает и для полигонов (включая Г-образные), и для старых прямоугольников.
  • Общие стены всегда двигаются вместе. Если перетаскиваемая стена совпадает с границей соседа, сосед следует за ней: ваша комната растёт — соседняя сжимается, щели и наложения не появляются по построению. На Т-стыках следует только совпадающий отрезок, при необходимости в контур соседа вставляются новые вершины.
  • Живые цифры во время перетаскивания. Перетаскиваемая стена и две смежные показывают длины в реальных метрах/футах, а площадь комнаты в м² обновляется в центре комнаты вживую — для общей стены — площади обеих комнат.
  • Стена упирается там, где должна. Комната не может стать тоньше ~30 см (ни своя, ни соседская), контур не пересекает сам себя, растущая стена останавливается о чужие комнаты и острова, а двери и окна — якоря: проём едет вместе со стеной, и стена с проёмами не может стать для них слишком короткой.
  • Рамка масштабирования всей комнаты. Клик по комнате в инструменте выбирает её: перетаскивание уголка пунктирной рамки пропорционально масштабирует контур — с теми же упорами.
  • Esc и Ctrl+Z. Esc отменяет текущее перетаскивание и возвращает исходную геометрию; одно отпускание ручки — один шаг отмены, Ctrl+Z откатывает до 30 шагов, пока инструмент активен.
  • Исправлено: детекция наложения комнат пропускала равновысокие прямоугольники, надвинутые друг на друга. Найдено при постройке упоров ресайза; slide-over теперь считается наложением везде, где используется эта проверка, включая инструмент рисования.
  • Исправлено (HP-1543-01): редакторский зум оставался на экране после смены этажа внутри редактора. Выход из редактора на другом этаже, чем тот, где начинали, пропускал восстановление вьюпорта и оставлял рабочий зум редактора в режиме просмотра. Теперь такой выход откатывается к сохранённому view-зуму текущего этажа.
  • Исправлено (HP-1543-02): датчик движения, сработавший повторно посреди вспышки, оставался невидимым. Быстрое off→on до конца текущей вспышки не перезапускало CSS-анимацию — второе срабатывание ничего не проигрывало. Теперь каждый зафиксированный trip получает новую идентичность анимации, и вспышка стартует заново; при prefers-reduced-motion остаётся статичное кольцо, как и раньше.

v1.54.3 — 2026-08-01

Патч-релиз: три раунда качества жизни — спутники значка теперь слушаются пер-девайсного множителя размера, редакторский зум перестал протекать в режим просмотра, а датчики движения получили собственный визуальный язык.

  • Пер-девайсный множитель размера теперь масштабирует и спутники значка. Репорт владельца со скриншотом: у уменьшенного устройства бейдж значения, плашки температуры и влажности, подпись LQI, точка «new» и кольцо тревоги оставались полноразмерными и нависали над крошечным значком. Теперь все спутники следуют за множителем вместе со значком.
  • Редакторский зум — рабочий инструмент, а не сохранённая настройка. Приблизить до 500%, чтобы точно поставить маркер, и закрыть редактор раньше означало оказаться в режиме просмотра на тех же 500%. Выход из любого редактора теперь восстанавливает тот вид, который был в режиме просмотра до начала правок.
  • Исправлено: редакторский зум всё ещё «воскресал» при переключении этажей. Редакторский вьюпорт гонялся с пер-этажным хранилищем вида и побеждал: переключите этаж во время правок — и 500% записывались как сохранённый вид этого этажа и встречали вас в следующий раз (шаги воспроизведения — от владельца). Теперь редакторский зум в хранилище не пишется никогда.
  • Сработавшие датчики движения и присутствия сигнализируют жёлтым кольцом. Правило прежнее — «подложка = включено»: движение — разовая вспышка, три удара в момент обнаружения, без пульсации на хвосте cool-down; occupancy/presence держат статичное кольцо, пока докладывают о присутствии.
  • Только для стенда: services.yaml для стендового demo_guard, чтобы hassfest оставался зелёным; в саму интеграцию это не попадает.

v1.54.2 — 2026-07-31

Патч-релиз: единственная оставшаяся находка повторного аудита v1.54.1 (HP-1541-01), закреплена регрессиями с обеих сторон контракта.

  • Исправлено: пылесос с собственным selected_map: 0 делил калибровку и след между двумя id карты. Контракт map id из v1.54.1 («побеждает первое существующее значение, и ноль — значение») был применён к source-сущности, но не к фолбэку карточки на selected_map самого пылесоса: фронтенд по-прежнему судил по «истинности» и превращал 0 в default, тогда как серверный рекордер писал уборку под 0. Калибровка сохранялась под ключом, которого рекордер не использовал, а записанный след после перезагрузки не отображался. Теперь фолбэк живёт по тому же правилу «не-null» с обеих сторон (vacMapIdWithFallback в карточке, resolve_map_id на сервере), с кросс-регрессиями для selected_map = 0, "0" и "".

v1.54.1 — 2026-07-31

Патч-релиз: всё, что нашёл adversarial-аудит v1.54.0 (HP-1540-01..06), каждый фикс закреплён регрессией, падающей на старом коде.

  • Исправлено: первая калибровка только что обнаруженного пылесоса молча ничего не делала. Пока диалог устройства ни разу не сохранён, у робота нет маркера в конфиге — а раздел «Живая позиция» уже полностью интерактивен: каждый обработчик тихо выходил, но автокалибровка всё равно объявляла успех. Теперь любая правка пылесоса сама создаёт маркер, а тост успеха появляется только после того, как матрица действительно легла в конфиг.
  • Исправлено: робот с первой картой map_index: 0 терял серверный след. Бэкенд выбирал id карты по «истинности» и выбрасывал ноль, так что записанная уборка хранилась под ключом, который карточка не искала. Теперь обе стороны живут по одному явному правилу: побеждает первое существующее значение, и ноль — значение.
  • Исправлено: один робот на двух этажах писал историю только для последнего этажа. Рекордер держал по одному маркеру на источник, и второе размещение молча вытесняло первое. Теперь каждый маркер источника получает свою копию уборки.
  • Исправлено: автокалибровка не видела планы из прямоугольных комнат. Сопоставление принимало только полигоны, а потом сваливало вину на имена комнат. Старые прямоугольники считаются, как и во всей остальной карточке.
  • Исправлено: пересекающиеся обновления рекордера текли подписками. Два одновременных сохранения конфига могли подписаться оба и бросить один callback до перезапуска; обновления теперь сериализованы, а teardown выигрывает у любого ещё летящего обновления.
  • Тосты «нет комнат» / «имена не совпали» и docs/VACUUM.md больше не отправляют к несуществующей калибровке по трём точкам — они ведут к «Подогнать вручную», которая существует.

v1.54.0 — 2026-07-31

Роботы-пылесосы вживую

План теперь показывает робота за работой. Маркер устройства остаётся там, куда вы его поставили — это база, — а по плану в реальном времени едет круглая шайба, «выливая» путь из-под себя. Только отображение: карточка ничего роботу не командует.

  • Калибровка без арифметики. «Настроить автоматически» сопоставляет комнаты робота с вашими по именам и решает привязку в один клик. Если имена не совпали, панель подгонки кладёт комнаты робота на план пунктирным призраком: перетащите на место, растяните за уголки, поворот на 90° и зеркало — двумя кнопками. Зеркало включено по умолчанию: у всех измеренных нами роботов ось Y перевёрнута относительно экрана. Своя калибровка на каждую карту робота, поэтому два этажа не мешают друг другу.
  • Путь пишется на сервере. Интеграция следит за роботом сама, поэтому след записывается даже без открытой карточки, переживает перезагрузку страницы, и все экраны видят одну и ту же линию. Хранятся текущая уборка и одна предыдущая — сразу видно, где робот уже прошёл, а где ещё нет.
  • «Показывать путь робота»: никогда / во время уборки (по умолчанию) / всегда. Прошлая уборка бледной линией рисуется только в последнем режиме.
  • След никогда не обгоняет иконку: отрисованные отрезки отстают на точку, а растущий кончик каждый кадр приклеен к центру едущей шайбы. Рисуется тёмным ореолом со светлой сердцевиной — читается на любой заливке комнат. При смене вида (зум, этаж, возврат на вкладку) шайба телепортируется, а не едет через весь план.
  • Поддержаны Xiaomi Cloud Map Extractor, dreame-vacuum (Tasshack) и Valetudo. Проверено на живом Dreame X50 Master.

Кроме того

  • «Свет по источникам» — режим по умолчанию для новых пространств и первый в списке. Существующие планы не трогаем: пространство, где режим не выбирали, выглядит как раньше.
  • Исправлено: поиск «что запускать» не показывал результатов. Список — прокручиваемый блок, и как flex-элемент он схлопывался в полоску 1px: совпадения были, но отрисовывались в ничто.

v1.53.1 — 2026-07-30

  • Фикс: поиск «что запускать» не показывал результатов. Результаты были — список это прокручиваемый блок, и как flex-элемент внутри тела диалога он схлопывался в полоску 1px: 26 подходящих автоматизаций отрисовывались в ничто. Найдено владельцем через минуты после v1.53.0. Теперь список держит высоту; смок измеряет эту высоту, а не просто считает строки в DOM — именно поэтому он и пропустил сломанную сборку.

v1.53.0 — 2026-07-30

Нажатие может запускать вашу автоматизацию (ТЗ владельца)

  • Новое действие по нажатию: «Запустить автоматизацию/скрипт/сцену». Мы не можем знать каждое экзотическое устройство, но вы знаете, что должен делать тап по нему: выберите любую автоматизацию, скрипт или сцену из списка с поиском — тап её запустит (automation.trigger, script.turn_on или scene.turn_on по типу цели, с тостом «Запущено»). Скрипт — идиоматичное «действие» HA, поэтому предлагаются все три запускаемых типа: не нужны автоматизации-пустышки без триггера. Сохранение без цели блокируется; удалённая позже цель подсвечивается в диалоге и безопасно отвечает тостом при тапе.
  • Чекбокс «Спрашивать подтверждение» — защита от случайных нажатий для любого действия, меняющего состояние: и toggle, и запуск, включая настенные выключатели с привязанными целями. Диалог собственный (Esc, клик мимо или «Отмена» — ничего не происходит), поэтому работает и на настенном планшете.
  • Шторы переключаются нативно: cover и valve добавлены в домены card-wide toggle — с одним осознанным исключением: гаражные ворота, двери и калитки (классы garage/door/gate) остаются ВНЕ дефолтного переключения — случайный тап не должен открыть гараж. Явный per-device toggle остаётся осознанным выбором владельца, а замки и охранные панели, как и всегда, с плана неприкосновенны.

v1.52.2 — 2026-07-29

По ревью v1.52.1 (рантайм не менялся — качество теста и формулировок)

  • Проверка регресса в редакторе плана целится ИМЕННО в лампу (HP-1521-01): старый ассерт принимал любой жёлтый значок, и горящая розетка из той же фикстуры прошла бы его даже без фикса лампы. Проверено мутацией: откат гейта v1.52.1 валит смок.
  • Последняя формулировка «жёлтый в любом режиме» — пункт чек-листа и комментарий в _stateClass — приведена к фактическому контракту: состояние источника считается условием glow-пула, а жёлтая подложка показывается только там, где пятно не рисуется (HP-1521-02).

v1.52.1 — 2026-07-29

По ревью v1.52.0

  • У горящей лампы всегда ровно один индикатор (HP-1520-01). В редакторе плана glow-слой скрыт, но подавление жёлтого там всё равно действовало — горящая лампа не показывала ни пятна, ни подложки. Гейт подавления теперь равен фактической видимости слоя: где пятно не рисуется, жёлтая подложка возвращается.
  • Статичная карточка уважает размер и поворот маркера (HP-1513-01). Один и тот же маркер рендерился на read-only карточке базовым и неповёрнутым. Теперь она зеркалит --dev-scale и угол полной карточки — только геометрия, по-прежнему схема.
  • Документация догнала цветовой контракт v1.52.0 (HP-1520-02): ожидания RGB-окраски в TESTING/UX-MODES и устаревший комментарий в коде.

v1.52.0 — 2026-07-29

Один вид источников света, чем бы их ни переключали (правило владельца)

  • Цвет лампы живёт только в её свечении. RGB-окраска иконки, рамки и тени убрана: в зависимости от того, пришли ли с состоянием данные о цвете, одна и та же лампа попадала то в ветку «цветная иконка на тёмной подложке», то в «жёлтая подложка» — выключение одной лампы тапом и остальных выключателем выглядело по-разному. Ветки больше нет.
  • В режиме glow индикатор — само пятно света. Подложка источника всегда стандартная, горит он или нет — всё говорит свет вокруг. Розетка, вентилятор или чайник остаются жёлтыми и в glow: они не светят, правило — только для источников.
  • В остальных режимах горящий источник — просто жёлтый, как греющая термоголовка; RGB и обычные лампы одинаково.
  • Морфинг иконки (контур «лампа с лучами») остаётся во всех режимах, а цвет пульсации по-прежнему берёт фолбэком цвет свечения лампы.

v1.51.3 — 2026-07-29

  • Множитель «размер значка» масштабирует и сам глиф, а не только подложку. Изменение размера устройства растило подложку, пульсацию и бейджи значений, но иконка внутри оставалась дефолтной — большая пустая рамка вокруг маленького глифа (репорт пользователя). Теперь глиф считается от того же поустройственного размера, что и всё остальное, и держит пропорцию при любом множителе и зуме.

v1.51.2 — 2026-07-29

По ревью v1.51.1

  • Авто-сетка одинакова на обеих карточках (HP-1511-01). Полная карточка резервирует клетки сетки за скрытыми устройствами (их призраки держат место в редакторе); статичная уплотняла сетку по одним видимым — свежее устройство без сохранённой позиции вставало на разных местах двух карточек. Теперь статичная передаёт сетке полный список и по-прежнему рисует только видимых.
  • Ripple-призрак сохраняет базовую иконку (HP-1511-02). Скрытый маркер с отображением «пульсация» рендерился безликим неподвижным пульсом — в редакторе его нельзя было узнать. Призрак теперь полностью снимает «одежду» отображения: базовая иконка и имя, каким бы ни был режим.

v1.51.1 — 2026-07-29

По ревью v1.51.0

  • Статичная карточка снова учитывает скрытые устройства в LQI комнаты (HP-1510-01). Её фильтр видимости незаметно стал фильтром агрегации: одна и та же комната показывала разное Zigbee-здоровье на двух карточках. Теперь агрегация и отрисовка используют разные списки — скрытые устройства считаются в сигнале на обеих карточках, не рисуются ни на одной и по-прежнему не дают света.
  • Призрак не показывает живых чисел (HP-1510-02). Скрытое устройство в «Показать скрытые» подавляло цвета состояний, но по-прежнему рисовало значение, температуру, влажность, бейдж LQI и морф иконки. Всё это убрано: у призрака только базовая иконка и имя — достаточно, чтобы узнать устройство и открыть диалог.

v1.51.0 — 2026-07-29

Скрытие — теперь явная галка (docs/FILTERING.md)

  • В диалоге каждого устройства — включая виртуальные — есть галка «Скрыть устройство с плана». Старый фильтр «на лету» остался только сеятелем этих галок: при первом открытии редактором конфиг один раз материализуется — нефизические устройства (мосты, сцены, служебные интеграции, лампы, свёрнутые в световую группу) получают галку, и дальше она принадлежит вам. Снятая галка — навсегда: сеятель не возвращается к устройству, о котором вы уже решили. Новые нефизические прячутся молча; физические — с красной точкой, как раньше.
  • «Показать все» стала «Показать скрытые» — локальный инструмент редактора устройств (на настенных планшетах ничего не мигает): скрытые рисуются полупрозрачными СИНИМИ пунктирными призраками — не спутать с серым недоступным — и совсем без живой индикации: призрак — это конфигурация, а не статус. Клик — и галку можно снять. «Удалить с плана» у привязанных устройств убрана (галка — единственный путь); «Удалить» у виртуального по-прежнему удаляет.
  • Скрытые устройства учитываются в Zigbee-сигнале комнаты, но не дают ни пятна света, ни заливки — не видно устройства, не видно и света. Климат комнат без изменений. Старые конфиги ведут себя по-старому, пока их не материализует клиент с правом записи.

Жёлтый значит «работает прямо сейчас»

  • Один принцип для светящегося значка: лампа светит, розетка подаёт, вентилятор крутится, медиа играет, пылесос убирает — или термоголовка РЕАЛЬНО греет (hvac_action), а не просто включена на зиму. Раньше термоголовка могла светиться жёлтым из-за включённой защиты от накипи, а реально греющая оставалась тёмной: выбор главной сущности пропускал служебный свитч производителя вперёд видимого climate. Исправлено — служебная сущность больше никогда не побеждает видимую основную функцию (это чинит и tap-переключение, и морфинг иконок у таких устройств).
  • Пятно света и цвет значка задают один и тот же вопрос: горящая лампа желтит значок в любом режиме заливки ровно тем условием, что зажигает её пятно. README (en+ru) описывает язык цветов.

Редакторы на телефоне

  • Пинч-зум и панорамирование жестами работают во всех редакторах: рисование кликовое, так что они совместимы — палец с движением панорамирует, два пальца зумируют, отпускание после жеста не ставит точку, чистый тап — ставит.

Кнопка настроек комнаты

  • Отвязана от (передвигаемого) названия: стоит в ВИЗУАЛЬНОМ центре комнаты — центр наибольшей вписанной окружности с тяготением к центроиду площади, поэтому вытянутая комната центрирует её по обеим осям, а Г-образная держит в середине широкой части и не утаскивает в узкую.
  • Вдвое меньше прежней, размер от иконки устройства (70% бокса) и зумится ВМЕСТЕ с планом, а не держит постоянный экранный размер.
  • Мелкие подписи под названием комнаты (температура, влажность, сигнал, свет) теперь видны и в редакторе плана, а название рендерится ровно в том же месте в просмотре и в редакторе.

v1.50.4 — 2026-07-29

По ревью v1.50.3

  • Обе карточки строят модель одним кодом (HP-1503-01). Полная карточка носила рукописную копию общего построителя модели, и копия не получила фолбэки для legacy-store из v1.50.3 — один и тот же битый store в статической карточке рендерился починенным, а в основной — пустым viewBox="0 0 0 0". Дубликат удалён: полная карточка вызывает общий построитель и лишь подменяет сырой url плана, который нужен её подписи. Новый смок прогоняет точный вектор аудита через обе модели и оба DOM-дерева и проверяет паритет.

v1.50.3 — 2026-07-29

По ревью v1.50.2

  • Размер — не координата (HP-1502-01). Граница ±4 из v1.50.2 мерила все четыре элемента view_box и w/h комнат одинаково, поэтому [0, 0, 0, 0] и отрицательные размеры всё ещё проходили — а нулевая ось сериализуется в viewBox="0 0 0 0": пустой план у всех клиентов, и aspect-ratio: 0 / 0 у статичной карточки сверху. У размеров теперь свой validator: строго положительные, пол — одна тысячная холста; координаты по-прежнему могут быть отрицательными — начало кропа законно выходит за край. А поскольку в сторе битый viewport может уже лежать, обе карточки падают на полный холст вместо пустого экрана, и legacy-прямоугольник с отрицательным размером читается как тот же прямоугольник, нарисованный из другого угла.

Также в этом релизе

  • Кнопка настроек комнаты переехала в самый низ карточки комнаты, а имя комнаты отображается ровно в одном и том же месте в просмотре и в редакторе плана — кнопка и метрики больше не участвуют в центрировании.

v1.50.2 — 2026-07-29

По ревью v1.50.1

  • Величины геометрии ограничены на обоих слоях (HP-1501-01). v1.50.1 ограничила позиции устройств, но прямоугольники комнат, вершины полигонов, view_box и координаты проёмов всё ещё принимали любое конечное число — одна проходящая схему вершина 1e100 растягивала кадр так, что план становился точкой у всех клиентов, и сервер хранил это как вполне корректную конфигурацию. Теперь схема конфига ограничивает геометрию ±4 (углы ±360°), а рамка содержимого применяет к вершинам комнат тот же конверт холста, что уже применяла к позициям устройств — конфиг, где абсурдная координата уже лежит с прежних времён, всё равно рендерится: точка рисуется, где стоит, просто кадром больше не командует. Вершина чуть за краём холста работает как раньше.
  • Пустой repair больше не съедает бэкап (HP-1501-02). Опечатка в space_id «успешно» отвечала moved: 0 — и её пустой результат заменял бэкап глубиной один, уничтожая единственный путь назад ровно тогда, когда он нужнее всего: сразу после починки не того пространства. Теперь «нечего чинить» — ошибка (nothing_to_repair): ничего не пишется, ревизия не растёт, предыдущий repair по-прежнему отменяем.

v1.50.1 — 2026-07-29

По ревью v1.50.0

  • Карточка ниже другого контента дашборда снова получает сцену (HP-1500-02). Замер высоты в v1.50.0 брал абсолютную координату документа: высокая карточка перед этой записывалась в «шапку», и сцена схлопывалась в ноль. Теперь меряется только собственная обвязка плюс ограниченная поправка на то, что дашборд держит сверху; перемер — по resize окна, слушатель снимается при демонтаже.
  • Рамка содержимого больше не бывает вырожденной или абсурдной (HP-1500-03). Одинокий значок в пустом пространстве давал viewBox нулевой площади — пустую сцену; одна сохранённая координата вида 1e100 (любое конечное число проходило проверку) растягивала рамку так, что план становился точкой — у всех зрителей пространства. Почти нулевая ось теперь раскрывается до минимального кадра вокруг значка, точки далеко за холстом рамкой не командуют (рисуются, где стоят), а сервер отклоняет координаты вне ±4 — щедрый запас для значка, утащенного за край, но не для абсурда. Узкая комната сохраняет тесный кадр, датчик калитки чуть за краём по-прежнему учитывается.
  • Путь восстановления для установок, застрявших в окне миграции v1.48 (HP-1500-01). Если старая миграция упала между двумя записями, значки пространства остаются в старых координатах, и по данным это недоказуемо — а повторное преобразование правильных координат их испортит, поэтому ничего автоматического тут быть не может. Явный ответ — houseplan/geometry/repair {space_id, aspect}: dry_run показывает точные перемещения, прежние позиции уезжают той же записью хранилища как резервная копия глубиной один, undo их возвращает, и обычные перетаскивания эту копию больше не затирают. Протокол geom_pending из v1.50.0 уже защищает все будущие миграции; это — для тех, кому он опоздал.

v1.50.0 — 2026-07-28

Задачи владельца

  • Масштаб по умолчанию считает устройства содержимым. Им можно стоять вне комнат — датчик калитки у забора, камера на столбе — и стартовый вид теперь включает их, даже в пространстве совсем без комнат.
  • Вход в редактор больше не сдвигает план. Высота сцены считалась как «экран минус 118px шапки», а шапка редактора выше: сцена уезжала вниз на разницу, низ пропадал за краём. Карточка измеряет, где сцена начинается на самом деле, и отдаёт ей остаток экрана.
  • Масштаб теперь и отдаляется. До 0.4×; в отдалении план висит по центру, а не прилипает к углу.

По ревью v1.49.0

  • Миграция на квадратный холст переживает сбой между двумя записями (HP-1490-01). Конфиг и позиции живут в разных хранилищах, пишутся по очереди, и первая запись удаляла именно те поля, которые нужны второй — сбой между ними навсегда оставлял значки в старых координатах. Теперь намерение миграции сохраняется до того, как что-либо меняется, и снимается той же записью, что сохраняет позиции: какая половина не успела — ту следующий запуск и доделает, ровно один раз.
  • Параллельные загрузки не проскакивают квоту вместе (HP-1490-02). N загрузок мерили хранилище до того, как любая из них записала файл, и все проходили предел, под который помещалась одна. Замер и запись — один атомарный шаг под отдельным замком; отдельным — чтобы медленный обход папки не тормозил сохранения конфига.
  • Редакторы снова видят весь холст (HP-1490-03). Рамка содержимого ограничивала и панорамирование, и координаты указателя, так что после первой комнаты рисовать вторую было негде. Режимы редактирования меряют от полного квадрата; просмотр остаётся по содержимому, а смена режима пересчитывает вид, вместо того чтобы тащить его прижатым не к той основе.
  • Сохранение ждёт пропорции выбранного плана (HP-1490-04). Save до ответа картинки записывал пропорции ПРЕДЫДУЩЕГО файла, и новый план навсегда оставался в чужой форме. Выбор плана сразу стирает старое значение, Save дожидается ограниченного по времени чтения; не дождался — записывается «неизвестно»: честный квадрат лучше унаследованной формы.
  • Гигиена релиза из §5: package-lock.json догнал версию пакета, задвоенный комментарий в space-geometry.ts убран.

v1.49.0 — 2026-07-28

Холст стал квадратным (см. v1.48.0, выпущена вместе с этой).

  • Масштаб открывается по нарисованному, а не по всему холсту. Пространство без подложки теперь вписывается по границам своих комнат с полями 5%: маленький план на большом холсте заполняет экран, а не сидит посередине точкой. С подложкой ничего не меняется — картинка и есть план, и обрезать её по комнатам значило бы спрятать то, что ещё не обведено.
  • Переключение пространств свайпом и в киоске стало с анимацией. План уезжает туда, куда пошёл палец, следующий приходит с другой стороны. Уважает системную настройку «уменьшить движение».
  • Кнопка настроек комнаты подписана «Настройки комнаты», а не просто «Комната», и слегка светлеет под курсором.
  • Слово «курирование» заменено на «фильтрацию» — в интерфейсе, документации и коде.

По ревью v1.47.0

  • Только что выбранный план больше нельзя удалить из того же диалога (HP-1470-02). Он ещё не сохранён, поэтому сервер справедливо считал его свободным — а сохранение потом записывало ссылку, за которой нет файла. Кнопка заблокирована, и, поскольку два клиента могут сделать это в любом порядке, сервер сверяет с диском каждую внутреннюю ссылку, которую конфигурация добавляет, и отказывает, если файла нет. Ссылку, уже записанную в конфигурации, он пропускает: файл может исчезнуть и мимо Home Assistant, а отказ заблокировал бы ровно ту правку, которая его отцепляет. Чужие ссылки не трогаются.
  • Загрузки ограничены (HP-1470-01). По возрасту не удаляется ничего — это дважды стоило настоящих планов, — поэтому предел стоит там, где решение и так принимается: загрузка отклоняется, если хранилище перевалит за 256 МБ или 200 планов (1 ГБ и 1000 для вложений) либо если на диске останется меньше 512 МБ. Список планов отдаётся по 60 самых свежих, миниатюры грузятся лениво.
  • Выбор сохранённого плана читает его настоящие пропорции (HP-1470-03). Карточка ничего не ждала и, если подпись для защищённой ссылки ещё не пришла, записывала пропорции «по умолчанию» — квадратный план получался растянутым. Теперь она дожидается подписи, привязывает результат к тому диалогу, который спрашивал, а превью в диалоге подписывается, как и всё остальное.

v1.48.0 — 2026-07-28 (холст всегда квадратный)

  • У пространства больше нет собственных пропорций. Область рисования — квадрат, а картинка плана сохраняет свою форму и вписывается в него по центру: у широкого плана появляются поля сверху и снизу, у вытянутого — по бокам. Выбирать нечего, поэтому настройка ориентации холста для пространств без картинки убрана.
  • Существующие планы переносятся один раз, при обновлении. В самом рисунке ничего не меняется: коробка дополняется до квадрата, и все координаты пересчитываются относительно неё — комнаты, двери и окна, декор, позиции значков и сохранённая область просмотра. Углы, пропорции комнат и взаимное расположение сохраняются точно. Для вытянутых планов заодно пересчитывается масштаб в сантиметрах на клетку: сетка привязана к ширине, и без этого стены молча стали бы короче.

v1.47.0 — 2026-07-28 (выбор из уже загруженных планов)

  • Диалог пространства показывает планы, сохранённые на сервере. Отцепление плана оставляет картинку на диске — так с v1.46.4, но вернуть её можно было только найдя исходный файл у себя и загрузив заново. «Уже загруженные» показывают, что есть: миниатюра, размер файла и то, какое пространство его использует. Клик прикрепляет, пропорции читаются из самой картинки — так же, как при загрузке.
  • Там же план и удаляется. Файл плана никогда не удаляется автоматически — ни за отцепление, ни за возраст, — и это разумная политика ровно до тех пор, пока видно, что именно хранится, и есть способ убрать это осознанно. Кнопка корзины делает это и отказывает, пока план используется пространством: ответ на вопрос «можно ли удалить» даёт сохранённая конфигурация, а не браузер.
  • Документация догнала код: несколько комментариев всё ещё описывали удаление по возрасту, убранное в v1.46.6.

v1.46.6 — 2026-07-28 (обещание про отцепление, теперь выполненное)

  • Переключение пространства в «нарисовать» больше не удаляет его картинку. v1.46.4 и v1.46.5 утверждали, что не удаляет, и плановая уборка действительно отцеплённые планы не трогала — но само сохранение удаляло файл в тот момент, когда снималась ссылка, ещё до всех этих проверок. Причина: файл, покинувший конфигурацию, считался «заменённым», а по одной этой разнице замену плана, отцепление и удаление пространства различить невозможно. Удалением, о котором просили, является только первое. Теперь переход классифицируется по пространству-владельцу, и та же разница применяется к вложениям: убрали файл у существующего устройства — он удаляется, удалили устройство — его инструкции остаются.
  • План удалённого пространства сохраняется, а не тридцать дней, как обещала v1.46.5: тридцать дней по возрасту файла всё равно бессмысленны — обычно он загружен месяцы назад.
  • По возрасту больше не удаляется ничего, кроме промежуточной папки диалога. Правило, которое вычищало «отвергнутые загрузки», оказалось в гонке с повторной попыткой: уборка удаляла файл неудавшегося сохранения ровно тогда, когда следующая попытка коммитила ссылку на него. Правило, способное удалить файл, на который кто-то вот-вот сошлётся, не стоит освобождаемого места. Файлы уходят по действию, в остальных случаях остаются.

v1.46.5 — 2026-07-28 (ревизия всех автоматических удалений)

  • Отцеплённый план не удаляется никогда, ни в каком возрасте. В v1.46.4 ему давался месяц; теперь это навсегда, и причина записана там, где её увидит следующая правка. Правило, оно же в docs/SCOPE.md: компонент вправе удалить файл только тогда, когда об этом говорит действие пользователя — замена плана, удаление вложения, удаление устройства. «На это больше никто не ссылается» таким действием не является. Ошибки несимметричны: занятое зря место видно, стоит копейки и обратимо; удалённый файл — ничего из этого.
  • houseplan/files/cleanup больше не сносит папку по слову клиента. После перепривязки устройства файлы копируются под новый id, а старая папка удалялась — через rmtree, по тому id, который прислала карточка. Два плохих исхода: при частичном копировании часть ссылок продолжает указывать внутрь этой папки (миграция намеренно их не переписывает — то есть это были живые ссылки на удаляемые файлы), а неверный или устаревший id от любого клиента уничтожил бы инструкции существующего устройства. Теперь сервер сам сверяется с сохранённой конфигурацией, под её блокировкой, и удаляет только то, на что никто не ссылается.
  • План удалённого пространства ждёт тридцать дней вместо часа. Удаление пространства осознанно, но час — короткое окно, чтобы заметить промах.

v1.46.4 — 2026-07-28 (потеря данных: отцеплённые планы убирались как мусор)

  • Отцеплённый план больше не удаляется через час. Переключение пространства в режим «нарисовать» снимает ссылку и, как редактор всегда и говорил, оставляет картинку на диске, чтобы её можно было вернуть. Уборка, добавленная в v1.46.0, этой разницы не делала: считала «на файл сейчас никто не ссылается» синонимом «файл брошен» и применяла часовое правило. На установке автора плановый проход в итоге удалил два плана этажей, отцеплённых несколькими неделями раньше, — восстановить их было нечем. Если вы отцепляли план после v1.46.0 и инстанс перезапускался или проработал сутки — загляните в config/houseplan/plans/ и напишите в Telegram-чат, если файла нет. Правило теперь такое: коммит по-прежнему удаляет ровно то, что заменил, — это он знает наверняка. Дальше вопрос в том, означает ли «непривязан» «брошен», и ответ зависит от случая. У пространства, у которого плана нет вовсе, его отцепили — и, возможно, вернут: его файлы не удаляются никогда. У пространства, у которого план есть, лишние файлы могут быть только его же отвергнутыми загрузками — они по-прежнему уходят через час. Вложения вне промежуточной папки диалога ждут месяц; сама промежуточная папка, где по построению лежит только загрузка из несохранённого диалога, сохраняет часовое правило.

v1.46.3 — 2026-07-28 (перепроверка v1.46.2: HP-1462-01)

  • Уборка при старте действительно убирает. Она искала свои же runtime-данные по домену, а во время запуска Home Assistant ещё не считает интеграцию загруженной — поэтому поиск возвращал пустоту, и проход тихо вырождался в удаление незавершённых передач, оставляя настоящую работу таймеру через 24 часа. При перезапусках чаще, чем раз в сутки, она не выполнялась вообще. Теперь используется объект, который у неё и так был на руках.
  • Тест, который должен был это доказать, проходил по неверной причине. Он создавал лишние файлы до сохранения конфигурации, а сохранение тоже собирает мусор — так что к моменту перезапуска убирать было уже нечего. Переписан: файлы создаются после сохранения; добавлен второй тест, который дёргает плановый таймер отдельно, и третий, который запускает перезапуск и сохранение одновременно и проверяет, что принятая конфигурация никогда не ссылается на удалённый уборкой файл.

v1.46.2 — 2026-07-28 (перепроверка v1.46.1: HP-1461-01, -02)

  • Файл, который в итоге никому не понадобился, убирается, даже если больше ничего не сохраняют (HP-1461-01). Сборка привязана к записи конфигурации — это верно для того, что запись вытесняет, но оставляет зазор: отмените диалог после того, как файл уже загрузился, потеряйте связь сразу после, или вызовите API загрузки напрямую — и на файл никто не ссылается, а будущей записи, которая бы это заметила, нет. Добавленное в v1.46.1 ежедневное подметание убирало только незавершённые передачи, поэтому обещание «отменённое вложение исчезнет через час» не выполнялось там, где никто ничего не правит. Теперь подметание сверяется с сохранённой конфигурацией — под той же блокировкой, что и запись, — и собирает устаревшие непривязанные вложения и планы тоже.
  • Перетаскивание больше не отменяется чужим перемещением (HP-1461-02). Когда в v1.46.1 полная карточка научилась следить за позициями, она защищала те, что вы подвинули, но ещё не отправили, — вот только читала этот список после сброса отложенной записи, а сброс его первым делом опустошает. При настоящем перетаскивании, когда запись уже запланирована, список оказывался пустым, и старая серверная позиция закрашивала ваше движение. Теперь снимок снимается до сброса, и вдобавок удерживаются позиции, отправленные, но ещё не подтверждённые: пока сервер не подтвердил позицию, авторитет по ней — та карточка, которая её подвинула.
  • Два теста доросли до своих же описаний: тест загрузки теперь действительно отменяет задачу запроса, а не только проходит по путям ошибок, а смоук синхронизации позиций планирует настоящую отложенную запись и задерживает её — именно этот порядок и терял перетаскивание.

v1.46.1 — 2026-07-28 (перепроверка v1.46.0: HP-1460-01 … -03)

  • Две загрузки с одинаковым именем больше не сталкиваются (HP-1460-01). v1.46.0 перестала затирать вложения, но выбор свободного имени и его занятие были двумя шагами: две загрузки, попавшие между ними, сходились на одном имени, обе рапортовали успех, и одни байты заменяли другие. Теперь имя занимается атомарно в момент выбора — двадцать одновременных загрузок manual.pdf дают двадцать файлов. Тот же механизм используется при переносе файлов на перепривязке, где был ровно такой же зазор. Заодно там же: имя предельной длины теряло расширение, а суффикс коллизии выталкивал его за предел, и вложение сохранялось под именем, которое сервер обратно не отдаёт — вечный 404 на файл, который интерфейс считал прикреплённым.
  • Прерванная загрузка больше не оставляет временный файл навсегда (HP-1460-02). Уборка стояла в except Exception, мимо которого отменённый запрос проходит насквозь, а сборщик заглядывает только в папки маркеров — поэтому оборванная передача оставляла .upload-*, и убрать его было некому. Теперь убирает любой путь выхода, запрос с двумя файлами отклоняется сразу, а брошенные временные подметаются при старте и раз в сутки. Запись идёт порциями по мегабайту, а не отдельной задачей на каждые 64 КБ.
  • Две полные карточки рядом держат одинаковые позиции (HP-1460-03). v1.46.0 научила следить за перемещениями статическую карточку и оставила позади полную, поэтому перетаскивание иконки в одном окне не двигало её в другом до перезагрузки. Теперь следит — и не мешает собственному перетаскиванию: чужая ревизия, пришедшая в его разгар, сливается, а не накатывается сверху, и карточка не перечитывает то, что записала сама.

v1.46.0 — 2026-07-28 (полный внешний аудит v1.45.4: HP-1454-01 … -10)

Безопасность

  • Загруженный SVG-план больше не является живым документом origin вашего Home Assistant (HP-1454-01, high — блокер релиза). Внутри карточки план подключён через <image>, где скрипты не выполняются; но тот же URL, открытый напрямую, становился документом верхнего уровня в origin самого HA, и <script> в нём мог читать localStorage сессии и обращаться к API. Для загрузки нужно право записи, а оно по умолчанию есть у каждого аутентифицированного пользователя, и подписанную ссылку несложно передать администратору. Ответы с SVG теперь несут заголовок Content-Security-Policy sandbox, который помещает документ в opaque origin. Только SVG — CSP на PDF способен сломать встроенный просмотрщик браузера, а растровая картинка ничего выполнить не может. Для существующих планов ничего не меняется: карточка рисует их ровно как раньше.

Целостность данных

  • Инструкция, приложенная к устройству, больше не затирает предыдущую (HP-1454-02). Загрузка писала прямо в <маркер>/<имя файла>, вне транзакции конфигурации: отмена диалога или отвергнутое сохранение оставляли сохранённую ссылку указывающей на новые байты. А все новые иконки грузили в одну общую папку, поэтому две с файлом manual.pdf начинали ссылаться на один физический файл. Теперь загрузка занимает свободное имя и никогда не перезаписывает, новая иконка получает собственную промежуточную папку, файлы из которой переезжают к настоящей иконке при принятом сохранении, а загрузка, которую никто не сохранил, убирается через час. Имя, на которое уходит коллизия, сменилось с manual (2).pdf на manual-2.pdf: старое санитайзилось на обратном пути, поэтому переименованное вложение записывалось и больше не отдавалось (нашёл новый тест; до этого релиза так же ломались коллизии при перепривязке).
  • Две быстрые правки больше не теряют вторую (HP-1454-03). Debounce разносил старты сохранения, а не сами сохранения. Если одно длилось дольше полусекунды — занятый сервер, медленная связь, — следующая правка уходила с той же ревизией, сервер принимал первую и отклонял вторую, а обработчик конфликта перечитывал серверную копию поверх локальной. Правка исчезала, и сообщение винило «другое окно», которого не было. Записи сериализованы: по одной за раз, каждая с ревизией, которую вернула предыдущая.

Корректность и пределы

  • Открытые границы снова следуют за геометрией (HP-1454-04). Их кэш ключевался только по id комнат и связям, поэтому смена пропорций пространства или перетаскивание вершины оставляли открытые границы — и свет, который через них проходит, — в старых координатах до перезагрузки. Ключом стала сама отрисованная модель, из которой они и вычисляются.
  • Конфигурацию больше нельзя сделать сколь угодно тяжёлой (HP-1454-05). Внешние коллекции были ограничены, вложенные — нет. Полигон на 150 000 точек или список из 100 000 идентификаторов проходили валидацию, а потом каждый рендер по ним ходил. Появились пределы на вершины полигона, связи открытых границ, управляемые сущности, вложения, длину текста и ссылок, плюс общий предел размера сериализованной конфигурации. Устаревшее поле segments отбрасывает сервер, а не надежда на современный клиент.
  • Большие файлы передаются потоком, а не через память (HP-1454-06). Инструкция на 50 МБ целиком читалась в память на приёме и ещё раз на отдаче; пара параллельных скачиваний — заметная нагрузка на слабый хост Home Assistant. Загрузка пишется во временный файл потоком, отдача идёт с диска.

Согласованность

  • Статическая карточка пространства учитывает настройки заливки комнаты (HP-1454-07). Она строит модель другой функцией, и настройки комнаты в неё не переносились — комната, которой вы выключили заливку, всё равно закрашивалась.
  • Перемещение иконки сразу видно на статической карточке (HP-1454-08). Layout — отдельное состояние без ревизии и без события: перетаскивание на полной карточке оставляло соседнюю статическую со старой позицией до изменения конфигурации или перезагрузки страницы. Теперь записи layout хранят ревизию, возвращают её и сообщают о себе — заодно оптимистическая блокировка на полной записи layout начала что-то значить, ведь точечная запись раньше сбрасывала счётчик.
  • Предупреждение о пропавшем плане исчезает вместе с пространством (HP-1454-09). Уборка смотрела только на существующие пространства, поэтому удаление или переименование оставляло предупреждение в «Ремонте» навсегда.
  • Сборка: serialize-javascript поднят выше двух advisory (HP-1454-10). В рантайме недостижим, production-зависимости и так были чисты, но это одна строка.

v1.45.4 — 2026-07-28 (ревью v1.45.3: R5-1, R5-2)

  • Частично успешный ответ на подпись больше не пропускает выдержку (R5-1). Бэкенд подписывает каждый путь независимо: тот, что подписать не удалось, логируется, пропускается, и вызов всё равно завершается успешно с остальными ссылками. Карточка считала любой успешный вызов «весь батч готов», сбрасывала выдержку для всех путей в нём и записывала только вернувшиеся ссылки — и путь, который бэкенд стабильно пропускал, запрашивался заново на каждом рендере, то есть ровно то усиление, ради которого выдержка и вводилась в v1.45.2. Теперь путь считается подписанным, только если в ответе действительно есть ссылка на него; остальные уходят в выдержку по отдельности, ключи, которых не просили, игнорируются, а перерисовка запускается лишь при появлении хотя бы одной новой подписи.
  • Снимок состояния больше не противоречит репозиторию (R5-2). Там всё ещё было написано, что в main лежат релизы только до v1.40.1, и приводились счётчики тестов на несколько релизов назад — при том что строка версии рядом исправно обновлялась. Читающий его человек или агент получал неверную модель веток и заниженное представление о покрытии. Роли веток описаны точно, а счётчики убраны: npm run inventory печатает их из дерева, и устаревать больше нечему.

v1.45.3 — 2026-07-27

  • «Значение вместо иконки» невозможно было сохранить (issue #3). Опция появилась в редакторе устройств ещё в v1.26.0, но серверная схема всё это время принимала только badge, ripple и icon_ripple. При её выборе сохранение падало с not a valid value for dictionary value @ data['config']['markers'][n]['display'], а поскольку один отвергнутый маркер валит всю запись конфигурации, план не сохранялся вообще, пока настройку не отменишь. Спасибо @RemyRoux за отчёт и точный текст ошибки.
  • Списки опций теперь в одном месте и сверяются между языками. DISPLAY_MODES, TAP_ACTIONS, SPACE_FILL_MODES и ROOM_FILL_MODES экспортируются из карточки, и backend-тест читает их, проверяя, что схема принимает каждое значение, которое пользователь реально может выбрать. Теперь добавить опцию в редактор и забыть про схему — значит уронить тесты, а не узнать об этом из чужого сообщения об ошибке.

v1.45.2 — 2026-07-27 (закалка по ревью v1.45.1: R4-1, R4-2)

  • Сбой уборки больше не превращает принятое сохранение в ошибку (R4-1). Сборка вытесненных файлов плана идёт уже после того, как конфигурация сохранена, но ошибка при обходе каталога — он может исчезнуть или стать недоступным между проверкой и обходом — вылетала наружу из config/set. Клиент видел неудачу для ревизии, которую сервер закоммитил, а его повтор возвращался с конфликтом. Теперь сборщик сообщает «ничего не убрано» вместо исключения, а config/set пишет в лог и продолжает: событие уходит, новая ревизия возвращается.
  • Один запрос подписи на ссылку вместо одного на рендер (R4-2). Множество ожидающих очищалось в момент отправки батча, а не по возвращении, поэтому пока запрос content/sign был в полёте, каждая перерисовка ставила ещё один — шесть вызовов там, где нужен один, и куда хуже на медленном (а не просто занятом) сокете. Состояния «в очереди» и «в полёте» теперь разделены, после ошибки включается выдержка (2 с с удвоением до 60 с) вместо повтора на следующем кадре, а запрос, который так и не завершился, перестаёт блокировать повторы через 15 с. Поздний ответ, пришедший после размонтирования карточки, больше не вызывает перерисовку.
  • Тесты: восемь юнит-тестов подписывателя с ручным разрешением promise (четыре падают на v1.45.1), backend-тест на то, что сломанный сборщик оставляет сохранение успешным с рабочей ревизией, и проверка исчезнувшего каталога в тестах чистого сборщика.

v1.45.1 — 2026-07-27 (повторное ревью v1.45.0: R3-1, R3-2)

  • Уборка старых файлов плана перенесена внутрь транзакции конфига (R3-1, high). v1.45.0 сделала загрузку безопасной, но отдала удаление клиенту: после успешного сохранения карточка просила бэкенд убрать всё, кроме только что закоммиченного файла. Два открытых редактора невозможно упорядочить — задержавшийся запрос одного клиента удалял план, который только что сохранил другой, и принятая конфигурация оставалась со ссылкой в пустоту, то есть ровно с тем ущербом, ради которого вводился copy-on-write. Команда houseplan/plan/cleanup убрана. Теперь config/set убирает сам, под своей блокировкой, сравнивая конфигурацию, которую заменил, с той, которую принял: файл, на который ссылалась старая ревизия и не ссылается новая, удаляется, а любая другая непривязанная загрузка не трогается, пока ей не исполнится час — свежая может принадлежать ещё не завершённой чужой транзакции.
  • Статическая карточка пространства снова показывает подложку (R3-2). Она подписывала URL и выбрасывала результат — getCardSize() правил временную модель, а render() строил свою заново из конфига, — поэтому <image> запрашивал защищённый путь и на каждом рендере получал 401. Обе карточки теперь используют один подписыватель, и статическая заодно получила батчи, учёт срока годности и периодическое переподписывание, которые были только у основной. Её множество ожидающих запросов освобождается в finally, так что одна неудача больше не блокирует ссылку до конца жизни страницы.
  • Новые тесты: пять backend-сценариев чередования двух клиентов из отчёта (поздний коммит, незакоммиченная загрузка, устаревший сирота, чужие файлы, отвергнутое сохранение), сборщик вынесен в чистый модуль и покрыт юнит- тестами, плюс smoke_space_card_bg на подписанный фон — он падает на v1.45.0, где в DOM попадает сырой URL.

v1.45.0 — 2026-07-27 (внешнее ревью v1.44.8: R2-1, R2-2, R2-3)

  • Отвергнутое сохранение больше не может испортить рабочий план (R2-1, high). Файл плана записывался под финальным именем — попутно удаляя вариант с другим расширением — до проверки ревизии конфига. Если запись потом отвергалась (конфликт ревизий, валидация, обрыв связи), живой план оказывался уже подменён, а сохранённый конфиг мог ссылаться на удалённый файл. Теперь загрузка идёт в версионированное имя (<space>.<токен>.<ext>) и ничего не удаляется; карточка просит бэкенд убрать устаревшие файлы только после принятой записи конфига. Падение между шагами оставляет один осиротевший файл, который подберёт следующая успешная загрузка.
  • Подписанные ссылки больше не протухают навсегда на долгоживущих экранах (R2-2). Бэкенд подписывает не более 200 путей за запрос и молча отбрасывает остальные, а карточка отправляла весь кэш одним вызовом и считала любую запись годной вечно. Начиная с 201-го вложения поздние ссылки переставали обновляться и через 24 часа тихо ломались. Теперь запросы бьются на батчи по общему лимиту, записи помнят свой возраст (стареющая ссылка работает, пока едет замена, протухшая не отдаётся вовсе), а кэш чистится до ссылок, на которые конфиг всё ещё ссылается.
  • Климат комнат считается один раз на обновление, а не на каждую комнату (R2-3). Каждая комната запрашивала температуру и влажность по отдельности, и каждый запрос заново обходил весь реестр сущностей: 60 комнат и 2000 сущностей — это ~120 обходов на рендер, целый кадр на метаданные, которые не менялись. Теперь один проход строит карту по всем зонам с привязкой к снимку Home Assistant: свежие состояния видны всегда, а посторонние перерисовки не стоят ничего. Замер в смоуке: 133 обхода реестра на обновление до, 2 после — и число больше не растёт с числом комнат.
  • smoke_ux_fixes писал скриншот по жёстко зашитому пути /tmp и не запускался на Windows — теперь берёт временную папку у ОС.
  • Новые тесты: smoke_plan_upload_reject (чистка только после принятого сохранения), smoke_sign_cap (201 ссылка, батчи, чистка, срок годности), smoke_climate_once (число обходов не растёт с числом комнат), плюс backend-покрытие версионированных имён и юнит-тесты новых хелперов.

v1.44.8 — 2026-07-27

  • Загруженная подложка действительно привязывается к пространству. _saveSpaceDialog держал ссылку на объект пространства через await загрузки картинки. Любое событие houseplan_config_updated запускает _reloadConfigOnly(), а оно заменяет _serverCfg — ссылка становилась осиротевшей, и plan_url, aspect, заголовок и все настройки отображения писались в отсоединённый объект, тогда как на сервер уходил нетронутый конфиг. Файл попадал на диск, подложка не появлялась, пересохранение не помогало. Создание пространства в этот момент теряло пространство целиком. Теперь загрузка идёт до обращения к конфигу, и ни одна ссылка не живёт через await.
  • _saveConfigNow помечает запись как выполняющуюся (_cfgWriting) — так же, как отложенный писатель, — поэтому чужая ревизия, пришедшая посреди сохранения, откладывает перечитывание вместо подмены конфига (аудит L2, расширен на этот путь).
  • Регрессионный тест demo/smoke_plan_upload_race.mjs падает на v1.44.7 и проходит здесь.

v1.44.7 — 2026-07-27

  • Подложки снова отображаются (регрессия с v1.44.5). Эндпоинт с файлами требует авторизации, поэтому карточка просит бэкенд подписать ссылку на план — но подпись подставлялась внутри мемоизированной модели пространства, а она кэшируется по отпечатку конфига. Неподписанная ссылка «замерзала» в кэше, подпись до элемента <image> не доезжала, и план не грузился никогда. Теперь ссылка вычисляется в момент отрисовки, вне кэша. (Ссылки на PDF не страдали — там она и так вычислялась при отрисовке.)
  • Больше нет «неудачной попытки входа» с собственного IP. Пока подложка была сломана, браузер продолжал дёргать неподписанный путь, тот отвечал 401, и Home Assistant поднимал предупреждение о неудачном входе с адреса самого зрителя. Теперь до получения подписи не рисуется ничего, и неподписанный запрос не уходит вовсе.
  • Долгоживущие экраны не моргают. Переподписывание раз в 12 часов раньше сбрасывало все подписи и ждало новые; теперь текущие ссылки держатся до прихода замены, так что настенный планшет не показывает пустой план.
  • Регрессионный тест demo/smoke_plan_signed.mjs падает на v1.44.6 и проходит здесь.

v1.44.6 — 2026-07-27

  • Климатом комнаты считается только температура воздуха. После v1.44.5, когда данные стали браться из реестра зон, а не с видимых значков, кандидатами стали все скрытые датчики температуры в зоне — в том числе те, что меряют вовсе не воздух. Перед усреднением теперь работают три фильтра: пропускаются сущности с категорией диагностика/настройка, сущности исключённых интеграций и сущности, в id которых назван не-воздушный носитель (water, coolant, flow_temp, return_temp, target, setpoint, chip, cpu, processor, board, device_temp, batter, freezer, fridge, oven, kettle, boiler). На живой установке с 60 зонами это убрало четыре реальных ложных срабатывания: температуру процессора NAS, воду в умном чайнике, сауну с 90 °C и виртуальный better_thermostat, дублирующий настоящий датчик.
  • Новые правила иконок: чайники и термопоты получают mdi:kettle, сауны (sauna, harvia, парная) — mdi:hot-tub. Раньше и те и другие попадали под общее правило термометра, из-за чего и учитывались в климате комнаты.

v1.44.5 — 2026-07-27

  • Климат комнаты считается по всем датчикам зоны, включая устройства, которых нет на плане (скрыты курированием или вами). Раньше среднее бралось только по видимым значкам, поэтому скрытый термометр молча выпадал из карточки комнаты, подсказки и температурной заливки. Курирование сохранено (холодильники, термоголовки и розетки с температурой чипа не считаются), а явно выбранный источник в настройках комнаты по-прежнему главнее.
  • Из подсказки к комнате убрана фраза «открыть зону» — клик по комнате перестал никуда вести ещё в v1.40.1, для перехода есть значок-ссылка у названия.

v1.44.4 — 2026-07-27 (доработка по аудиту: B2, B5, L4)

  • Единая политика авторизации (B2). HTTP-загрузка по-прежнему разрешала запись, когда запись о конфигурации недоступна, тогда как WebSocket-путь уже отказывал — они разошлись. Теперь оба вызывают общий помощник may_write, который в неопределённой ситуации пропускает только администраторов.
  • NaN/Infinity отвергаются во всех координатах (B5). Проверка на конечность числа стояла только у позиций раскладки; прямоугольники комнат, вершины полигонов, view_box и координаты проёмов принимали "NaN", который при записи превращается в null и необратимо портит геометрию. Ограничение MAX_OPENINGS было объявлено, но нигде не использовалось — список проёмов оставался безразмерным.
  • Укрепление перетаскивания (часть L4). Безопасная обёртка над setPointerCapture теперь используется во всех сценариях перетаскивания (устройства, подписи, изменение размера), а не только у проёмов — «мёртвый» идентификатор указателя мог оборвать перетаскивание. Фигуры декора получили ограничение по границам: их больше нельзя утащить далеко за пределы плана и сохранить там.

v1.44.3 — 2026-07-27 (исправление: планы и инструкции снова загружаются)

  • У аутентифицированной выдачи контента не было рабочего пути для браузера. Версия v1.43.0 закрыла дыру правильно, но Home Assistant аутентифицирует HTTP-запросы либо заголовком Bearer, либо подписанным путём authSig — а <image href> внутри SVG и обычная ссылка <a href> не отправляют ни того, ни другого. На настоящем дашборде фоны планов и ссылки на PDF отдавали 401 (воспроизведено вживую до исправления). Теперь карточка просит бэкенд подписать то, что собирается показать (houseplan/content/sign, 24 часа, привязано к токену сессии, только для нашего эндпоинта), перерисовывается, когда подписи приходят, и обновляет их каждые 12 часов, чтобы настенные планшеты продолжали работать. Тест бэкенда скачивает подписанный адрес без заголовка авторизации и проверяет 200, а без подписи — 401.

v1.44.2 — 2026-07-27 (внешнее код-ревью: CR-1…CR-3)

Второе, состязательное ревью (версии v1.44.0) дало три находки — все закрыты.

  • Правило про замки теперь сформулировано точно и проверяется (CR-1). Рецензент справедливо отметил, что утверждение «замок нельзя открыть с плана» было слишком абсолютным: кнопка в карточке двери действительно вызывает сервис. Эта кнопка — осознанное продуктовое решение, поэтому правило переписано там, где ему место («никогда случайным нажатием; ровно одна подписанная поверхность»), отпирание теперь спрашивает подтверждение, а новый смок-тест проверяет все пять путей управления и доказывает, что значки, controls[] и карточка устройства по-прежнему отказывают замкам.
  • Перенос вложений стал транзакционным (CR-2). При смене привязки маркера файлы раньше ПЕРЕМЕЩАЛИСЬ до сохранения конфига с проверкой ревизии: если сохранение отклонялось, на сервере оставались старые ссылки, а файлы уже уехали. Теперь сервер копирует, конфиг фиксируется, и только после этого старая папка удаляется (houseplan/files/cleanup).
  • Неудачный или частичный перенос больше не переписывает ссылки (CR-3). Копирование возвращает точное соответствие «исходное имя → записанное»; переписываются только подтверждённые копии, при совпадении имён файл получает уникальное имя вместо молчаливой ссылки на чужой файл, а ошибка переноса показывается тостом.

v1.44.1 — 2026-07-27

  • Ссылка на чат сообщества добавлена везде, где её ищут: https://t.me/ha_houseplan (бейдж и строка в шапке обоих README, раздел «Помощь и обмен опытом», контакт-ссылки в шаблонах issue, CONTRIBUTING, STATUS и SCOPE).

v1.44.0 — 2026-07-27 (отзыв пользователя: сначала управление)

  • Карточка устройства стала поверхностью управления. Она открывается со списка управляемых сущностей: лампы, розетки и вентиляторы переключаются прямо здесь кнопками под палец, шторы, замки и климат передают управление в штатный more-info Home Assistant. Модель, ссылки и PDF-инструкции ушли ниже — на настенном планшете эта карточка нужна для управления домом, а не для чтения документации (из полевого отзыва). Служебные (config/diagnostic) сущности в списке не показываются, замки по-прежнему не переключаются нажатием в карточке.
  • «Это устройство — источник света» — новый флаг у устройства. Умный выключатель с обычными (не умными) светильниками теперь даёт ореол в заливке «Свет по источникам» без создания хелпера-группы: свечение следует за самим выключателем либо за лампами, привязанными в «Управляет источниками света».

v1.43.3 — 2026-07-27 (отзыв пользователя: обнаруживаемость и тач)

  • Настройки комнаты невозможно было найти. Шестерёнка из v1.42.0 жила внутри подписи комнаты размером 0.9em от её шрифта и с прозрачностью 60% — несколько бледных пикселей на обычном плане. Теперь это кнопка-пилюля «⚙ Комната» фиксированного читаемого размера, не зависящая от масштаба карточки, и она появляется даже у комнат без имени (их там и называют). Заодно разблокировались слайдеры размеров шрифта, до которых никто не мог добраться.
  • Строка показателей увеличена с 0.62 до 0.75 от размера названия — автор отзыва мог увеличить название, но строка датчиков оставалась нечитаемой на планшете. Множители комнаты и пространства работают поверх.
  • Тултипы на тач-устройствах, вторая попытка. Проверки (hover: none) оказалось мало: некоторые устройства, оболочки, стилусы и подключённые мыши сообщают hover: hover, и подсказки продолжали висеть под пальцем. Теперь карточка запоминает первое же касание (touch/pen) и гасит открытую подсказку.

v1.43.2 — 2026-07-27 (внешний аудит: слой тестов)

  • Смок-тесты наконец умеют падать (T1). Все 48 браузерных смоков печатали булевы значения и всегда завершались с кодом 0 — регрессия была видна в их собственном выводе, а прогон считался успешным. demo/serve.mjs теперь экспортирует check/checkAll/finish: каждый факт проверяется по имени, несовпадения и необработанные исключения внутри карточки дают ненулевой код возврата. Проверено намеренной поломкой блокировки редакторов в киоске — соответствующий смок покраснел.
  • Набор гоняется в CI (T2) отдельной джобой smoke после frontend, против свежесобранного бандла (закоммиченная копия в demo/srv/assets — снимок, на нём легко получить «зелёный» отчёт о несуществующем коде), с выгрузкой логов при падении.
  • docs/TESTING.md приведён в соответствие (T3). [auto] теперь означает «существует именованная проверка, которая падает», и рядом написано, где она; 72 пункта, где автоматизация была намерением, честно помечены [manual]. Исправлены два давних противоречия: строка про «ноль кнопок редактирования в Просмотре» (неверна с v1.30.1) и строка про клик по проёму (снова верна с v1.43.1).
  • Три смока проверяли поведение, которого уже нет (ожидания времён v1.39.0 и v1.25); теперь они тестируют текущий контракт.

v1.43.1 — 2026-07-27 (внешний аудит: исправления P1)

  • Стоимость отрисовки (L1). Home Assistant подменяет объект hass при любом изменении состояния в доме, и каждая такая отрисовка пересчитывала всю геометрию плана — _openPairs() вызывался по разу на комнату (кубическая математика коллинеарных наложений), модель пространства строилась дважды. Теперь и то, и другое мемоизируется по структурному отпечатку конфига и вынесено из цикла по комнатам; сброс кэша происходит синхронно в момент мутации, а не внутри дебаунса.
  • Тап против перетаскивания у проёмов (L4). У перетаскивания двери или окна не было порога движения, поэтому любое дрожание пальца считалось перетаскиванием: диалог свойств не открывался, а в конфиг писалось неизменённое состояние (что подпитывало гонку L2). Теперь порог 3 px, как во всех остальных сценариях перетаскивания, и запись только при реальном изменении геометрии.
  • Вогнутые комнаты (G2). Вложенность определялась через среднее арифметическое вершин — а оно лежит СНАРУЖИ U- и L-образных комнат, поэтому комнаты-острова в них отвергались как пересечение, а дырка в заливке не рисовалась. Теперь вычисляется настоящая внутренняя точка (interiorPoint).
  • Дедупликация стен (G3). segKey сортировал концы по сырым float, а печатал округлённые, поэтому одна общая стена могла дать два ключа и рисовалась дважды. Сначала округление, потом сортировка.
  • Укрепление бэкенда (B2–B5). Проверка прав на запись теперь отказывает, когда запись о конфигурации недоступна (раньше во время перезагрузки интеграции запись разрешалась); layout/set поддерживает expected_rev и сообщает о конфликте так же, как хранилище конфига; config/set без expected_rev поверх непустого хранилища пишет предупреждение в лог; координаты отвергают NaN/Infinity, а у пространств, комнат, маркеров, декора и раскладки появились щедрые ограничения размера.

v1.43.0 — 2026-07-27 (внешний аудит: исправления P0)

Внешний аудит кода версии v1.41.1 нашёл четыре критические проблемы. Все четыре исправлены и покрыты регрессионными тестами.

  • Молчаливая потеря правок при сохранении (L2). Отложенная запись конфига читала его в момент срабатывания, поэтому пришедшее в промежутке событие houseplan_config_updated подменяло конфиг, и правка пользователя исчезала без единой ошибки — воспроизводилось даже в одной вкладке. Теперь дебаунс умеет flush()/pending(), перезагрузка сперва дописывает отложенную запись и откладывается, пока запись в полёте, а неудачная перезагрузка наконец сообщает о себе вместо молчания.
  • Разрез разрушал геометрию комнаты (G1). Разрез, начинающийся и заканчивающийся на ОДНОЙ стене (вырезание ниши — совершенно естественное действие), давал две самопересекающиеся комнаты, суммарная площадь которых вдвое превышала исходную, и проверка пересечений это не ловила. Теперь такие разрезы корректно вырезают нишу, а инвариант разбиения (части в сумме дают исходную площадь) отклоняет всё остальное.
  • Планы и загруженные файлы отдавались без авторизации (B1). Любой, кто мог достучаться до вашего Home Assistant, скачивал планы этажей и вложенные инструкции без входа в систему. Теперь их отдаёт аутентифицированный обработчик; сохранённые старые адреса переписываются на чтении, так что ничего не ломается. Старые публичные пути исчезают только после перезапуска Home Assistant.
  • Диалоги могли воскреснуть и обнулить карточку (L3). Закрытие диалога во время неудачного сохранения превращало его состояние в пустую «оболочку», отрисовщик падал, и карточка оставалась пустой до перезагрузки страницы. Защита добавлена во все четыре процедуры сохранения, тост об ошибке по-прежнему показывается.

v1.42.2 — 2026-07-26

  • На тач-устройствах подсказки при наведении больше не выскакивают при каждом касании (из отзыва: «на планшете при тапе вылезают доп. надписи — мешают»). Подсказки теперь только для мыши; на тач та же информация есть в карточках комнат и в карточке устройства по долгому нажатию.

v1.42.1 — 2026-07-26 (размеры шрифтов карточек комнат)

  • Закрываем отзыв «нельзя настроить размер шрифта»: три слайдера. В настройках пространства появился базовый размер шрифта карточек комнат для всего пространства; в настройках комнаты — независимые размеры названия и строки показателей (50–300% каждый). Эффекты перемножаются и складываются с растягиванием карточки за уголки и множителем экрана в киоск-режиме.
  • В обоих диалогах показывается живой пример карточки, который меняется прямо во время перетаскивания слайдеров.

v1.42.0 — 2026-07-26 (настройки комнаты — третий уровень)

  • У настроек теперь четыре уровня: общие → пространство → комната → устройство; более конкретный уровень переопределяет более общий (решение владельца, зафиксировано в ARCHITECTURE). В этом релизе добавлен уровень КОМНАТЫ.
  • У каждой карточки комнаты в редакторе плана появилась шестерёнка: переименовать комнату, сменить её зону HA, переопределить тип заливки только для этой комнаты (работает и в glow-пространствах — «без заливки» выводит комнату из темноты) и выбрать явный источник температуры и влажности — любое устройство или сущность HA вместо среднего по комнате. Источник питает карточку комнаты, всплывающую подсказку и температурную заливку и работает даже у комнат без зоны HA (случай из отзыва: собственный template-сенсор, привязанный к помещению).
  • Тот же раздел настроек появляется в диалоге комнаты сразу после замыкания контура.