mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-04 05:41: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.3 KiB
3.3 KiB
ТЗ #27 — Явный выбор внешнего vacuum source
- Issue: https://github.com/Matysh/houseplan-card/issues/27
- Приоритет: P1
- Статус ТЗ: реализовано по HP-VAC-02 rev.7; целевой gate v1.61.0-beta.1 пройден, ожидается публикация
- Родительский контракт: HP-VAC-02 §4.4–4.5
Цель
Позволить связать YAML/registry-less камеру XCME, которая не имеет DeviceInfo связи с vacuum device, без угадывания и последующего silent rebind.
Resolver
- Единственный pure resolver возвращает
{entityId, status, pinned, candidates}и используется renderer, dialog, fit, diagnostics и trail UI. - Сохранённый
marker.vacuum.sourcesticky приok,unsupported,unavailable,disabled,unverifiedиmissing; автоматическая замена запрещена. - Automatic mode рассматривает только position-capable сущности того же HA device; глобальные камеры никогда не выбираются автоматически.
- Порядок кандидатов детерминирован: capability score, camera выше прочего,
затем
entity_id; выбранный source всегда видим первым. missingдопустим только при авторитетном доказательстве. Незаполненный status pure resolver трактует какunverified.
Picker
- Основной список: automatic, same-device candidates и сохранённый source.
- «Все камеры» закрыт по умолчанию и сканирует
camera.*только при открытии. - Глобальный список — snapshot на одно открытие; HA ticks не перепарсивают его.
- Повторное открытие делает новый snapshot; новый dialog не наследует старый.
- Каждый кандидат показывает имя, entity id, integration и capabilities.
- Missing/disabled/unverified banner содержит собственную кнопку выбора.
- Выбор first-use source немедленно перестраивает devices; ожидание следующего HA tick запрещено.
Эдж-кейсы
- source удалён/переименован; registry ограничен правами; state unavailable;
- camera без position, но с rooms/path; несколько одинаково подходящих камер;
- первый edit ещё не материализовал marker; dialog закрыт во время scan;
- два экземпляра карточки не делят UI snapshot.
Приёмка
- внешняя XCME камера выбирается и сохраняется с первого клика;
- reload не меняет выбранный source;
- missing source остаётся видимым и исправимым;
- глобальный scan ленивый и не влияет на автоматический resolver;
- источник одинаков во всех vacuum consumers.