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

66 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ТЗ #29 — Inbox и объяснимый жизненный цикл устройств
- Issue: https://github.com/Matysh/houseplan-card/issues/29
- Приоритет: P1
- Статус ТЗ: draft, требуется UX-утверждение
- Связано: #44 переносит advanced-фильтры в этот интерфейс
## Цель
Заменить разрозненные «Добавить»/«Показать скрытые» одним 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.