From e04cf7e573ac5717b31231b40936c2eeb70f34a2 Mon Sep 17 00:00:00 2001 From: Matysh Date: Fri, 28 Aug 2026 01:01:08 +0300 Subject: [PATCH] docs: preserve hidden device ghost mode Issue: #29 User-Visible: no --- docs/specs/029-device-inbox-lifecycle.md | 47 ++++++++++++++++++------ 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/specs/029-device-inbox-lifecycle.md b/docs/specs/029-device-inbox-lifecycle.md index 6c7d82a4..6f399f79 100644 --- a/docs/specs/029-device-inbox-lifecycle.md +++ b/docs/specs/029-device-inbox-lifecycle.md @@ -217,9 +217,14 @@ Raw binding и диагностические детали допускаютс - Кнопки **«Добавить»** и **«Скрытые и деактивированные»** заменяются одной кнопкой **«Устройства»** с иконкой списка/устройств. - **«Правила иконок»** остаётся отдельной кнопкой. -- Скрытые markers больше не рисуются поверх плана постоянным локальным режимом: - доступ к ним даёт каталог. Это устраняет состояние панели, неочевидное после - возврата в редактор. +- Существующий локальный режим показа скрытых и HA-disabled markers призраками + на плане сохраняется, включая их реальную позицию, выбор, настройку и + перетаскивание. Его переключатель переносится с основной панели внутрь + каталога; это не persisted-настройка и не меняет `marker.hidden`. +- После закрытия каталога выбранный локальный режим действует до выхода из + редактора устройств, как сегодня. При повторном входе в редактор он выключен; + кнопка **«Устройства»** показывает активное состояние, чтобы режим не был + скрыт от пользователя. ### 10.2 Диалог @@ -235,7 +240,10 @@ Raw binding и диагностические детали допускаютс - **Скрытые**; - **Доступны снова**; 4. дополнительный фильтр **«Новые»** для «На плане»; -5. **«Показывать сущности»** для «Доступны». +5. **«Показывать сущности»** для «Доступны»; +6. локальный switch **«Показывать скрытые на плане»**. Он доступен во всех + вкладках, включает существующий ghost-render скрытых и HA-disabled markers и + ничего не сохраняет в config/layout сам по себе. Строка содержит: @@ -262,9 +270,9 @@ snapshot, затем применяется progressive rendering. Первые | Категория/статус | Primary | Дополнительные действия | |---|---|---| | На плане, реально отображается | **Найти на плане** | Настроить, Скрыть | -| На плане, временно не отображается из-за HA status | **Настроить** | Открыть в HA, Удалить через существующий dialog | -| Скрытые, active | **Показать** | Настроить | -| Скрытые, HA-disabled | **Настроить** | Открыть в HA; «Показать» disabled с объяснением | +| На плане, временно не отображается из-за HA status | **Настроить** | Найти призрак при включённом ghost-режиме; Открыть в HA; Удалить через существующий dialog | +| Скрытые, active | **Показать** | Найти призрак при включённом ghost-режиме; Настроить | +| Скрытые, HA-disabled | **Настроить** | Найти призрак при включённом ghost-режиме; Открыть в HA; «Показать» disabled с объяснением | | Доступны | **Добавить** | Скрыть из списка | | Доступны снова | **Добавить заново** | — | @@ -280,7 +288,10 @@ Hide/Show — обратимые одиночные действия без по Find: -- доступен только если marker реально отрисовывается; +- доступен для обычного marker, если тот реально отрисовывается, и для + hidden/HA-disabled marker, если включён локальный ghost-режим; в противном + случае действие disabled и объясняет, что сначала надо включить + **«Показывать скрытые на плане»**; - переключает пространство при необходимости; - закрывает каталог; - перемещает viewport так, чтобы marker оказался внутри безопасной центральной @@ -373,6 +384,11 @@ new ids и UI entity filter. - всех reason/status из §9; - unavailable action hints, refresh/conflict toast и accessibility labels. +Существующий `marker.hide_tip` в обоих языках обновляется: вместо удаляемой +кнопки **«Скрытые и деактивированные»** он направляет в каталог +**«Устройства»**. Перед реализацией выполняется поиск остальных ссылок на старые +названия кнопок; пользовательские строки не должны вести к отсутствующему UI. + Имена integration/model/binding не переводятся. Формулировки интерфейса синхронизируются с RU/EN user guide. @@ -382,7 +398,8 @@ new ids и UI entity filter. В Device editor вместо двух кнопок Add/Show hidden отображается одна кнопка «Устройства»; она открывает каталог с четырьмя категориями, поиском и -счётчиками. «Правила иконок» остаётся доступной. +счётчиками. Локальный ghost-toggle доступен внутри каталога, а его активность +видна на кнопке «Устройства». «Правила иконок» остаётся доступной. ### AC2 — детерминированная классификация (unit) @@ -401,7 +418,8 @@ device-parent tombstone + live entity child, synthetic light group и candidate ### AC4 — lifecycle и HA status независимы (unit) `hidden:true + ha_disabled` остаётся в «Скрытые» с двумя объяснениями; -`hidden:false + ha_disabled` остаётся в «На плане», но Show/Find недоступны. +`hidden:false + ha_disabled` остаётся в «На плане»: Show недоступен, а Find +доступен только для призрака при включённом ghost-режиме. Limited registry не создаёт ложный disabled/orphaned/readd. ### AC5 — exact binding и повторное добавление (unit + smoke) @@ -416,6 +434,11 @@ Find, Edit, Hide, Show, Add, Hide from list и Re-add дают результа Cancel из Add/Re-add не меняет данные; Delete остаётся подтверждаемым действием существующего dialog. +Переключатель ghost-режима внутри каталога воспроизводит текущий локальный показ +hidden и HA-disabled markers: после закрытия каталога их можно найти, выбрать, +настроить и перетащить без изменения `marker.hidden`; выход из редактора +сбрасывает режим. + ### AC7 — read-only открытие (unit + smoke) Snapshot config, layout и обе revisions до/после открытия, поиска, tab switch, @@ -456,7 +479,8 @@ LQI/climate или opening references. - `demo/smoke_device_inbox.mjs` — реальный dialog, read-only assertions, row actions, return state, late registry refresh; - адаптация `demo/smoke_binding_picker.mjs` и `demo/smoke_hidden_flag.mjs` без - потери существующих проверок; + потери существующих проверок: `smoke_hidden_flag` включает ghost-режим через + каталог и по-прежнему проверяет позицию, клик/настройку и drag скрытого marker; - golden: desktop RU/EN, light/dark; narrow RU с длинными причинами; - `node scripts/smoke-select.mjs --base origin/dev --head HEAD` определяет дополнительный набор перед код-ревью. @@ -498,6 +522,7 @@ npm run golden:verify | Историческая причина скрытия выдумывается | Generic `automatic_hidden` fallback | | Большой registry блокирует dialog | O(N) snapshot + progressive rendering | | Возврат из nested flow теряет контекст | Локальный `returnToInbox` snapshot; AC8 | +| Перенос ghost-toggle делает активный режим незаметным после закрытия каталога | Активное состояние кнопки «Устройства» и сброс при выходе из редактора; AC6 | | #29 поглощает redesign фильтров | #44 явно вне скоупа | ## 19. Откат