Files
houseplan-card/docs/specs/012-vacuum-room-cleaning-highlight.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

67 lines
3.3 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.
# ТЗ #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 индикацию и никогда
не видит движущийся объект в вымышленной точке.