Files
houseplan-card/legacy/specs/006-vacuum-xcme-path.md
T
Claudeandclaude[bot] df46fd1c3e docs(hygiene): ТЗ выпущенных задач без живых ссылок — в legacy/specs (#682)
Волна 5 эпика #674, перенос ТЗ (класс C). Из 240 файлов `docs/specs/` в
`legacy/specs/` уехали 219: на них не ссылается ни один живой файл (код,
тесты, скрипты, workflow, документы вне архива и ревью). Остались 21 ТЗ —
на которые ссылаются код, ADR, ISOMETRIC, SUN, RADAR, LIGHT (`docs/specs/067`),
DECOR-EDITOR, support-relay, и те, на которые ссылаются они сами; README
каталога объясняет, где искать остальное. Открытых issue с файлом ТЗ среди
перенесённых нет. Относительные ссылки перенесённых файлов переписаны
(`../X` → `../../docs/X`, соседние оставшиеся ТЗ → `../../docs/specs/…`) —
все 26 резолвятся. Попутно: битая ссылка в
`089-isometric-view-stage1.md:8` на удалённый `089-isometric-view.md` —
теперь команда `git show` по истории. Строка в `legacy/README.md`.

Issue: #682
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-09-27 22:10:46 +00:00

3.5 KiB

ТЗ #6 — XCME: многосегментный путь без ложных перемычек

  • Issue: https://github.com/Matysh/houseplan-card/issues/6
  • Приоритет: P1
  • Статус ТЗ: реализовано по HP-VAC-02 rev.7; целевой gate v1.61.0-beta.1 пройден, ожидается публикация
  • Родительский контракт: legacy/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 выглядит как до изменения.