fix: preserve area relocation state

Issue: #403
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-01 14:53:37 +00:00
committed by claude[bot]
parent 6b5158003a
commit 71bbc95309
28 changed files with 550 additions and 190 deletions
+5 -1
View File
@@ -110,7 +110,11 @@ the same profiler available between stable promotions.
`device-area-relocation` resolver. Its pending ids override stale layout in
both interactive and hosted-static projections immediately; a writer then
deletes those layout entries before advancing bounded Area provenance in
config. Limited registry snapshots are read-only and never infer movement.
config. If that config write is rejected, every successfully deleted manual
point is restored through the layout store before a retry; a failed restore
falls back to the existing attention marker. Relocation invalidates only
Undo/Redo commands owned by the moved device. Limited registry snapshots
are read-only and never infer movement.
5. **One modal contract.** Card modals render through `hp-dialog`. In Home
Assistant it delegates surface semantics and trapping to `ha-dialog`; the
standalone demo falls back to native `<dialog>`. The wrapper owns the title,
+7
View File
@@ -2,6 +2,13 @@
## Unreleased
- A failed config write while following a device to another Home Assistant
Area no longer silently discards its manually placed position: House Plan
restores the point before retrying, or marks the marker for attention if the
restore also fails. The move now removes Undo/Redo entries only for that
marker instead of clearing position history for every device
([#403](https://github.com/Matysh/houseplan-card/issues/403)).
- Confirmations now work before the first space exists: deleting a stored plan
during onboarding asks, and answers, instead of doing nothing
([#402](https://github.com/Matysh/houseplan-card/issues/402)).
+7
View File
@@ -8,6 +8,13 @@
## Не выпущено
- Отказ записи конфига при переносе устройства в другую HA-зону больше не
стирает молча поставленную вручную позицию: House Plan восстанавливает точку
перед повтором, а если не удалось и это — отмечает маркер для внимания.
Перенос теперь удаляет Undo/Redo только этого маркера, а не очищает историю
позиций всех устройств
([#403](https://github.com/Matysh/houseplan-card/issues/403)).
- Подтверждения работают и до создания первого пространства: удаление
сохранённого плана в онбординге теперь спрашивает и отвечает, а не молчит
([#402](https://github.com/Matysh/houseplan-card/issues/402)).
+8 -5
View File
@@ -3,7 +3,7 @@
- Issue: https://github.com/Matysh/houseplan-card/issues/403
- Приоритет: P1, bug; полный трек — класс A, две находки на одной поверхности
(свежий код #126)
- Ревизия: 2 (2026-09-01; H1/L1 из SPEC-REVIEW-403-r1)
- Ревизия: 3 (2026-09-01; техническое уточнение AC7 при реализации)
## Сценарий
@@ -171,10 +171,13 @@ best-effort контракт на touch из `docs/TOUCH-SUPPORT.md` и разд
Доказательство: смок.
- **AC6**. Записи переехавшего устройства из истории удалены — Undo не вернёт
его в комнату, которой у него больше нет. Доказательство: тот же смок.
- **AC7**. Существующее поведение #126 не сломано: ручная перестановка после
переезда переживает три rebuild-тика, delete-first echo не воскрешает точку.
Доказательство: `demo/smoke_area_relocation.mjs` остаётся зелёным без
правок его утверждений.
- **AC7**. Существующее успешное поведение #126 не сломано: ручная перестановка
после переезда переживает три rebuild-тика, delete-first echo не воскрешает
точку. Доказательство: `demo/smoke_area_relocation.mjs` остаётся зелёным;
единственное прежнее утверждение `failedConfigRetryable`, которое прямо
требовало состояние исходного бага (`layout` уже удалён после отказа
`config/set`), заменяется witness нового AC1 — позиция восстановлена, а
повтор остаётся возможен. Остальные утверждения смока не меняются.
## План автотестов