Files
houseplan-card/docs/specs/011-vacuum-source-health.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

47 lines
2.5 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.
# ТЗ #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.