mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
Волна 1 эпика #674 — мёртвое без риска, каждое имя проверено git grep по текущему dev. Удалено: шесть demo/shot_*.mjs без читателей (shot_furniture ещё и не работает с #159), demo/capture_wall_strip_backup.mjs, demo/benchmark_coordinate_write_barrier.mjs (нигде не запускался, но входил в манифест smoke через demo/benchmark_*.mjs — теперь лист покрытия чист), scripts/dev/styles-split.mjs (падает на текущем src/styles.ts), docs/README.ru.md (индекс четырёх документов из 38 — роль у README.ru.md), demo/README.md (одна строка в карте пакета AGENTS.md вместо него) и из legacy/ — снимок аудита v1.58.0, черновик 089, завершённые планы, продуктовые снимки и две разовые диагностики; история git хранит. legacy/docs/SUN-CONTRAST.md остаётся: на него ссылаются src/sun.ts и SUN.md. Перенесено в legacy/docs/: superpowers/specs (11 дизайн-документов до процесса), QUALITY-560.md, ROADMAP.md, STATUS-FEATURES.md. Ссылки поправлены там, где они были: FILTERING.md, ТЗ 006/007/058, testing-notes, комментарии src/open-spans.ts и validation.py (только путь документа), SCOPE.md, STATUS.md, smoke_household_journeys.mjs, опись legacy/README.md; ложный маркер benchmark_coordinate_write_barrier снят с чек-листа. Issue: #678 User-Visible: no Co-Authored-By: Claude Fable 5.1 <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 выглядит как до изменения.