55 KiB
House Plan — актуальный план улучшений продукта
Срез: локальная версия v1.60.2-beta.3, 8 августа 2026 года.
Этот документ — рабочий backlog, а не журнал истории. Здесь находятся только нерешённые задачи, которые подтверждаются текущим кодом, интерфейсом, пользовательским руководством или зафиксированным scope продукта. После выхода изменения пункт удаляется из файла полностью; история остаётся в CHANGELOG.
1. Как читать и обновлять план
Приоритеты
| Приоритет | Значение |
|---|---|
| P0 | Подтверждённая потеря данных, нарушение модели доступа, опасное управление домом или блокировка основного сценария |
| P1 | Регулярная пользовательская ловушка, недоступный основной сценарий, высокий риск регрессий или архитектурный долг, уже замедляющий развитие |
| P2 | Существенное улучшение понятности, поддержки, производительности или качества, которое не блокирует текущую работу |
| P3 | Условная продуктовая инициатива; начинать только после отдельного решения владельца и самостоятельного ТЗ |
На текущем срезе подтверждённых P0 нет. Если такой дефект появляется, он имеет приоритет над этой очередью и после исправления не остаётся в документе как закрытый пункт.
Статусы открытых задач
| Статус | Значение |
|---|---|
| Готово к ТЗ | Проблема и ожидаемый результат понятны; перед кодом достаточно детализировать реализацию |
| Нужно UX-решение | Перед реализацией требуется утвердить конкретное пользовательское поведение |
| Исследование | Сначала нужны измерения, инвентаризация данных или прототип без изменения модели |
| По запросу | Инициатива соответствует scope, но не должна вытеснять основной backlog без отдельного решения |
Обязательные правила
- View остаётся главным ежедневным режимом; редакторы обслуживают его и не добавляют взаимодействия в просмотр без понятной пользы для членов семьи.
- Ни одна миграция, оптимизация или очистка не удаляет пользовательские файлы и данные по косвенному признаку.
- Новое поле настройки не добавляется без runtime-потребителя, локализации, backend validation, документации и теста совместимости.
- Сложная геометрия развивается через чистые функции и сценарные матрицы, а не через дополнительные ветки внутри корневого render.
- Большой рефакторинг делится на небольшие поведенчески нейтральные этапы. Переписывание приложения целиком не планируется.
- Touch, мышь и клавиатура являются равноправными вариантами режима просмотра. Редакторы desktop-first: полная поддержка гарантируется для компьютера с мышью/клавиатурой, а touch-редактирование выполняется по остаточному принципу согласно
TOUCH-SUPPORT.md. Светлая/тёмная тема иprefers-reduced-motionостаются общими требованиями всех поддерживаемых поверхностей.
2. Текущий срез и главные риски
| Область | Фактическое состояние | Главный оставшийся риск |
|---|---|---|
| Пользовательская ценность | Основные spatial-сценарии Home Assistant закрыты; продукт сочетает просмотр, редактирование, геометрию, свет, климат и быстрые действия | Дальнейшее добавление функций без упрощения существующего UI ухудшит осваиваемость |
| View на desktop | Информативен и визуально целостен | Часть контекста комнаты по-прежнему зависит от hover и маленькой иконки HA-зоны |
| View на touch | Устройства имеют tap/long-press сценарии | У комнаты нет полноценного tap-эквивалента hover-подсказки |
| Редакторы | Функционально глубокие, с сеткой и общей сессионной историей | Много скрытых жестов и маленьких зон попадания; полноценного клавиатурного управления холстом нет |
| Настройки | Все основные уровни наследования представлены | Диалоги пространства, устройства и общих настроек длинные и смешивают разные задачи |
| Состояния устройств | Семантика вычисляется общими resolver-функциями | Пользователь не видит в форме, какое состояние и какая сущность будут определять итоговый визуал |
| Данные и совместимость | Есть versioned migration и явная оптимизация | В модели остаются legacy-поля и внутренние ключи без публичного жизненного цикла |
| Frontend | 29 TypeScript-файлов, 28 333 физические строки | src/houseplan-card.ts содержит 13 840 строк — 48,8% всего TypeScript; любое изменение затрагивает слишком широкую поверхность |
| Типизация | Строгий TypeScript включён | В src/ остаётся около 553 употреблений any, включая внутреннюю бизнес-логику, а не только границу HA |
| Проверки | Инвентаризация: 444 Node unit, 102 pure backend, 50 HA-harness и 114 browser smoke | Геометрические и визуальные регрессии всё ещё часто обнаруживаются по пользовательским скриншотам; нет системной golden-image матрицы и измеряемых performance budgets |
| Документация | Подробное русское руководство и двуязычный changelog существуют | Скриншоты и часть обзорного текста отстают от текущего состава редакторов |
Главная цель ближайших циклов: сделать уже существующую глубину понятной, доступной и дешёвой в сопровождении, не расширяя без необходимости поверхность настроек.
3. Реестр открытых инициатив
| ID | Приоритет | Статус | Результат |
|---|---|---|---|
| HP-UX-01 | P1 | Нужно UX-решение | Карточка комнаты по tap/click с чистой площадью и доступными метриками |
| HP-UX-02 | P1 | Нужно UX-решение | Понятный inbox устройств: новые, размещённые, скрытые и доступные к повторному добавлению |
| HP-UX-03 | P1 | ТЗ на согласовании | Live preview отображения устройства и предсказуемый текстовый режим значения |
| HP-UX-04 | P1 | Готово к ТЗ | Разделение длинных диалогов по задачам и условное скрытие неприменимых полей |
| HP-UX-05 | P3 | По запросу | Помощь по жестам и недорогое улучшение touch-редакторов без требования паритета с desktop |
| HP-A11Y-01 | P1 | Исследование | Семантика плана для клавиатуры и screen reader; состояние читается не только цветом |
| HP-A11Y-02 | P1 | Готово к ТЗ | Единое кастомное подтверждение вместо оставшихся browser confirm() |
| HP-DATA-01 | P1 | Исследование | Единый реестр схемы, миграций и срока жизни compatibility-полей |
| HP-ARCH-01 | P1 | Готово к ТЗ | Поэтапное разбиение корневого компонента и монолитных стилей |
| HP-QA-01 | P1 | Готово к ТЗ | Визуальная regression-матрица геометрии, света и адаптивных диалогов |
| HP-PERF-01 | P1 | Исследование | Воспроизводимый профиль большого дома и бюджеты производительности |
| HP-DOC-01 | P1 | Готово к ТЗ | Актуальные скриншоты и единая пользовательская навигация по документации |
| HP-UX-06 | P2 | Нужно UX-решение | Явный room override для Glow |
| HP-UX-07 | P2 | Нужно UX-решение | Упрощённая и объяснимая система масштабов названия и карточки комнаты |
| HP-UX-08 | P2 | Нужно UX-решение | Визуальный конструктор правил иконок с advanced regex-режимом |
| HP-UX-09 | P2 | Исследование | Диагностика слишком больших подложек и безопасное уменьшение растров |
| HP-UX-10 | P2 | Нужно UX-решение | Более направляемое создание комнат на основе Floors/Areas Home Assistant |
| HP-A11Y-03 | P2 | Исследование | Клавиатурное редактирование выбранных объектов на сетке |
| HP-ENG-01 | P2 | Готово к ТЗ | Измеряемое backend coverage, строгая Python-типизация и quality-scale хвосты |
| HP-ENG-02 | P2 | Нужно UX-решение | Безопасный пользовательский support report из раздела обслуживания |
| HP-ENG-03 | P2 | Исследование | Явное решение по внутренним фильтрам и группировке устройств |
| HP-PROD-01 | P3 | По запросу | Пользовательские картинки как объекты декора |
| HP-PROD-02 | P3 | По запросу | Сводный security glance по дверям, окнам и замкам |
| HP-PROD-03 | P3 | По запросу | Пространственное отображение person/presence |
| HP-PROD-04 | P3 | По запросу | Пороговые цвета метрик карточки комнаты |
4. P1 — ближайший продуктовый цикл
HP-UX-01 — карточка комнаты в режиме просмотра
Проблема. Чистая площадь и часть контекста комнаты доступны через hover. На touch hover отсутствует, а переход к HA area спрятан в маленькой иконке около названия. Нажатие по самому полу комнаты сейчас не даёт равнозначного результата.
Предлагаемое поведение. Обычный tap/click по свободной части комнаты в View открывает компактный hp-dialog:
- название комнаты;
- чистая площадь по той же геометрии, которая используется в hover и расчётах;
- только доступные метрики: температура, влажность, LQI и состояние света;
- явное действие «Открыть зону в Home Assistant», если у комнаты есть area;
- закрытие без навигации для комнаты без area.
Hover-подсказка на desktop остаётся быстрым просмотром. Клик по устройству, двери, окну, кнопке комнаты или другому интерактивному объекту не должен проваливаться в комнату.
Эдж-кейсы. Комната без area; вложенные комнаты; отверстия в чистом полу; толстые и скрытые стены; перегородки и колонны; Glow под курсором; pan до отпускания указателя; несколько комнат с общей стеной; выключенные метрики; пустое название.
Критерии приёмки. Площадь совпадает с hover и resize; сценарий работает мышью, touch и клавиатурой; один tap не открывает одновременно устройство и комнату; переход в HA существует только как подписанная кнопка.
HP-UX-02 — inbox и жизненный цикл устройств
Проблема. Текущие «Добавить» и «Показать скрытые» технически позволяют восстановить устройство, но не объясняют, почему оно не появилось на плане, было скрыто или снова стало доступно. Автоматический фильтр, ручное скрытие и удаление выглядят как похожие состояния.
Целевая структура. В редакторе устройств нужен единый список с фильтрами:
| Раздел | Что показывает | Действия |
|---|---|---|
| Новые | Привязки HA, которых ещё нет на плане | Добавить, скрыть |
| На плане | Видимые маркеры | Найти на плане, редактировать |
| Скрытые | Маркеры с ручным hidden и первично отфильтрованные кандидаты |
Показать, добавить, объяснить причину |
| Доступные снова | Удалённые привязки, которые можно добавить как новый маркер | Добавить заново |
Причина должна быть пользовательской: «скрыто вручную», «служебная сущность», «исключённый тип», «уже представлено родительским устройством». Внутренние regex и id не показываются как основное объяснение.
Инварианты. Просмотр списка не изменяет конфигурацию; повторное добавление не создаёт дубликат binding; никакой раздел не удаляет файл или trail без явного подтверждённого действия; одна и та же привязка получает один жизненный цикл на всех клиентах.
HP-UX-03 — предпросмотр отображения устройства
ТЗ: docs/superpowers/specs/2026-08-08-device-display-preview-design.md — проект на согласовании, включая integration provenance, actual preview, демонстрацию activity и предсказуемый text value.
Проблема. Поле «Отображение» выбирает сложную комбинацию подложки, иконки, активности и значения, но форма не показывает итог для текущих сущностей. В режиме «Значение вместо иконки» числовое состояние отображается, а текстовое молча возвращает иконку.
Предлагаемая система. В диалоге устройства показывать live preview, построенный тем же resolvedDeviceVisual, что и маркер на плане. Рядом выводить короткое объяснение: какая сущность выбрана источником, доступность, фактический статус и тип активности. Статическая «легенда всех цветов» вторична; важнее объяснить текущее устройство.
Для текстового value-режима нужно утвердить один контракт:
- использовать локализованное Home Assistant значение;
- одна строка с ограничением ширины и ellipsis;
- полное значение доступно в tooltip/ARIA и карточке устройства;
unknown/unavailableиспользуют обычное приглушённое представление, а не новый цвет;- слишком длинное или отсутствующее значение предсказуемо возвращает иконку и объясняет это в preview.
В тот же небольшой пакет входит исправление UI-подписей без смены ключей хранения: show_temperature должен называться «Показывать температуру и влажность», а вложения — «Файлы и инструкции» с форматами и лимитом.
HP-UX-04 — информационная архитектура диалогов
Проблема. Диалоги пространства, устройства и общих настроек содержат несколько независимых задач в одной длинной прокрутке. У виртуального или пассивного объекта видны поля, которые не могут дать полезный результат.
Целевая группировка. Это изменение интерфейса, а не модели данных.
| Диалог | Разделы |
|---|---|
| Пространство | Основа; комнаты и подписи; внешний вид; окружение |
| Устройство | Привязка; действие; состояние и свет; внешний вид; информация и файлы |
| Общие настройки | Цвета; окружение; обслуживание; о продукте |
На desktop допустимы вкладки или боковая навигация; на узком экране — последовательные секции/аккордеон. Выбранный вариант должен оставаться нативно понятным в HA и не создавать вложенный горизонтальный скролл.
Условность полей. Световые controls и радиус показываются только когда привязка может участвовать в on/off-свете; climate temperature — только при climate; vacuum — только при источнике координат; настройки состояния скрываются у полностью виртуального маркера; удаление и скрытие остаются видимыми действиями жизненного цикла.
Критерии приёмки. Переключение разделов не теряет несохранённые значения; ошибки ведут к конкретному полю; footer стабилен при любой высоте; весь сценарий проходит клавиатурой; существующие конфиги сохраняются без миграции.
HP-A11Y-01 — доступная семантика View
Проблема. Комнаты являются SVG-формами с hover, устройства — кликабельными div, а смысл working/open/alarm часто считывается прежде всего по цвету. Общий hp-dialog закрывает модальную часть, но сам план остаётся слабым для клавиатуры и screen reader.
Исследование и целевой контракт.
- Определить компактное дерево доступности, которое не создаёт сотни tab-stop: roving tabindex либо отдельный список «Комнаты / Устройства / Проёмы».
- Для интерактивного объекта сформировать единый
aria-label: имя, тип, локализованное состояние, комната и доступное действие. - Добавить нецветовой визуальный признак для критических состояний: тревога, открыто/разблокировано, активная механика. Он не должен превращать каждый маркер в набор badge.
- Room card из HP-UX-01 сделать основной доступной точкой комнаты.
- Проверить порядок фокуса после смены пространства, режима и закрытия карточки.
Критерии приёмки. Основные View-сценарии доступны без мыши; axe-проверка не находит базовых нарушений name/role/value и modal boundaries; при отключённом цвете состояния остаются различимы текстом или формой.
HP-A11Y-02 — единое подтверждение опасных действий
Проблема. В коде остаются browser confirm() для удаления комнаты, пространства, плана, устройства, незавершённого контура/сегмента и для unlock. Они визуально и семантически отличаются от остальных диалогов, плохо объясняют объект операции и не дают контролировать начальный фокус.
Решение. Компонент hp-confirm поверх hp-dialog с promise API:
- заголовок операции, имя объекта и короткое описание последствий;
- destructive-кнопка визуально отделена от cancel;
- начальный фокус на безопасном действии;
Esc, focus trap и restore focus наследуются отhp-dialog;- unlock имеет отдельную предупреждающую семантику и никогда не переиспользует текст удаления;
- повторный вызов не накладывает два подтверждения и не применяет callback старого экземпляра.
Критерий приёмки. В runtime-коде нет прямых confirm(); каждый destructive path имеет browser smoke с cancel и accept; touch footer не обрезается.
HP-DATA-01 — единая схема и lifecycle compatibility-полей
Проблема. Типы TypeScript, формы, runtime и Voluptuous validation синхронизируются вручную. В текущей модели видны разные классы долга:
- устаревший карточечный
tap_action; - read-compatibility значение display
ripple; - временный
settings.show_all; vacuum.room_highlightиvacuum.segment_map, для которых нет найденного runtime-потребителя;settings.group_lightsиsettings.exclude_integrations, влияющие на runtime без поддерживаемого пользовательского интерфейса.
Первый этап — исследование без удаления. Сформировать registry полей с типом, default, уровнем наследования, UI-видимостью, runtime consumer, frontend/backend enum, версией появления, migration и сроком read-compatibility. Локальный анализатор конфига должен показать, какие legacy-поля реально встречаются, не отправляя телеметрию наружу.
Второй этап.
- parity-тест сравнивает frontend и backend enum/limits;
- «Оптимизировать планы» показывает конкретную миграцию до записи;
- unknown future fields сохраняются;
- deprecated поле удаляется из публичной модели только после явно заданного окна чтения;
- внутренний ключ либо получает поддерживаемый UI, либо становится фиксированным правилом и удаляется из хранимой конфигурации.
Критерии приёмки. Нет поля, одновременно публичного в типе/schema и не имеющего решения «используем / мигрируем / удаляем»; новый schema drift ломает CI; открытие и сохранение старого конфига не меняет визуал без явной миграции.
HP-ARCH-01 — декомпозиция frontend без big bang
Проблема. Почти половина TypeScript находится в одном houseplan-card.ts; там смешаны lifecycle Lit, server sync, pointer state machines, геометрические команды, все диалоги и render layers. styles.ts также остаётся глобальным монолитом. Это главный множитель стоимости любых следующих функций.
Целевые границы.
src/
app/
houseplan-card.ts # composition, HA lifecycle, top-level routing
houseplan-store.ts # normalized config/layout snapshot and revisions
navigation-controller.ts # space, mode, viewport, warm remount
editors/
plan/ # tools, pointer state, commands, toolbar
devices/ # discovery, form state, marker commands
decor/ # tools, form state, render orchestration
render/
rooms.ts
walls.ts
openings.ts
lighting.ts
devices.ts
vacuum.ts
dialogs/
room-dialog.ts
space-dialog.ts
device-dialog.ts
settings-dialog.ts
components/
hp-dialog.ts
hp-confirm.ts
hp-color-opacity.ts
Это направление, а не требование создать все файлы заранее. Каждый этап переносит одну законченную ответственность вместе с типами и тестами.
Порядок безопасного разбиения.
- Render-only слои с явным immutable input и callbacks.
- Модели состояния диалогов и их validation/serialization.
- Контроллеры Plan/Devices/Decor как конечные автоматы жестов.
- Нормализованный store и серверные ревизии.
- Scoped styles рядом с компонентами.
Ограничения. Никакой новой второй модели геометрии; чистые модули logic, wall-thickness, open-spans, resize, physical-geometry, sun и device-visual остаются источниками истины. В новой продуктовой логике используется unknown и type guards вместо any; HA adapter boundary может быть изолированным исключением.
Критерии приёмки. Корневой компонент становится композиционным, ориентир — менее 3 500 строк; feature-модуль обычно не превышает 800 строк; количество any монотонно снижается; один и тот же полный smoke-набор проходит до и после каждого этапа; визуальных изменений в refactor-only PR нет.
HP-QA-01 — visual regression для геометрии и диалогов
Проблема. 114 browser smoke хорошо проверяют события и DOM-контракты, но не гарантируют отсутствие белых щелей, ложных торцов, чёрной промежуточной заливки, смещения footer или обрезания заголовка.
Golden-image матрица.
| Набор | Обязательные случаи |
|---|---|
| Стены | одинаковая/разная толщина, T/X-стыки, вложенная комната, реальная+виртуальная граница, перегородка и колонна |
| Проёмы | дверь/окно, тонкая/толстая стена, тоннель, край стены, общая стена |
| Свет | Glow через дверной проём, отсечение откосами, блокировка перегородкой/колонной, несколько источников, солнечные лучи |
| Hover | чистый пол, общие стены, Glow поверх комнаты, вложенные контуры |
| Диалоги | длинный RU/EN title, мобильная ширина/высота, footer, keyboard focus, color picker popover |
| Темы | тёмная и светлая HA theme, View и каждый editor |
| Масштаб | 0.4×, fit, крупный zoom, warm remount |
Снимки строятся на синтетических fixtures. Обновление эталона требует явного просмотра diff, а не автоматической перезаписи.
Критерии приёмки. Матрица запускается отдельным CI job; браузер, viewport, шрифты и анимации детерминированы; обычные DOM-smoke остаются быстрым первым слоем; новый тип стыка или диалога добавляет fixture в ту же матрицу.
HP-PERF-01 — профиль большого дома
Проблема. Кэши чистого пола и световой геометрии уже есть, но нет воспроизводимого ответа, сколько стоит план с большим числом комнат, физических объектов, декора и устройств. Без baseline оптимизация остаётся реактивной.
Reference fixture. Не менее 60 комнат, 200 устройств, 100 проёмов, 100 перегородок/колонн, 500 объектов декора, несколько этажей и частые HA state updates. Все данные синтетические.
Измерения. Первый стабильный render; смена пространства; один state update; pan/zoom; открытие больших диалогов; пересчёт Glow; resize сложной комнаты; объём кэшей после продолжительной работы.
Сначала фиксируется baseline на одном Chromium/CI-профиле. Затем утверждаются budgets: отсутствие long task выше согласованного порога в View, отсутствие роста памяти после циклов переключения и максимум допустимой регрессии к baseline. Числа нельзя выбирать до первого измерения.
Критерии приёмки. Benchmark повторяем; результат хранится как artefact; PR с изменением горячего пути показывает diff; кэши имеют ограничение и корректную инвалидацию; производительность не проверяется только субъективным «плавно».
HP-DOC-01 — документация текущего пользовательского опыта
Проблема. User guide подробный, но обзорные README-скриншоты и часть формулировок отражают более ранний состав редакторов. Пользователь сначала видит именно README/HACS, поэтому несоответствие ухудшает onboarding.
Пакет.
- переснять на синтетическом доме View, создание пространства, комнату, Plan editor, Devices editor, Background editor и карточку устройства;
- коротко объяснить различие «Контур комнаты / Перегородка / Колонна / Граница / Проём»;
- добавить таблицу жестов mouse/touch/keyboard;
- провести проверку внутренних ссылок и терминов RU/EN;
- README оставить обзорным, детали вести в
USER-GUIDE.ru.mdи тематические документы; - для нескольких карточек с разными стартовыми пространствами явно зафиксировать поддерживаемый сценарий и ограничения.
Критерии приёмки. Ни один screenshot не показывает отсутствующую кнопку или старое название; основной путь от установки до первой комнаты читается без changelog; ссылки проверяются в CI.
5. P2 — следующий слой улучшений
HP-UX-06 — явный Glow на уровне комнаты
Сейчас пространство может выбрать Glow, а комната — наследовать его или переопределить на none/lqi/light/temp. Комната не может зафиксировать Glow, если пространство позднее переключат в другой режим.
Нужно добавить glow в room override без изменения семантики наследования. До кода требуется решить, участвует ли явно отключённая от Glow соседняя комната в физическом распространении света или только не рисует базовое затемнение. Решение фиксируется одной матрицей для fill, clip и переходов через виртуальные/дверные границы.
HP-UX-07 — одна объяснимая система масштабов комнаты
Сейчас итоговый размер образуют масштаб карточки пространства, отдельные name_scale/label_scale комнаты и сохранённый drag-scale карточки. Система мощная, но пользователь не видит итоговый коэффициент и способ сброса конкретного уровня.
Цель: оставить один default пространства и явные room overrides для названия и метрик. Визуальный resize либо редактирует те же числа, либо показывает фактическое значение и кнопку Reset. Legacy layout-scale читается без визуального скачка и преобразуется только явной оптимизацией.
HP-UX-08 — конструктор правил иконок
Обычный режим должен предлагать поля «домен», device_class, слова в имени/модели и итоговую иконку. Порядок правил остаётся видимым, тестовое устройство показывает первое сработавшее правило и причину. Regex сохраняется как advanced-режим с валидацией и предупреждением о приоритете; существующие regex не переписываются автоматически.
HP-UX-09 — большие подложки
Добавить локальную диагностику разрешения, decoded memory и ожидаемого размера перед загрузкой PNG/JPEG/WebP. Для больших растров предложить безопасную копию с уменьшением, сохраняя оригинал до подтверждения успешной загрузки. SVG не растеризуется автоматически. Порог определяется после тестов на типичных wall-tablet/desktop устройствах и документируется вместе с file-size limit.
HP-UX-10 — Floors/Areas как направляемый onboarding
При создании комнат список area должен учитывать выбранный/импортированный floor, первым показывать неиспользованные зоны этого этажа и предлагать их имя. Нужен небольшой progress «размечено N из M зон» и явный путь для комнаты без zone. Компонент по-прежнему не переименовывает и не переносит HA area — он только читает registry.
HP-A11Y-03 — клавиатурное редактирование выбранных объектов
Первый этап не обязан рисовать произвольный polygon только клавиатурой. Достаточно сделать выбор и точные операции:
- roving focus между объектами текущего слоя;
- Enter — свойства, Delete — только выбранный объект с подтверждением там, где оно требуется;
- стрелки — на один узел сетки, модификатор — на согласованный увеличенный шаг;
- Escape — отмена текущего жеста/выбора;
- доступное объявление координат, длины, угла и результата Undo.
До реализации нужен прототип конфликтов со scroll, pan и текстовыми полями.
HP-ENG-01 — измеряемое инженерное качество backend
- подключить
pytest-covи зафиксировать честное покрытие backend, затем довести его минимум до 95% по исполняемым строкам; - настроить строгую Python-типизацию по модулям, начиная с validation/store/websocket boundaries;
- добавить lint/format gate без массового шумного rewrite;
- закрыть применимые пункты quality scale: troubleshooting и examples;
- пользовательские ошибки WebSocket, которые доходят до UI, должны иметь стабильный code и локализованное сообщение.
HP-ENG-02 — support report без персональных данных
В «Обслуживании» добавить действие «Скопировать отчёт для поддержки». Отчёт содержит версии card/integration/HA, модель данных, количества пространств/комнат/стен/устройств, состояние ревизий, результаты read-only validation и активные Repairs. По умолчанию исключаются имена, entity/device id, URLs, пути файлов, описания и координаты дома. Перед копированием пользователь видит полный текст.
HP-ENG-03 — фильтры и группировка как явное решение
Провести инвентаризацию exclude_integrations и group_lights на реальных локальных конфигах. Для каждого ключа выбрать одно из двух:
- поддерживаемая advanced-настройка в inbox с понятным эффектом и default;
- фиксированное продуктовой логикой поведение без хранимого ключа.
Нельзя оставлять третий вариант — скрытую настройку, которая влияет на результат, но не видна пользователю и не имеет migration policy.
6. P3 — инициативы только по отдельному решению
HP-UX-05 — помощь по жестам и best-effort touch-редакторы
Статус поддержки. Редакторы являются desktop-first инструментами администратора. Полный touch-паритет не является целью или критерием релиза. Пользователям рекомендуется редактировать планы на компьютере; неудобная, частичная или отсутствующая touch-операция допустима, если View и безопасность данных не страдают.
Проблема. Даже в эталонной desktop-среде скрытые жесты (double click, Ctrl/Cmd, Shift, конечные ручки и тонкие объекты) не всегда объясняются в момент работы. Некоторые touch-улучшения можно получить дёшево, не усложняя модель взаимодействия.
Что изменить.
- интерактивные ручки и icon-only кнопки получают увеличенную невидимую область там, где это не создаёт конфликтов геометрии или desktop-ввода; размер 44×44 является ориентиром, а не обязательным контрактом всех редакторов;
- линии, тонкие контуры и концы сегментов используют scale-independent hit area;
- активный инструмент показывает одну короткую контекстную подсказку, а не постоянную стену текста;
- Help overlay собирает
Ctrl/Cmd-замыкание,Shift-углы, double click свойств, Undo/Redo, pan/zoom и Erase; - подсказка различает keyboard modifier по платформе;
- overlay можно закрыть навсегда и повторно открыть из панели;
- дорогие precision-жесты не переносятся на touch только ради формального паритета; допустимо скрыть/отключить операцию и рекомендовать desktop;
- best effort не позволяет сохранять случайную геометрию после pinch,
pointercancelили второго касания и не позволяет ломать выход обратно в View.
Эдж-кейсы. Пересекающиеся hit-зоны; две близкие ручки; pan/pinch над выбранным объектом; stylus; zoom 0.4× и крупный zoom; скрытая панель; prefers-reduced-motion; гибридный ноутбук; планшет с подключённой мышью.
Критерий. Desktop-подсказки и рабочие операции остаются понятными и полными. Touch-улучшения принимаются отдельно по конкретным сценариям; общая функциональная эквивалентность редакторов не проверяется.
HP-PROD-01 — картинки как объекты декора
До UI нужен отдельный lifecycle-дизайн: upload, reuse, copy-on-write, ссылки между пространствами, квоты, замена, экспорт, явное удаление и защита от файлов-сирот. Геометрический transform может использовать существующий контракт декора, но серверное хранение нельзя строить как побочный вариант вложений устройства.
HP-PROD-02 — security glance
Один компактный статус дома: закрыты ли двери/окна и заперты ли замки, с раскрытием списка проблемных точек. Это только просмотр и навигация; новый быстрый массовый unlock запрещён.
HP-PROD-03 — person/presence на плане
Нужно сначала выбрать модель приватности и источник: HA person area, device tracker или присутствие комнаты. Не смешивать длительное присутствие с коротким событием движения и не рисовать ложную точную позицию, если HA знает только area.
HP-PROD-04 — пороговые цвета метрик комнаты
Температура, влажность и LQI в карточке комнаты могут иметь настраиваемые диапазоны, но настройка не должна дублировать существующие fill thresholds. Сначала определить общую модель порогов и наследования.
7. Рекомендуемый порядок выполнения
| Пакет | Состав | Почему так |
|---|---|---|
| A. Понятный View | HP-UX-01, HP-A11Y-01, HP-A11Y-02, короткие подписи из HP-UX-03 | Максимальная ежедневная польза и обязательный desktop/touch-паритет View |
| B. Защита от повторных регрессий | HP-QA-01, HP-PERF-01, начало HP-DATA-01 | Сначала измеряем и фиксируем поведение, затем продолжаем крупные изменения |
| C. Понятная настройка устройств | HP-UX-02, HP-UX-03, HP-UX-04 | Общая информационная архитектура строится поверх уже зафиксированной семантики данных |
| D. Desktop-редакторы без скрытых ловушек | HP-A11Y-03; HP-UX-05 только по запросу или когда улучшение дёшево | Полнота и точность редакторов гарантируются на desktop; touch-паритет не должен раздувать сложность |
| E. Модульность | HP-ARCH-01 маленькими этапами на протяжении пакетов A–D | Не откладывать декомпозицию до отдельного многомесячного rewrite и не смешивать её с изменением поведения |
| F. Второй приоритет | HP-UX-06…10, HP-ENG-01…03 | Брать по одному после стабилизации соответствующего слоя |
Архитектурное разбиение, visual regression и schema registry — не отдельная «заморозка продукта». Каждый пользовательский пакет должен оставлять затронутый участок более модульным и лучше проверяемым, чем до него.
8. Матрицы качества
Обязательные сценарные матрицы
| Матрица | Измерения |
|---|---|
| Устройство | binding kind × domain × device class × state × availability × display × controls |
| Свет | auto/explicit/control source × hidden/removed × fill mode × opening × wall/partition/column |
| Комната | area/no area × nested/shared × thick wall × fill override × touch/hover/keyboard |
| Геометрия | real/virtual × thickness A/B × corner/T/X × opening × resize × Undo/Redo |
| Декор | kind × solid/dashed × fill/stroke × transform × erase/select × zoom |
| Ввод View | mouse × touch × stylus × keyboard × View/kiosk; touch является обязательной поддерживаемой поверхностью |
| Ввод редакторов | desktop mouse/keyboard × Plan/Devices/Background; touch/stylus — safety floor и только отдельно обещанные сценарии |
| Миграция | legacy field × open/save × optimize × undo optimize × future unknown field |
| Адаптивность | RU/EN × light/dark × narrow/medium/wide × reduced motion |
Метрики направления
| Метрика | Цель |
|---|---|
| Обычное действие, теряющее данные без явного решения | 0 |
| Публичное поле без runtime consumer или migration policy | 0 |
| Ключевая информация, доступная только через hover | 0 |
Опасное действие через native confirm() |
0 |
| Критический статус, различимый только цветом | 0 |
Новый any вне изолированного HA adapter boundary |
0 |
| Расхождение frontend/backend enum и limits | 0 в CI |
| Визуальная правка геометрии без соответствующего fixture | 0 |
Размер houseplan-card.ts после декомпозиции |
Ориентир <3 500 физических строк |
| Backend coverage после HP-ENG-01 | ≥95% исполняемых строк |
9. Release- и документационный процесс
Рабочий процесс владельца остаётся источником истины:
- обычные локальные правки вносятся без тестов и без коммитов;
- перед pre-release выполняются production build и минимально необходимые целевые unit/smoke проверки изменённых поверхностей;
- перед stable release выполняется полный frontend/backend/browser gate;
- текущие количества тестов берутся из
npm run inventory, а не копируются навсегда в статусные документы; - пользовательское изменение одновременно обновляет RU/EN changelog и соответствующую таблицу поведения/руководство;
- release body короткий: только значимые функции, остальное группируется как «Мелкие исправления и улучшения» / “Small fixes and improvements”, плюс ссылки на RU и EN changelog.
Сам этот файл обновляется иначе, чем changelog: завершённая инициатива удаляется, а не отмечается галочкой. Если задача утратила смысл из-за другого решения, она также удаляется с объяснением в ADR/spec или changelog соответствующего изменения.
10. Границы плана
В этот backlog не входят:
- 3D/isometric/фотореалистичное моделирование;
- редактор автоматизаций, сценариев и уведомлений;
- администрирование entity/device/area registry Home Assistant;
- история, графики, energy analytics, camera streams и медиапульт;
- общий dashboard framework;
- облачное хранение или телеметрия пользовательских планов.
Новая идея попадает сюда только если усиливает spatial glance, безопасное быстрое действие, создание/поддержку плана или качество реализации этих сценариев.