mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 04:09:17 +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
52 lines
3.4 KiB
Markdown
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 выглядит как до изменения.
|