Files
houseplan-card/docs/specs/006-vacuum-xcme-path.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

52 lines
3.4 KiB
Markdown

# ТЗ #6 — XCME: многосегментный путь без ложных перемычек
- Issue: https://github.com/Matysh/houseplan-card/issues/6
- Приоритет: P1
- Статус ТЗ: реализовано по HP-VAC-02 rev.7; целевой gate v1.61.0-beta.1 пройден, ожидается публикация
- Родительский контракт: `docs/superpowers/specs/2026-08-09-vacuum-integration-coverage-design.md`, §4.1
## Цель
Корректно принимать Xiaomi Cloud Map Extractor `attributes.path.path` как набор
независимых траекторий. Разрыв между подмаршрутами не должен превращаться в
нарисованный переезд робота.
## Требования
1. Канонический тип frontend — `VacPath = Pt[][]`, где каждая внутренняя
последовательность является отдельным drawable subpath.
2. Парсер принимает плоский legacy path, `path.points` и `path.path`.
3. Невалидные точки отбрасываются; subpath короче двух валидных точек не
участвует в отображении и арбитраже источников.
4. Сначала фильтруются недорисовываемые сегменты, затем остаются последние 64.
5. Общий бюджет — 4000 точек. У каждого subpath сохраняются обе крайние точки;
остаток распределяется largest-remainder, при равенстве выигрывает более
старый из оставшихся subpath.
6. Рендер формирует один SVG `path` с отдельной командой `M` на каждый subpath,
без `L` между ними.
7. Один resolver выбирает drawable integration path, затем server trail, затем
локальный runtime trail. Пустой/одноточечный integration path не блокирует
следующий источник.
8. При скрытии terminal target изменяется только последний drawable subpath.
## Совместимость и ограничения
- Сохранённый server trail и формат backend не мигрируют.
- Dreame/Valetudo integration path не заявляется без подтверждённого формата.
- Никаких CSS-фильтров или соединительных пунктирных линий между subpath.
## Проверки
- unit: все поддерживаемые формы, невалидные точки, cap после фильтрации;
- unit: точный бюджет, сохранение концов и old→new tie-break;
- unit: drawable arbitration и обрезка последнего target;
- browser: несколько `M`, отсутствие моста между удалёнными сегментами;
- performance: 64/4000 остаются в текущем render budget.
## Приёмка
- XCME history виден полностью в пределах бюджета;
- визуальных перемычек между разрывами нет;
- fallback trail появляется, если integration path не рисуем;
- flat legacy path выглядит как до изменения.