Files
houseplan-card/docs/specs/029-device-inbox-lifecycle.md
T
Matysh 112c260314
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

4.1 KiB
Raw Blame History

ТЗ #29 — Inbox и объяснимый жизненный цикл устройств

Цель

Заменить разрозненные «Добавить»/«Показать скрытые» одним read-only при открытии каталогом, который объясняет состояние каждой HA-привязки и даёт явные действия жизненного цикла.

Единая классификация

Pure resolver получает registry snapshot, live states, markers и product filters и возвращает одну запись на canonical binding:

Раздел Условие Основные действия
Новые активная допустимая binding без marker/tombstone Добавить, скрыть
На плане live marker, hidden !== true Найти, редактировать
Скрытые live marker hidden:true либо seed-кандидат filter Показать/добавить, причина
Доступные снова tombstone removed:true, binding снова существует Добавить заново

HA-disabled binding остаётся в своём lifecycle-разделе, но получает статус «Отключено в Home Assistant» и недоступное действие показа согласно текущему контракту disabled devices. Orphaned сохранённый marker остаётся «На плане» или «Скрытые» с предупреждением, а не превращается в «Новый».

Причины

Причина — stable enum, локализованный в UI: manual_hidden, ha_disabled, service_entry, excluded_integration, excluded_domain, grouped_light, represented_by_parent, duplicate_name_area, removed, orphaned, limited_registry. Regex/id могут быть в раскрываемой диагностике, но не в основной фразе.

UX

  • Кнопка редактора устройств открывает wide hp-dialog/side sheet с поиском, tabs/filters и счётчиками.
  • Просмотр, поиск и раскрытие причины ничего не пишут в config.
  • «Найти» переключает пространство, закрывает inbox и мягко выделяет marker.
  • «Добавить» открывает существующий device dialog с preselected binding.
  • «Скрыть» материализует hidden:true, но не removed:true.
  • «Добавить заново» заменяет tombstone одним live marker и не наследует старую позицию, файлы или trail, уже удалённые подтверждённым Delete.
  • Все mutation actions получают Undo/confirmation согласно их текущей семантике; bulk actions в v1 не входят.

Инварианты и конкуренция

Canonical binding уникальна. Повторный save и конфликт revision не создают дубликат. Registry refresh обновляет список с сохранением tab/search, но не закрывает редактируемый dialog. Limited registry не выводит ложный «удалён».

Проверки и приёмка

  • матрица resolver по marker/hidden/removed/disabled/orphaned/filter;
  • два клиента и revision conflict;
  • re-add device/entity tombstones, virtual marker вне inbox;
  • поиск, keyboard navigation, narrow layout и ru/en golden;
  • любой кандидат находится ровно в одном разделе и имеет понятную причину;
  • открытие inbox не меняет config/layout/revisions.