mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
Волна 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
3.5 KiB
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 как набор
независимых траекторий. Разрыв между подмаршрутами не должен превращаться в
нарисованный переезд робота.
Требования
- Канонический тип frontend —
VacPath = Pt[][], где каждая внутренняя последовательность является отдельным drawable subpath. - Парсер принимает плоский legacy path,
path.pointsиpath.path. - Невалидные точки отбрасываются; subpath короче двух валидных точек не участвует в отображении и арбитраже источников.
- Сначала фильтруются недорисовываемые сегменты, затем остаются последние 64.
- Общий бюджет — 4000 точек. У каждого subpath сохраняются обе крайние точки; остаток распределяется largest-remainder, при равенстве выигрывает более старый из оставшихся subpath.
- Рендер формирует один SVG
pathс отдельной командойMна каждый subpath, безLмежду ними. - Один resolver выбирает drawable integration path, затем server trail, затем локальный runtime trail. Пустой/одноточечный integration path не блокирует следующий источник.
- При скрытии 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 выглядит как до изменения.