mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 16:38:31 +00:00
v1.54.1: the v1.54.0 audit findings, sealed
Version 1.54.0 -> 1.54.1 in package.json, package-lock.json, manifest.json, const.py and CARD_VERSION; rebuilt bundle in all three tracked copies (dist/, demo/srv/assets/, custom_components/houseplan/frontend/). Changelog entries (EN+RU) — one line per finding, HP-1540-01..06 — and docs/STATUS.md bumped. Suites on this exact tree: 161 frontend unit, 74 pure-backend, 74 browser smokes — all green.
This commit is contained in:
@@ -45,7 +45,7 @@ PLAN_ORPHAN_TTL_S = 3600
|
||||
SCHEDULED_GRACE_S = 30 * 24 * 3600
|
||||
FILES_DIR = "houseplan/files"
|
||||
CONF_ADMIN_ONLY = "admin_only"
|
||||
VERSION = "1.54.0"
|
||||
VERSION = "1.54.1"
|
||||
|
||||
DEFAULT_CONFIG: dict = {
|
||||
"spaces": [],
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -16,5 +16,5 @@
|
||||
"issue_tracker": "https://github.com/Matysh/houseplan-card/issues",
|
||||
"requirements": [],
|
||||
"single_config_entry": true,
|
||||
"version": "1.54.0"
|
||||
"version": "1.54.1"
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+13
-13
File diff suppressed because one or more lines are too long
@@ -1,5 +1,37 @@
|
||||
# Changelog
|
||||
|
||||
## v1.54.1 — 2026-07-31
|
||||
|
||||
Patch release: everything the adversarial audit of v1.54.0 found
|
||||
(HP-1540-01..06), each fix pinned by a regression test that fails on the
|
||||
old code.
|
||||
|
||||
- **Fix: the first calibration of a freshly discovered vacuum silently did
|
||||
nothing.** Until the device dialog was saved once, the robot had no config
|
||||
marker — yet the «Живая позиция» section was fully interactive, and every
|
||||
handler quietly bailed out while auto-calibration still announced success.
|
||||
Any vacuum edit now materialises the marker itself, and the success toast
|
||||
only appears after the matrix has verifiably landed in the config.
|
||||
- **Fix: a robot whose first map is `map_index: 0` lost its server-side
|
||||
trail.** The backend picked the map id by truthiness and dropped the zero,
|
||||
so the recorded run was stored under a key the card never looked up. Both
|
||||
sides now share one explicit rule — the first value that exists wins, and
|
||||
zero is a value.
|
||||
- **Fix: one robot on two floors recorded history for the last floor only.**
|
||||
The recorder kept a single marker per source entity, so the second
|
||||
placement silently evicted the first. Every marker fed by a source now
|
||||
gets its own copy of the run.
|
||||
- **Fix: auto-calibration ignored plans drawn with rectangle rooms.** The
|
||||
room matcher only accepted polygon outlines and then blamed the room
|
||||
names. Legacy rectangles count like everywhere else in the card.
|
||||
- **Fix: overlapping recorder refreshes leaked state subscriptions.** Two
|
||||
config saves racing each other could both subscribe and strand one
|
||||
callback until restart; refreshes are serialised now and teardown wins
|
||||
over any refresh still in flight.
|
||||
- The «no rooms» / «no match» toasts and docs/VACUUM.md no longer send you
|
||||
to the three-point calibration that no longer exists — they point at
|
||||
«Подогнать вручную», which does.
|
||||
|
||||
## v1.54.0 — 2026-07-31
|
||||
|
||||
### Live robot vacuums
|
||||
|
||||
@@ -6,6 +6,39 @@
|
||||
> **Правило проекта:** оба файла пополняются в одном коммите с самим
|
||||
> изменением — как и остальная документация (см. docs/STATUS.md).
|
||||
|
||||
## v1.54.1 — 2026-07-31
|
||||
|
||||
Патч-релиз: всё, что нашёл adversarial-аудит v1.54.0 (HP-1540-01..06),
|
||||
каждый фикс закреплён регрессией, падающей на старом коде.
|
||||
|
||||
- **Исправлено: первая калибровка только что обнаруженного пылесоса молча
|
||||
ничего не делала.** Пока диалог устройства ни разу не сохранён, у робота
|
||||
нет маркера в конфиге — а раздел «Живая позиция» уже полностью
|
||||
интерактивен: каждый обработчик тихо выходил, но автокалибровка всё равно
|
||||
объявляла успех. Теперь любая правка пылесоса сама создаёт маркер, а тост
|
||||
успеха появляется только после того, как матрица действительно легла в
|
||||
конфиг.
|
||||
- **Исправлено: робот с первой картой `map_index: 0` терял серверный
|
||||
след.** Бэкенд выбирал id карты по «истинности» и выбрасывал ноль, так
|
||||
что записанная уборка хранилась под ключом, который карточка не искала.
|
||||
Теперь обе стороны живут по одному явному правилу: побеждает первое
|
||||
существующее значение, и ноль — значение.
|
||||
- **Исправлено: один робот на двух этажах писал историю только для
|
||||
последнего этажа.** Рекордер держал по одному маркеру на источник, и
|
||||
второе размещение молча вытесняло первое. Теперь каждый маркер источника
|
||||
получает свою копию уборки.
|
||||
- **Исправлено: автокалибровка не видела планы из прямоугольных комнат.**
|
||||
Сопоставление принимало только полигоны, а потом сваливало вину на имена
|
||||
комнат. Старые прямоугольники считаются, как и во всей остальной
|
||||
карточке.
|
||||
- **Исправлено: пересекающиеся обновления рекордера текли подписками.**
|
||||
Два одновременных сохранения конфига могли подписаться оба и бросить один
|
||||
callback до перезапуска; обновления теперь сериализованы, а teardown
|
||||
выигрывает у любого ещё летящего обновления.
|
||||
- Тосты «нет комнат» / «имена не совпали» и docs/VACUUM.md больше не
|
||||
отправляют к несуществующей калибровке по трём точкам — они ведут к
|
||||
«Подогнать вручную», которая существует.
|
||||
|
||||
## v1.54.0 — 2026-07-31
|
||||
|
||||
### Роботы-пылесосы вживую
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
|
||||
| Item | State |
|
||||
|---|---|
|
||||
| Version | **v1.54.0** everywhere (manifest, const.py, package.json, CARD_VERSION); deployed to the home instance |
|
||||
| Version | **v1.54.1** everywhere (manifest, const.py, package.json, CARD_VERSION); deployed to the home instance |
|
||||
| Workflow | Since 2026-07-22: minor changes go to branch **`dev`** (build + smokes → deploy home → commit → push, NO release); releases are batched on the owner's command (merge dev→main, one tag, one release with a summary changelog, CI checked on dev beforehand) |
|
||||
| GitHub | https://github.com/Matysh/houseplan-card — **`main` carries every published release, the latest tag is the current version above**; `dev` is where work lands and is merged into `main` at release time (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) |
|
||||
| CI | validate.yml (hacs + hassfest + frontend + backend) green; release.yml attaches the bundle on release publish |
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "houseplan-card",
|
||||
"version": "1.54.0",
|
||||
"version": "1.54.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "houseplan-card",
|
||||
"version": "1.54.0",
|
||||
"version": "1.54.1",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lit": "^3.1.3",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "houseplan-card",
|
||||
"version": "1.54.0",
|
||||
"version": "1.54.1",
|
||||
"description": "Interactive house plan Lovelace card for Home Assistant",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
Reference in New Issue
Block a user