mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-05 06:08:59 +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
67 lines
3.3 KiB
Markdown
67 lines
3.3 KiB
Markdown
# ТЗ #12 — Vacuum Tier C: подсветка убираемой комнаты
|
||
|
||
- Issue: https://github.com/Matysh/houseplan-card/issues/12
|
||
- Приоритет: P2
|
||
- Статус ТЗ: ready for review
|
||
- Зависимости: Stage 1 resolver; room dialog #28 используется для текстового статуса
|
||
|
||
## Цель
|
||
|
||
Интеграции без координат, но с текущим segment/service-area, показывают место
|
||
уборки на уровне комнаты без выдуманного puck или trail.
|
||
|
||
## Normalized activity adapter
|
||
|
||
Pure adapter registry возвращает:
|
||
|
||
```ts
|
||
type VacRoomActivity = {
|
||
sourceEntity: string;
|
||
rawSegments: string[];
|
||
state: 'cleaning' | 'inactive' | 'unknown';
|
||
integration: string | null;
|
||
};
|
||
```
|
||
|
||
Stage 1 adapters: документированные Roborock segment attributes/services;
|
||
Matter RVC добавляется только после подтверждения HA contract. Неизвестный
|
||
attribute не угадывается по порядку/первому числу.
|
||
|
||
## Mapping
|
||
|
||
1. Сначала explicit `marker.vacuum.segment_map[rawSegment] = room_id`.
|
||
2. Затем exact canonical name match, только если source предоставляет имя.
|
||
3. Неоднозначный/удалённый room id не подсвечивается и получает диагностику.
|
||
4. UI в vacuum section показывает observed segments и room dropdown; mapping
|
||
сохраняется только явным Save.
|
||
5. Несколько активных segments могут подсветить несколько комнат.
|
||
|
||
`room_highlight` становится поддерживаемым boolean: default on для Tier C,
|
||
явный off скрывает визуал, но не очищает mapping.
|
||
|
||
## Визуал и поведение
|
||
|
||
- Только при semantic cleaning state: мягкий 3 s breathing fill внутри
|
||
существующей clean-floor path и небольшой robot badge в room label/dialog.
|
||
- `prefers-reduced-motion`: статичный outline/badge без pulse.
|
||
- Цвет не заменяет configured fill/Glow; overlay имеет отдельный class и
|
||
`pointer-events:none`.
|
||
- Tier C не создаёт puck, path, fake coordinate, glow source или area split.
|
||
- Hidden/removed/HA-disabled vacuum не влияет на комнаты.
|
||
|
||
## Эдж-кейсы
|
||
|
||
Room rename не ломает explicit id map; room deletion делает mapping stale;
|
||
space mismatch блокирует highlight; segment меняется во время dialog; robot
|
||
returning/paused/docked прекращает pulse; несколько vacuum в комнате дают один
|
||
badge с count/accessible text.
|
||
|
||
## Проверки и приёмка
|
||
|
||
- adapter fixtures по интеграциям, invalid/array/string segment forms;
|
||
- mapping priority, ambiguity, room delete/rename, disabled marker;
|
||
- browser/golden обычный и reduced-motion;
|
||
- room dialog сообщает «Пылесос убирает эту комнату»;
|
||
- без координат пользователь получает честную room-level индикацию и никогда
|
||
не видит движущийся объект в вымышленной точке.
|