mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +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
ТЗ #7 — Valetudo: комнаты из outline-полигонов
- Issue: https://github.com/Matysh/houseplan-card/issues/7
- Приоритет: P1
- Статус ТЗ: реализовано по rev.7 с прямым owner override F6; целевой gate v1.61.0-beta.1 пройден, ожидается публикация
- Родительский контракт:
legacy/docs/superpowers/specs/2026-08-09-vacuum-integration-coverage-design.md, §4.2
Цель
Использовать комнаты MQTT Vacuum Camera/Valetudo вида
{id: {name, outline: [[x,y], ...]}} для ghost-предпросмотра и
автокалибровки по названиям.
Геометрический контракт
- Приоритет якоря: атомарная пара
cx/cy→center.x/center.y→x/y→ area centroid валидного outline → центр полного bboxx0/y0/x1/y1. - Поля разных уровней никогда не смешиваются в одну пару.
- Центроид outline считается формулой shoelace. Повторённая замыкающая точка удаляется перед вычислением.
- Для нулевой площади используется детерминированное среднее валидных вершин; нечисловая вершина делает outline непригодным.
- Bbox вычисляется по вершинам или берётся из полной атомарной четвёрки
x0/y0/x1/y1; перепутанные min/max нормализуются. - По решению владельца после code-review F6 bbox-center возвращён последним compatibility fallback. Он не должен побеждать ни явный центр, ни area-centroid outline, но bbox-only комнаты больше не пропускаются.
- Plan-side якорь считается тем же
areaCentroid()по реальному room polygon, включая legacy rectangle черезroomPoly().
UX и деградация
- Автокалибровка доступна только при минимум трёх совпавших пригодных именах.
- Диагностика показывает общее число robot rooms и число совпавших имён.
- Непригодный outline не ломает остальные комнаты и не создаёт координаты 0/0.
- High residual свыше 40 см остаётся предложением до явного подтверждения.
Проверки
- L-образный polygon доказывает отличие area centroid от vertex average;
- clockwise/counter-clockwise, закрытый/незакрытый, zero-area, butterfly;
- атомарный приоритет пар и bbox-only fallback с нормализацией min/max;
- browser: Valetudo ghost, matching names и confirm-flow high residual.
Приёмка
- outline-only Valetudo rooms участвуют в fit и auto-calibration;
- bbox-only комнаты сохраняют ghost и могут участвовать в auto-calibration;
- форма ghost и bbox конечны;
- плохая комната не блокирует хорошие;
- конфиг не меняется до подтверждения грубой калибровки.