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

3.4 KiB

ТЗ #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 выглядит как до изменения.