chore(release): prepare v1.67.0-beta.3

Issue: #244
Issue: #248
Issue: #250
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-08-23 02:42:37 +03:00
parent 4e13d71d78
commit 9c5eacfd02
25 changed files with 53 additions and 46 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ PLAN_ORPHAN_TTL_S = 3600
SCHEDULED_GRACE_S = 30 * 24 * 3600
FILES_DIR = "houseplan/files"
CONF_ADMIN_ONLY = "admin_only"
VERSION = "1.67.0-beta.2"
VERSION = "1.67.0-beta.3"
# Portable backup format. This is deliberately independent from the Home
# Assistant Store version above: storage migrations and files exported by a
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -16,5 +16,5 @@
"issue_tracker": "https://github.com/Matysh/houseplan-card/issues",
"requirements": [],
"single_config_entry": true,
"version": "1.67.0-beta.2"
"version": "1.67.0-beta.3"
}
+2 -1
View File
@@ -713,8 +713,9 @@ export async function prepareGoldenScenario(page, scenario) {
status: 'failed',
reason: 'wall-null',
}));
card._openAlignDialog();
card._alignDialog = {
report: {}, config: card._serverCfg, layout: card._layout,
...card._alignDialog,
preflight: {
fingerprint: 'golden-optimize-preflight',
spaces: failures,
+3 -1
View File
@@ -106,7 +106,9 @@ const res = await page.evaluate(async () => {
// ================= D. «Выровнять всё» не воскресает НИКОГДА ==============
c._setMode('view'); await c.updateComplete; await sleep(60);
c._alignDialog = { report: { moved: 3, maxShiftCm: 2, maxSpace: c._space }, spaces: [], layout: {}, cm: 2, where: '', busy: false };
// Use the production preview instead of a partial synthetic report: report
// fields grow with the optimizer contract and the dialog renders all of them.
c._openAlignDialog();
await c.updateComplete;
out.dAlignOpenBefore = !!c._alignDialog;
c.remove(); await sleep(20);
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+2
View File
@@ -2,6 +2,8 @@
## Unreleased
## v1.67.0-beta.3 — 2026-08-23
- Door, window and gate symbols now remain exactly on the wall centreline for
both opening directions. “Opens to the other side” only mirrors the door or
window geometry, or reverses a gate's 10° turn; it no longer shifts an
+2
View File
@@ -8,6 +8,8 @@
## Не выпущено
## v1.67.0-beta.3 — 2026-08-23
- Символы дверей, окон и ворот теперь остаются точно на осевой линии стены при
обоих направлениях открывания. Настройка «Открывается в другую сторону»
только зеркалит геометрию двери/окна либо меняет знак 10° поворота ворот и
+9 -9
View File
@@ -1,18 +1,18 @@
<!-- release: v1.67.0-beta.2 -->
<!-- release: v1.67.0-beta.3 -->
## Основное
- Декоративные линии, фигуры, текст и мебель теперь видны поверх заливки комнат, но остаются под стенами, светом, устройствами и названиями.
- Символы дверей, окон и ворот по умолчанию центрируются по толщине стен; существующее ручное выравнивание сохраняется.
- Перетаскивание вкладок пространств мышью снова меняет порядок, а разделитель заранее показывает точное место вставки.
- «Оптимизировать планы» восстанавливает ссылки устройств после удаления или независимого импорта пространства, сохраняя точные позиции там, где это безопасно.
- Повторная оптимизация больше не сообщает уже устранённый шум координат после сохранения, обновления интеграции или перезагрузки.
- Символы дверей, окон и ворот всегда остаются на осевой линии стены; смена стороны открывания меняет только направление.
- Мелкие исправления и улучшения.
## Highlights
- Decorative lines, shapes, text and furniture are now visible above room fills while remaining below walls, light, devices and room labels.
- Door, window and gate symbols are centred across wall depth by default, while existing explicit face alignment is preserved.
- Mouse dragging reorders space tabs again, with a divider previewing the exact insertion point.
- Optimize Plans restores device references after a space is deleted or independently imported, preserving exact positions where safe.
- Repeating Optimize no longer reports coordinate noise that was already removed before storage, an integration update or reload.
- Door, window and gate symbols always remain on the wall centreline; changing the opening side affects direction only.
- Small fixes and improvements.
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.67.0-beta.2/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.67.0-beta.2/docs/CHANGELOG.md)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.67.0-beta.3/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.67.0-beta.3/docs/CHANGELOG.md)
+2 -2
View File
@@ -21,8 +21,8 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
| Item | State |
|---|---|
| Version | **v1.67.0-beta.2 candidate** everywhere (manifest, const.py, package.json, CARD_VERSION) — second prerelease of the v1.67 line |
| Current local cycle | v1.67.0-beta.2 is published. Current `dev` includes orphan-reference repair (#244) and idempotent Optimize storage/reload handling (#248); the #250 issue branch additionally makes every opening symbol remain on the wall centreline regardless of `flip_v`. The next prerelease remains gated by review and the full exact-SHA Validate. |
| Version | **v1.67.0-beta.3 candidate** everywhere (manifest, const.py, package.json, CARD_VERSION) — third prerelease of the v1.67 line |
| Current local cycle | v1.67.0-beta.2 is published. Current `dev` includes orphan-reference repair (#244), idempotent Optimize storage/reload handling (#248), and centerline-only opening-symbol placement regardless of `flip_v` (#250). v1.67.0-beta.3 packages these reviewed S8 changes and remains gated by the full exact-SHA Validate before publication. |
| Hidden Labs Stage | #89 Stage 1 ships in v1.63.0-beta.1. #122 Stage 2 ships in v1.64.0 and evolves the same hidden, expiring `iso` experiment with matte walls, a low exterior floor edge, restrained shared shadows and live vertical door/window/gate panels. Flat remains default; editors and `houseplan-space-card` remain flat; live floor effects and HA actions remain unchanged. Public activation remains a separate task. |
| 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 GitHub Release uses `prerelease=false`. Release bodies are short and bilingual (Russian first): only significant user changes get individual bullets, while minor/code-only work is grouped as `Мелкие исправления и улучшения` / `Small fixes and improvements`; every body ends with separate links to the Russian and English changelogs. Detailed RU/EN changelog bullets may link the corresponding closed GitHub Issues; 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) |
Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 KiB

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 KiB

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 134 KiB

+21 -21
View File
@@ -2,7 +2,7 @@
"version": 1,
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"sourceFingerprint": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"sourceFingerprint": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"captureScriptSha256": "ce2e9542fed9dade3085be87d16f69adb2ac8262893ad78ad966b1b9673f2983",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -14,8 +14,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "9190bd86a07b0cb0502019d76d3286c0542181e1b4a4f862077d9cefa120613c"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "36223106c073f07d8cc3ecf8eaab37192ebb2687daba65c5c21047d0b7890de0"
},
"view-touch": {
"file": "02-view-touch.png",
@@ -25,8 +25,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "cfa2f77eb68df69ae9fc9b51ffe2f14df01f7b74444fd2b038cadc1e9dfee22b"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "41e3ba67f8db0e98f26f484293af83ef937c369ca5ca6a59a3350d8954c906f4"
},
"space-create": {
"file": "03-space-create.png",
@@ -36,8 +36,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "6df7753f00b7d87cd35fd18fb8fbac0a2a7fa2e549902b3afee38f38c93a2ac0"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "c33a7279165a4cec6fa6fadb6fd08cd967e082a17fe101ef442d27d36ae59b6b"
},
"room-contour-close": {
"file": "04-room-contour-close.png",
@@ -47,8 +47,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "1c09bc2e3c038fae170f32c5191929531516ebb6a09a39d79648e5efffee03d7"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "57b1407f0ac27aed88940508957454a31e5c577c0985fcda6aeca7f8ed42fe9b"
},
"plan-context-tray": {
"file": "05-plan-context-tray.png",
@@ -58,8 +58,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "cecd8c5edf5779b0d6a14cdc2ac74748af59d02d1c1d34c2cf86065ed9c8fc8a"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "d34908f41d5953da3d454dba1b43495cac2483b7bd933062d94261dee7b7de98"
},
"device-editor": {
"file": "06-device-editor.png",
@@ -69,8 +69,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "a01bad41635437f8580090b162b94a7f609d7758f2346deaf2b09669e13a8b4a"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "d0ffd31ce80bfde21ab75da356a5fc1af38246f2b301030880320620c228d89d"
},
"device-display-preview": {
"file": "06-device-display-preview.png",
@@ -80,8 +80,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "7151c96dc048381f7a7070ecb85a82a890b2f4c703628f14fa472eb8dacbf3dc"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "2cdabae1f89c3286e4fac0ce30f757ee1690b707ab8a5488748b7cd420626160"
},
"background-editor": {
"file": "07-background-editor.png",
@@ -91,8 +91,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "9f08f3f3711b100d68fb1a05af269e43e47d8f8d12c0cbe4f9ab557138722989"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "30147bb00a90eea7136b4cee30995f6e6a9217b5132f3e8d3ad7471413b1af8a"
},
"room-card": {
"file": "08-room-card.png",
@@ -102,8 +102,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "66d8b0a509909822ff6b891a483bad9d2c72b20f08e287355883aa5205c6cee0"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "029a3e69ec647a8a370d99e6bb7f9225833c526739076022f6b52ba54bff30ea"
},
"device-info": {
"file": "09-device-info.png",
@@ -113,8 +113,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "cafb1c9eaaa08758b49a08e16414a57e4453b5546ab6e7efff10defd6e1887a1",
"imageSha256": "f4d3bda00a2fce54f408b1f20e03b5c590ba4b168fd214a28aafb1692b1f3124"
"sourceSha256": "a4282c0efd728658ba5bf6aa66591b60d827b9615d0c219f0ab6232314085bd6",
"imageSha256": "dd492f53150b7149085daada5cce9eeae9bde9e7ea1d86679a54b3041f72f517"
}
}
}
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.67.0-beta.2",
"version": "1.67.0-beta.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.67.0-beta.2",
"version": "1.67.0-beta.3",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.67.0-beta.2",
"version": "1.67.0-beta.3",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -297,7 +297,7 @@ import {
} from './space-order';
import { applyOpeningMoves, mergeCollinearPartitions, spaceMergeGeometry } from './wall-merge';
const CARD_VERSION = '1.67.0-beta.2';
const CARD_VERSION = '1.67.0-beta.3';
const DISPLAY_LABEL_KEYS: Record<DeviceDisplayMode, I18nKey> = {
badge: 'display.badge',
icon_ripple: 'display.icon_ripple',