mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-03 05:08:53 +00:00
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
47 lines
2.5 KiB
Markdown
47 lines
2.5 KiB
Markdown
# ТЗ #11 — Health lifecycle сохранённого vacuum source
|
||
|
||
- Issue: https://github.com/Matysh/houseplan-card/issues/11
|
||
- Приоритет: P2
|
||
- Статус ТЗ: реализовано в Stage 1; целевой gate v1.61.0-beta.1 пройден, ожидается публикация
|
||
- Родительский контракт: HP-VAC-02 rev.7 §5.2
|
||
|
||
## Цель
|
||
|
||
Переименование, удаление или отключение сохранённого source не должно молча
|
||
останавливать server trail. Backend сообщает дедуплицированный incident, UI —
|
||
статус и прямой путь перевыбора, не делая silent rebind.
|
||
|
||
## Backend state machine
|
||
|
||
Ключ health state — `(marker_id, source_entity_id)`, reason хранится как mutable
|
||
поле `missing|disabled` и не входит в identity.
|
||
|
||
- registry row disabled → `disabled`;
|
||
- registry row enabled или exact live state, включая `unavailable` и entity без
|
||
vacuum attributes → доказанное существование/recovery;
|
||
- авторитетный registry без row и без exact state → `missing`;
|
||
- недоступный/ограниченный registry и отсутствие state → `unverified`.
|
||
|
||
`unverified` нейтрален: не создаёт, не закрывает и не изменяет incident.
|
||
Первый failure после healthy/recovery пишет один warning. Смена reason внутри
|
||
того же incident не пишет новый warning. Recovery очищает incident с info log.
|
||
Удаление marker/rebind удаляет старый ключ.
|
||
|
||
Нормативные последовательности:
|
||
|
||
- available→missing→disabled→missing→available→missing = 2 warnings;
|
||
- available→disabled→unsupported-existing→disabled = 2 warnings;
|
||
- missing→unverified→missing = 1 warning.
|
||
|
||
## UI
|
||
|
||
Resolver сохраняет pinned entity и показывает `missing`, `disabled` либо
|
||
`unverified`; stale attributes не рисуют puck. Banner содержит «Выбрать
|
||
источник», documentation остаётся доступна. Перевыбор немедленно обновляет
|
||
marker и backend subscription после config event.
|
||
|
||
## Приёмка
|
||
|
||
Нет log spam на refresh/restart; transition tests проходят; source не меняется
|
||
сам; re-pick восстанавливает trail; limited registry не создаёт ложный warning.
|