mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs: finalize opening reference review decisions
Issue: #104 User-Visible: no
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
# Issue #104 — HA-привязка проёма после удаления маркера
|
||||
|
||||
- **Issue:** https://github.com/Matysh/houseplan-card/issues/104
|
||||
- **Статус:** правки после ревью r1; `S3-spec + blocked`, ожидаются ответы
|
||||
владельца на Q1–Q3
|
||||
- **Статус:** редакция r2 после ревью r1; решения владельца зафиксированы,
|
||||
готово к повторному независимому ревью
|
||||
- **Тип / приоритет:** bug / P2
|
||||
- **Оценка:** пользовательская ценность 8/10; сложность и риск 5/10
|
||||
- **Область:** настройки проёма в Plan, состояние проёма и замка в View/киоске,
|
||||
политика доступности HA-привязок, документация и тесты
|
||||
- **Модель данных:** без изменений и миграции
|
||||
- **Связано:** #98, `docs/FILTERING.md`, `docs/USER-GUIDE.ru.md`,
|
||||
- **Связано:** #98, #117, `docs/FILTERING.md`, `docs/USER-GUIDE.ru.md`,
|
||||
`docs/ARCHITECTURE.md`, `docs/CONFIG-COMPATIBILITY.md`
|
||||
|
||||
## 1. Продуктовый контекст
|
||||
@@ -71,7 +71,7 @@ View или киоск, когда House Plan показывает фактич
|
||||
продуктового решения. Новая формулировка должна описать все три случая, даже
|
||||
если меняется только один.
|
||||
|
||||
**Предлагаемая формулировка по умолчанию, ожидает ответа владельца Q1:**
|
||||
**Принятая владельцем новая формулировка:**
|
||||
|
||||
- exact `opening.contact` и `opening.lock` живут по HA binding status и не
|
||||
выключаются tombstone самостоятельного marker;
|
||||
@@ -80,9 +80,8 @@ View или киоск, когда House Plan показывает фактич
|
||||
- HA-disabled и authoritative orphaned entity не действует ни в одном из трёх
|
||||
случаев; конфигурация при этом не стирается.
|
||||
|
||||
Если владелец распространит новый принцип на live text или `controls[]`, эти
|
||||
поверхности, их runtime и доказательства должны быть добавлены в scope и AC до
|
||||
следующего ревью; скрыто расширять реализацию запрещено.
|
||||
Новый принцип не распространяется на live text или `controls[]`: это явное
|
||||
решение scope #104, а не случайный пробел реализации.
|
||||
|
||||
## 3. Скоуп
|
||||
|
||||
@@ -104,8 +103,8 @@ View или киоск, когда House Plan показывает фактич
|
||||
- изменение `removed` tombstone, списка **Добавить** или повторного добавления;
|
||||
- ослабление фильтрации LQI, температуры, влажности, света, Glow, vacuum и
|
||||
других plan-level contributions;
|
||||
- по предлагаемому ответу Q1 — изменение tombstone-семантики live text и
|
||||
`marker.controls[]`; окончательный не-скоуп фиксируется ответом владельца;
|
||||
- изменение tombstone-семантики live text и `marker.controls[]` — решением
|
||||
владельца они сохраняют нынешнее отключение до повторного добавления binding;
|
||||
- новый picker, поиск, группировка, предупреждения или подписи в диалоге;
|
||||
- новые состояния, цвета, иконки, анимации или геометрия проёмов;
|
||||
- изменение правил lock/unlock, confirmation или разрешение действия по тапу
|
||||
@@ -138,7 +137,7 @@ Entity- или device-tombstone продолжает их выключать.
|
||||
| Активная entity, удалён `entity:*` marker | да | работает |
|
||||
| Активная entity, удалён parent `device:*` marker | да | работает |
|
||||
| Активная registry entity со state `unavailable`/`unknown` | да | сохраняется; показывается существующее неизвестное состояние |
|
||||
| Точный live YAML entity без registry row | да | picker уже принимает; render-поведение — открытое решение Q3 |
|
||||
| Точный live YAML entity без registry row | да | picker уже принимает; render-расхождение вынесено в #117 и не меняется в #104 |
|
||||
| Entity или parent device имеет `disabled_by` | нет | конфиг не стирается, runtime не действует |
|
||||
| Authoritative registry подтверждает missing entity/parent | нет | конфиг не стирается, runtime не действует |
|
||||
| Limited registry, есть точный live state | да | работает как подтверждённая active ссылка |
|
||||
@@ -161,23 +160,20 @@ frozen state. `activeRegistryHass()` сохраняет state registry-less live
|
||||
принимает, а render — нет. Это отдельное текущее расхождение, а не сохранённое
|
||||
поведение #104.
|
||||
|
||||
**Предлагаемый ответ Q3:** не расширять #104. Новая opening render-проверка
|
||||
**Решение владельца:** не расширять #104. Новая opening render-проверка
|
||||
игнорирует marker tombstone, но сохраняет требование frozen active registry row
|
||||
и state. Исправление registry-less render создаётся отдельным issue. Если
|
||||
владелец включит его в #104, render-проверка будет state-positive, а scope, AC,
|
||||
unit и changelog получат отдельную строку об этом изменении.
|
||||
и state. Исправление registry-less render вынесено в #117.
|
||||
|
||||
### 5.4. Открытые решения владельца
|
||||
### 5.4. Решения владельца
|
||||
|
||||
Единый комментарий с вопросами и defaults:
|
||||
https://github.com/Matysh/houseplan-card/issues/104#issuecomment-5278365217
|
||||
Владелец принял все defaults 13.08.2026; каноническая запись:
|
||||
https://github.com/Matysh/houseplan-card/issues/104#issuecomment-5278421151
|
||||
|
||||
- **Q1:** opening-only или также live text / `controls[]`;
|
||||
- **Q2:** требуется ли правка lock invariant CR-1 в `docs/SCOPE.md`;
|
||||
- **Q3:** включать ли registry-less render в #104.
|
||||
|
||||
До ответов таблица и формулировки выше являются предложением автора, а не
|
||||
принятым продуктовым решением.
|
||||
- **Q1:** новый принцип действует только для openings; live text и
|
||||
`controls[]` не меняются;
|
||||
- **Q2:** CR-1 в `docs/SCOPE.md` не меняется, потому что поверхность актуации
|
||||
остаётся той же;
|
||||
- **Q3:** registry-less render исключён из #104 и отслеживается в #117.
|
||||
|
||||
## 6. Контракт поведения
|
||||
|
||||
@@ -237,8 +233,8 @@ controls, Glow или других plan-level contributions. Исключени
|
||||
`resolveHaBindingStatus()` и не принимает marker tombstones.
|
||||
2. В full card разделить:
|
||||
- live availability для picker и service action;
|
||||
- render availability для frozen active projection; требование registry row
|
||||
зависит от ответа Q3, по умолчанию сохраняется.
|
||||
- render availability для frozen active projection с сохранением требования
|
||||
active registry row + state; registry-less расхождение относится к #117.
|
||||
3. Перевести на новую политику только:
|
||||
- `_contactCandidates()`;
|
||||
- `_lockCandidates()`;
|
||||
@@ -313,9 +309,9 @@ labels, сортировка, keyboard/native select semantics, dialog focus и
|
||||
`unknown` остаётся выбранной и показывает существующий unknown state без
|
||||
ложного движения и service call.
|
||||
- **AC9 (`unit` + `smoke`):** limited-registry entity с точным live state
|
||||
доступна; `unverified` и cached-disabled — недоступны. Picker продолжает
|
||||
принимать live YAML entity; её render-поведение фиксируется ответом Q3 и
|
||||
получает отдельное unit-доказательство, если войдёт в scope.
|
||||
доступна; `unverified` и cached-disabled — недоступны. Существующий picker
|
||||
продолжает принимать live YAML entity, а её render-расхождение в #104 не
|
||||
меняется и отслеживается в #117.
|
||||
- **AC10 (`unit` + source-contract + `smoke` + ревью кода):** lock/unlock
|
||||
возможен только из карточки проёма; availability guard стоит до
|
||||
confirmation/service, `callService('lock', …)` не появляется на другой
|
||||
@@ -339,11 +335,11 @@ Pure matrix должна покрыть:
|
||||
1. active exact entity при отсутствии tombstone-контекста;
|
||||
2. entity-disabled, parent-disabled, entity-missing и parent-missing;
|
||||
3. `unavailable`/`unknown` как active binding с неизвестным state;
|
||||
4. registry-less live YAML entity;
|
||||
4. registry-less live YAML entity остаётся active в exact binding resolver
|
||||
picker; render requirement не меняется и отслеживается в #117;
|
||||
5. limited live, limited unverified и cached disabled;
|
||||
6. render projection: exact frozen registry row + state принимаются без
|
||||
требования marker; при ответе Q3 «включить» отдельный fixture доказывает
|
||||
state-only registry-less путь;
|
||||
требования marker, но state-only registry-less путь не расширяется;
|
||||
7. regression: `isRemovedPlanEntity()` по-прежнему подавляет entity- и
|
||||
device-tombstone у обычных plan consumers;
|
||||
8. pure config fixture: marker delete/re-add не меняет opening fields и не
|
||||
@@ -402,10 +398,9 @@ markers в render hot path.
|
||||
- `docs/STATUS.md` — уточнить shipped-контракт true plan deletion после
|
||||
фактической реализации.
|
||||
|
||||
`docs/SCOPE.md` и lock invariant CR-1 проверены обязательно. По предлагаемому
|
||||
ответу Q2 текст не меняется: санкционированная поверхность остаётся той же
|
||||
единственной кнопкой карточки проёма, меняется лишь availability exact lock.
|
||||
Если владелец потребует правку, она входит в тот же user-visible commit.
|
||||
`docs/SCOPE.md` и lock invariant CR-1 проверены обязательно. Решением владельца
|
||||
текст не меняется: санкционированная поверхность остаётся той же единственной
|
||||
кнопкой карточки проёма, меняется лишь availability exact lock.
|
||||
|
||||
Скриншоты и новые golden baselines не требуются. Отдельного security-артефакта
|
||||
нет; lock safety доказывается targeted smoke и независимым code review. Issue
|
||||
@@ -450,5 +445,5 @@ markers в render hot path.
|
||||
state не изображается как известное состояние.
|
||||
3. Новый узкий smoke предпочтительнее расширения геометрических opening smoke;
|
||||
имя файла может измениться при сохранении того же покрытия.
|
||||
4. Q1–Q3 из §5.4 — блокирующие продуктовые решения, а не предположения; этот
|
||||
раздел к ним не применяется.
|
||||
4. Решения Q1–Q3 зафиксированы владельцем в §5.4 и не относятся к изменяемым
|
||||
предположениям этого раздела.
|
||||
|
||||
Reference in New Issue
Block a user