fix(dialog): restore HA modal after rejected close (#607)

Issue: #607
User-Visible: yes
This commit is contained in:
Claude
2026-09-23 02:00:48 +03:00
parent d70b67abc4
commit 9bbf6fb248
52 changed files with 895 additions and 631 deletions
+5
View File
@@ -2,6 +2,11 @@
## Unreleased
- Fixed the close button in Home Assistant's real settings dialogs: choosing
**Continue** after the unsaved-changes prompt now restores the same editable
modal instead of leaving an invisible dialog that required a page reload
([#607](https://github.com/Matysh/houseplan-card/issues/607)).
## v1.77.0 — 2026-09-21
- Refreshed the furniture library with 60 consistently styled symbols, new
+5
View File
@@ -8,6 +8,11 @@
## Не выпущено
- Исправлен крестик реальных диалогов Home Assistant: после выбора
**«Продолжить»** в вопросе о несохранённых изменениях тот же диалог снова
виден и доступен для редактирования, а не остаётся невидимым до перезагрузки
страницы ([#607](https://github.com/Matysh/houseplan-card/issues/607)).
## v1.77.0 — 2026-09-21
- Обновлена библиотека мебели: 60 символов в едином стиле, новые предметы и
+5 -2
View File
@@ -17,12 +17,12 @@ change must pass through a published beta/RC before stable. Stable release
commits are promotion-only (versions, generated bundles and release/changelog
metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
## Snapshot (2026-09-21)
## Snapshot (2026-09-23)
| Item | State |
|---|---|
| Version | **v1.77.0** everywhere (manifest, const.py, package.json, package-lock in both places, CARD_VERSION in the card and the editor runtime) |
| Current local cycle | **Stable v1.77.0 candidate** — promotion of the published beta line from v1.76.0. The line delivers a 60-symbol furniture library and dimension parity (#593, #584), redesigned settings dialogs (#594, #598, #600), and a value plus static icon mode (#588). Beta-only polish (#602, #603, #605, #606) is included without presenting it as a new stable feature. Internal CI mutation-gate shards are bounded and evidence-checked (#604). The exact SHA still requires Validate, Full Performance and stable release gates before publication. |
| Current local cycle | **Post-v1.77 development** — stable v1.77.0 is the baseline. The next beta starts by repairing the authentic Home Assistant dialog lifecycle: after rejecting a close request, all four settings forms reopen the same modal and preserve their draft (#607). |
| Hidden Alpha Stage | #89 Stage 1 ships in v1.63.0-beta.1, #122 Stage 2 in v1.64.0 and #160 Stage 3 in v1.73.0-beta.1; #570 adds the Stage 4 designer handoff and #583 refines it on `dev`: only the building ambient shadow remains, door/gate volumes pivot on the selected host face without strokes, and devices/lock badges receive deterministic mutual collision correction while room labels remain passive below them. The same hidden `iso` view uses a fixed 0°/20° camera and scale-aware wall height 84, low screen-facing device/room/lock overlays without tethers or ground dots, neutral full-height window frames with blue glass, and bounded theme materials. Since #448 the experiment is enabled only through the single indefinite browser-local `hp_alpha` gate; it is not expiring and has no per-stage key. Flat remains default; editors, `houseplan-space-card`, floor effects, stored coordinates and HA actions remain unchanged. Stage 4 stays internal and is absent from public changelog/user documentation. |
| Workflow | Superseded 2026-08-12: the pre-1.62 rule of "local edits without tests or commits" is **dead** — since release 1.62 every product change follows `PROCESS.md` (issue in `S5-ready`+, branch `issue/<NN>-slug`, trailers on every commit, review pipeline; `AGENTS.md` is the summary). Release mechanics below remain current. A requested pre-release gets a production build plus the smallest targeted unit/smoke set covering the changed surfaces, one tested `dev` commit/tag and a GitHub Release with `prerelease=true`; `main` stays untouched. The complete local frontend/backend/smoke gate runs only before a stable release, after which `main` is fast-forwarded to the exact tested `dev` SHA and the stable release is produced by `release.yml` (`workflow_dispatch` on `main` with the tag) — the only publisher of installable assets since #540: gates on the exact SHA (Validate, Full Performance, E2E on the candidate commit), one build, `houseplan.zip` archived from the committed tree, `SHA256SUMS`, draft → publish → read-back verification; a release published by hand in the GitHub form is turned back into a draft and walked through the same path, and a re-dispatch on a public tag is a repair that adds only missing assets. Release bodies are short and bilingual (Russian first); every bullet links its GitHub issue (#NN) so the #328 rules stay machine-checkable. A STABLE body aggregates the changelog since the PREVIOUS STABLE release (never since the last beta): features/fixes described across the line's beta changelogs must appear, while bugs that were introduced and fixed strictly inside the beta line (never shipped in any stable) are excluded — draft with `npm run release:notes -- <tag>`, curate by hand, then `npm run release:notes -- <tag> --verify` must pass. `Мелкие исправления и улучшения` / `Small fixes and improvements` is allowed only when the range really contains user-visible work not itemised in the body; a single-issue hotfix ships without it (the verifier enforces this). Every body ends with separate links to the Russian and English changelogs. Open or partially delivered issues are never presented as shipped. Telegram announcements are sent only for stable releases; beta and RC publication is silent. `docs/RELEASE-NOTES.md` is the current canonical body instance; `npm run release:prerelease -- <tag> --issues=… --yes` is the primary local publication path and the manual `Publish prerelease` workflow is its GitHub-only equivalent once present on `main`. Nothing is copied to the home instance by hand |
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records; their labels carry priority and workflow status (`PROCESS.md` §9). GitHub Projects is no longer used. `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
@@ -133,6 +133,9 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
- **Dialog UX**: binding radios + entities checkbox + search dropdown
(v1.38.0); tap actions simplified to Device card / more-info / Toggle,
right-click → more-info (v1.38.1); Esc closes every dialog (v1.30.4).
Since #607, rejecting the real HA close button after an unsaved-changes
prompt explicitly reconciles the nested modal before reopening it; the same
Device, Room, Space or General-settings draft remains interactive.
- **Room settings, tier 3** (v1.42.0): per-room fill/temp-source/label sizes;
the settings button sits at the room's VISUAL centre (inscribed circle +
centroid pull), icon-derived size, zooms with the plan (v1.51.0).
+12 -12
View File
@@ -3,7 +3,7 @@
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"oxipng": "oxipng 10.2.0",
"sourceFingerprint": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceFingerprint": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"captureScriptSha256": "e2d14d89de793011615662af7c83c433768d4761f6cec7f0b3860c797494299e",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -15,7 +15,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "5d1e816c2fde72316809991e9651e242d3cbcd897fb9db0554dc3bde943486f5"
},
"view-touch": {
@@ -26,7 +26,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "bc2001f9cd51715a38ad8d913b1c5a4f2220b3917c8dc03b2de65cfb3f62f808"
},
"space-create": {
@@ -37,7 +37,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "a74330dcdd0d590e2e0008c7030a9dc11df9793682b1a050a7aaa734c651cc30"
},
"room-contour-close": {
@@ -48,7 +48,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "0c354a79f9c3660788b6c5e889a27b6bd78b1f209dc0eef6bb43e2c1344028c4"
},
"plan-context-tray": {
@@ -59,7 +59,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "64169c543291bc4df806dcf8ff484b42c8ea55eb343323d945344e0e28f2ce97"
},
"device-editor": {
@@ -70,7 +70,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "a4c1f55438e669fe7533a01185d50f7396e6fab23a3f2b9c8a669c6a28e6b200"
},
"device-display-preview": {
@@ -81,7 +81,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "8029b1cd7329e3fc921ae9ca19abe6f7f2c7246eb45c891d088baedf9972fac2"
},
"background-editor": {
@@ -92,7 +92,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "375900a29aa62632883ede6727b7dbb8b48cabe9d7d0e16425f9779c837f3dd9"
},
"room-card": {
@@ -103,7 +103,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "c985783769da1bce50c9abe92ce1c6852d62701ce940f6f0a041d634ac21e888"
},
"device-info": {
@@ -114,7 +114,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "19e247d5bf49375b238292d45ae32e9eb38a83f5d1a53f6ddde860ed4adcef42"
},
"pdf-export": {
@@ -125,7 +125,7 @@
},
"theme": "light",
"language": "en",
"sourceSha256": "b8d574a341f2238f1742a0d93845289888061f9889876bbb75bf707c3b3db827",
"sourceSha256": "a30183640fa0ddc006999072d32fdb1bdab6338c6220503470967cc4c4f2ae78",
"imageSha256": "4537692fd57a3ed95528eddd748eee5cb6e456ffab7cc49169853d62459252cd"
}
},