34 KiB
Спецификации задач
Актуально на 2026-09-04.
GitHub Issues и GitHub Projects (v2) остаются единственным каноническим backlog проекта. Этот каталог содержит развёрнутые ТЗ: каждое ТЗ ссылается на issue, а issue — на соответствующий файл. Статус, приоритет и факт завершения меняются только в GitHub.
Статусы ТЗ:
- готово к реализации — продуктовые решения зафиксированы, остаётся техническая работа;
- черновик решения — в ТЗ дана рекомендация, но перед реализацией требуется принять отмеченные продуктовые решения;
- в реализации — работа уже ведётся в рамках текущего этапа;
- реализовано — ТЗ сохранено как проверяемый acceptance contract.
Обязательные release-артефакты номерного ТЗ
Если задача меняет пользовательское поведение, её ТЗ обязано явно перечислить:
- записи в
docs/CHANGELOG.mdиdocs/CHANGELOG.ru.md; - затронутую пользовательскую документацию;
- требуемые screenshots/golden и способ их review, если меняется визуал;
- release/performance/security artifacts, если они входят в acceptance gate.
Отсутствие этого раздела не означает, что документация необязательна. Для чистого refactoring ТЗ должно прямо зафиксировать отсутствие пользовательских изменений и перечислить технические доказательства безопасного поведения.
P1
| Issue | ТЗ |
|---|---|
| #6 Vacuum XCME path segments | 006-vacuum-xcme-path.md |
| #7 Valetudo room outlines | 007-vacuum-valetudo-room-outlines.md |
| #8 Vacuum support docs and XCME hint | 008-vacuum-support-docs-xcme-hint.md |
| #27 External vacuum source picker | 027-vacuum-external-source-picker.md |
| #28 Room View card | 028-room-view-card.md |
| #29 Device inbox lifecycle | 029-device-inbox-lifecycle.md |
| #30 Dialog information architecture | 030-dialog-information-architecture.md |
| #31 View accessibility | 031-view-accessibility.md |
| #32 Unified danger confirmation | 032-unified-danger-confirmation.md |
| #33 Config schema lifecycle | 033-config-schema-lifecycle.md |
| #34 Frontend decomposition | 034-frontend-decomposition.md |
| #35 Current UX documentation | 035-current-ux-docs.md |
| #50 Экспорт и импорт конфигурации | 050-config-export-import.md |
| #58 Vacuum integration coverage — Stage 1 | 058-vacuum-stage1.md |
| #89 Опциональный объёмный 2.5D/изометрический вид | 089-isometric-view.md |
| #89 Этап 1: объёмный вид за флагом Labs | 089-isometric-view-stage1.md |
| #98 Единая система пульсаций и активностей устройства | 098-device-pulse-system.md |
| #126 HA Area переносит marker в новую комнату | 126-ha-area-marker-relocation.md |
| #131 Полный первый кадр View у read-only-пользователя | 131-readonly-cold-start.md |
| #138 Автозамыкание комнаты по существующей стене | 138-adjacent-room-autoclose.md |
| #146 Четырёхфазный фон «Следует за Солнцем» | 146-four-phase-sun-background.md |
| #156 Регрессии Full Performance перед v1.64.0 stable | 156-full-performance-regressions.md |
| #162 Многоэтажный робот: карты отдельно от пространства базы | 162-vacuum-map-space-routing.md |
| #164 Активный цикл стиральной машины должен быть жёлтым | 164-washer-active-cycle.md |
| #166 Солнечные лучи зеркально учитывают направление севера | 166-sun-north-rotation.md |
| #167 Экспорт «только планировка» | 167-plan-only-export.md |
| #170 HA-устройство не привязывается к комнате без HA-зоны | 170-room-without-area.md |
| #179 Новый визуальный язык маркеров устройств | 179-device-icons-redesign.md |
| #199 Geometry preflight перед записью Optimize | 199-optimize-geometry-preflight.md |
| #210 Фиксированное пространство экземпляра карточки | 210-fixed-floor-card.md |
| #211 Визуальное соответствие маркеров дизайн-пакету #179 | 211-device-icons-visual-parity.md |
| #217 Внешняя рамка Text-маркера должна быть капсулой | 217-text-shell-outline.md |
| #218 Floating-point шум комнаты не гасит Glow пространства | 218-glow-floor-geometry.md |
| #219 Единая палитра замков и glyph на оранжевых подложках | 219-lock-orange-palette.md |
| #205 Продолжение следа после короткой остановки пылесоса | 205-vacuum-trail-resume-grace.md |
| #220 Порядок пространств перетаскиванием вкладок | 220-space-tab-reorder.md |
| #229 Сращивание коллинеарных отрезков стен | 229-merge-collinear-partitions.md |
| #226 Entity-marker не дублируется родительским HA-устройством | 226-entity-parent-dedup.md |
| #223 Optimize канонизирует координаты без floating-point шума | 223-optimize-coordinate-canonicalization.md |
| #224 Канонические координаты на каждой записи | 224-config-coordinate-canonicalization.md |
| #228 Надёжное рисование стен и операции с готовым контуром | 228-plan-drawing-problems.md |
| #239 Масштаб сетки не меняет внешний вид плана; default 1 см/1 дюйм | 239-grid-scale-invariance.md |
| #231 Декоративный слой виден поверх заливок комнат | 231-decor-layer-order.md |
| #243 Рабочее перетаскивание вкладок и точный указатель вставки | 243-space-tab-drop-target.md |
| #276 Совпадающая partition становится одной общей стеной | 276-coincident-partition-reconciliation.md |
| #277 Безопасный Resize без изменения топологии | 277-safe-resize.md |
| #278 Локальный сбой extra-body union не гасит всю кладку | 278-wall-union-isolation.md |
| #279 Сплошной почти ортогональный T-стык | 279-near-orthogonal-junction.md |
| #280 Backend принимает доказанный Optimize rehost | 280-optimize-rehost-validation.md |
| #281 Честный Resize после outer-partition reconciliation | 281-resize-zero-range.md |
| #293 Активная рукоятка Resize выполняет pointer-жест | 293-resize-pointer-noop.md |
| #296 Optimize удаляет доказанно избыточные скрытые стены | 296-optimize-hidden-obstacles.md |
| #298 Resize сохраняет wall records на решётке и на carrier | 298-resize-wall-thickness-carrier.md |
| #299 Записи толщины не пересекают границу роли стены | 299-mixed-role-wall-records.md |
| #314 Атомарная запись v8 drafts и независимой геометрии | 314-v8-draft-write-regression.md |
| #306 Нулевые стены вместо виртуальных границ | 306-zero-thickness-walls.md |
| #348 Полная немецкая локализация | 348-german-localization.md |
| #428 Round-trip экспорта с отсутствующей картинкой декора | 428-missing-decor-asset-roundtrip.md |
P2
| Issue | ТЗ |
|---|---|
| #10 Roomba live position | 010-vacuum-roomba-live-position.md |
| #442 Атомарный откат отклонённых записей маркера | 442-marker-write-rollback.md |
| #11 Vacuum source health | 011-vacuum-source-health.md |
| #12 Room cleaning highlight | 012-vacuum-room-cleaning-highlight.md |
| #13 Golden open context tray | 013-golden-open-context-tray.md |
| #19 Additive Glow blending | 019-glow-additive-blending.md |
| #20 Glow through open doors | 020-glow-open-door-spill.md |
| #21 Safe color CSS variables | 021-color-css-injection.md |
| #36 Room Glow override | 036-room-glow-override.md |
| #37 Room scale system | 037-room-scale-system.md |
| #38 Icon rule builder | 038-icon-rule-builder.md |
| #39 Large backdrops | 039-large-backdrops.md |
| #40 Floors/Areas onboarding | 040-floor-area-onboarding.md |
| #41 Keyboard object editing | 041-keyboard-object-editing.md |
| #42 Backend engineering quality | 042-backend-engineering-quality.md |
| #43 Help/feedback and private support package | 043-private-support-report.md |
| #44 Filtering/grouping policy | 044-filter-grouping-policy.md |
| #51 Custom decor images | 051-custom-decor-images.md |
| #52 Dimensions in View | 052-view-dimensions.md |
| #54 Zigbee topology overlay | 054-zigbee-topology-overlay.md |
| #55 Independent Glow overlay | 055-independent-glow-overlay.md |
| #56 Static room color | 056-static-room-color.md |
| #68 Подсказки к настройкам | 068-help-affordance.md |
| #74 Position-only Undo/Redo устройств | 074-device-position-undo.md |
| #75 + #76 Единый поток размещения проёмов | 075-076-opening-placement-flow.md |
| #82 Плавное масштабирование zoom/fit/reset | 082-smooth-zoom.md |
| #84 Источник «Всегда» без сущности HA + #88 ведущая сущность | 084-passive-forced-light-sources.md |
| #86 Подсказки к настройкам, партия 1 | 086-settings-help-content-party1.md |
| #90 Управляемый бейдж со значением | 090-device-value-badge.md |
| #378 Выбираемый источник для режима «Значение + состояние» | 378-value-face-source.md |
| #381 Действие по нажатию «Ничего не делать» | 381-no-op-tap-action.md |
| #383 Плавные трансформации и зеркалирование мебели | 383-furniture-transform.md |
| #94 Универсальное действие «Переключить состояние» | 094-universal-state-toggle.md |
| #101 Плавный переход View ↔ редакторы | 101-view-editor-transition.md |
| #107 Переключение виртуального источника света «Всегда» | 107-virtual-light-toggle.md |
| #113 Optional-контракт SpaceModel | 113-optional-space-model.md |
| #117 Registry-less entity у проёма | 117-registryless-opening-entity.md |
| #122 Изометрический режим Stage 2: скрытый режим и визуальная полировка | 122-isometric-stage2.md |
| #123 Split из вершины не меняет наружную геометрию стен | 123-corner-split-wall.md |
| #132 Проёмы в независимых стенах (+ bug #185) | 132-partition-openings.md |
| #137 Узлы и линии привязки в редакторе Плана | 137-plan-snap-overlay.md |
| #141 Бесшовные стыки перегородок и открытых контуров | 141-wall-junctions.md |
| #159 Новый набор мебели и двухуровневая библиотека | 159-furniture-pack.md |
| #361 Физическая толщина линий мебели при camera zoom | 361-furniture-stroke-zoom.md |
| #157 Тип проёма «Открытый проём» | 157-open-passage.md |
| #150 Точная геометрия коллинеарного перепада толщины | 150-wall-thickness-transition.md |
| #152 Click/tap по комнате вписывает её в View | 152-room-click-fit.md |
| #172 Нулевой Split-разделитель не получает ложную толщину | 172-zero-divider-taper.md |
| #173 Единый инструмент рисования стен и предложение комнаты по замыканию | 173-unified-wall-tool.md |
| #174 Связанный виртуальный источник следует реальному контроллеру | 174-linked-virtual-light-controller.md |
| #178 Выбор сущности для действия «Переключить состояние» | 178-toggle-entity.md |
| #197 Один junction-патч не гасит кладку всего плана | 197-junction-patch-fail-dark.md |
| #204 Честные defaults границ и имён при создании пространства | 204-space-create-display-defaults.md |
| #201 Наследование толщины для атомарного участка стены | 201-atomic-thickness-lookup.md |
| #203 Выключение названий скрывает все подписи комнат | 203-hide-room-names.md |
| #186 Безопасный остаток стены у торцов партиционного проёма | 186-partition-opening-jamb-margin.md |
| #234 Толщина отрезка цепочки не расходится между превью и записью | 234-chain-segment-thickness.md |
| #233 Ресайз показывает внутренние размеры, а не осевые | 233-resize-inner-dimensions.md |
| #300 Понятные подписи и измеряемые стены во время Resize | 300-resize-measurement-layout.md |
| #238 Размеры проёма до внутренних физических границ | 238-opening-inner-distances.md |
| #242 Символ проёма по центру толщины стены | 242-opening-symbol-center.md |
| #244 Восстановление маркеров с мёртвой ссылкой на пространство | 244-orphan-space-references.md |
| #248 Идемпотентный Optimize после записи и reload | 248-optimize-idempotence.md |
| #251 Доступность контроллера не наследуется от управляемой цели | 251-controller-target-availability.md |
| #252 Понятная и безопасная очистка забытых позиций в Optimize | 252-optimize-orphan-layout-report.md |
| #253 Resize не теряет интервалы толщины стен | 253-resize-wall-thickness.md |
| #258 Канонический wall key после Optimize и storage round-trip | 258-wall-key-storage-roundtrip.md |
| #262 Повторное добавление entity после удаления родительского устройства | 262-readd-child-entity-after-device-delete.md |
| #265 Единый контракт ссылочного шва импорта | 265-import-reference-seam.md |
| #267 Таблица решений для «лица» маркера | 267-device-presentation-decision-table.md |
| #274 Беспроводной контроллер одинаково выглядит на плане и в preview | 274-wireless-controller-presentation-parity.md |
| #317 Климат комнаты следует размещению датчика в House Plan | 317-room-climate-placement.md |
#318 Активный контроллер без собственных сущностей следует controls |
318-empty-controller-roster.md |
| #373 Плотное кадрирование static card по геометрии дома | 373-space-card-house-fit.md |
| #294 Esc завершает текущую цепочку стен без удаления геометрии | 294-wall-esc-detach.md |
| #419 Безопасная уборка Area-снапшота при пустом или усечённом HA-реестре | 419-area-snapshot-roster-guard.md |
| #421 Отрицательные доказательства для трёх защитных проверок | 421-negative-test-proofs.md |
| #426 Отключение информационного окна комнаты при наведении | 426-room-hover-tooltip-toggle.md |
| #431 Канонизация координат пользовательских изображений | 431-image-coordinate-canonicalization.md |
| #432 Ограниченный resolve и единая проверка целостности изображений | 432-asset-resolve-authorization-cache.md |
| #454 Счёт заходов и циклов ревью по артефактам | 454-review-round-counter.md |
| #440 Полиш аудита v1.71.0-beta.2 | 440-v171-beta2-polish.md |
| #445 Магнит мебели к физической поверхности стены | 445-furniture-wall-face-snap.md |
| #447 Наружная грань для мебели и сдвиг декора стрелками | 447-exterior-furniture-snap-keyboard-nudge.md |
#448 Единый бессрочный переключатель hp_alpha |
448-alpha-switch.md |
| #449 Двойной клик/тап по свободному фону вписывает весь план | 449-double-fit-all.md |
| #451 Фильтрация render и лёгкий live-слой взаимодействий | 451-render-performance.md |
| #456 Копирование пространства без комнат и устройств | 456-copy-space.md |
| #457 Направление Zigbee-связей к координатору | 457-zigbee-route-arrows.md |
| #460 Детерминированное завершение кадра живого редактора | 460-live-editor-settlement.md |
P3
| Issue | ТЗ |
|---|---|
| #209 Плавный след пылесоса | 209-vacuum-trail-smoothing.md |
| #198 Optimize очищает изолированный микро-интервал толщины | 198-optimize-micro-interval.md |
| #103 Состояния в Toggle confirmation | 103-toggle-confirmation-state.md |
| #200 Одинаковая геометрия подписи комнаты в View и Plan editor | 200-room-label-parity.md |
| #340 Обязательная ревизия повторной записи config/set | 340-config-set-revision.md |
| #372 Компактное верхнее кадрирование static card без заголовка | 372-space-card-empty-title.md |
| #423 Полиш support pipeline и защитных инструментов v1.70.0 | 423-v170-polish.md |
| #434 Полиш аудита v1.71.0-beta.1 | 434-v171-polish-audit.md |
| #443 Полиш маршрутов карт робота | 443-vacuum-route-polish.md |
P3
| Issue | ТЗ |
|---|---|
| #57 Единый выбор цвета и прозрачности | 057-color-opacity-picker.md |
| #180 Единый picker во всех местах выбора цвета | 180-all-color-call-sites.md |
P3
| Issue | ТЗ |
|---|---|
| #62 Масштабируемая i18n-инфраструктура | 062-i18n-registry.md |
Правило актуализации
При изменении продуктового решения сначала обновляется соответствующее issue, затем ТЗ. Реализация не считается завершённой только по наличию кода: нужны выполненные acceptance criteria, предусмотренная ТЗ проверка и актуальный статус Project v2.