fix: seven small honesty fixes from the 29.08 audit (#369)

(a) documented: deleting a vacuum marker erases its server trail at once
and a re-added marker starts from scratch (VACUUM.md + both USER-GUIDEs).
(b) smoothVacPath reports dropped non-finite segments — one console warn
per call with the count — instead of hiding the whole trail silently on a
broken calibration matrix. (c) room climate (#317) now reaches legacy
markers whose exported config carries an ABSENT area key rather than an
explicit null: `== null` where the placement is decided. (d) the armed
furniture preview follows Shift without mouse movement — window
keydown/keyup listeners live exactly as long as the palette is armed,
detached at every palette teardown. (e) only the primary mouse button
places decor/furniture: a right or middle click with an armed tool is a
no-op, touch/pen untouched. (f) a device whose registry entities were ALL
deliberately disabled by the user no longer glows as an alive controller —
the #318 entityless-active rule now requires a genuinely empty roster.
(g) furniture-pack author corrected to Sergey Matyunin (Сергей Матюнин)
per the owner's decision — LICENSE.md, README.md, pack.json,
docs/FURNITURE.md, the provenance check in generate-furniture-assets and
its unit; the source archive bytes are unchanged and the README notes the
romanisation fix.

Proofs: units for (b)/(c)/(f) including the #318 regression pair; new
smoke_furniture_polish for (d)/(e) with listener add/remove counters and
both mouse buttons; five registry mutants, one per code change.

Issue: #369
User-Visible: yes
This commit is contained in:
Codex
2026-08-29 11:29:42 +03:00
parent a041934bc2
commit 8ee1c91fff
38 changed files with 551 additions and 212 deletions
+7
View File
@@ -12,6 +12,13 @@
on lines and shapes, while independent width/depth resizing still keeps
horizontal, vertical and diagonal strokes equally thick
([#361](https://github.com/Matysh/houseplan-card/issues/361)).
- A batch of small honesty fixes from the audit: room climate now reaches
legacy markers that never stored an explicit "no HA Area" value; a device
whose entities were all deliberately disabled no longer glows as alive; the
furniture preview follows Shift instantly; a right click with an armed tool
no longer stamps objects; a dropped vacuum-trail segment (broken
calibration) is reported in the console instead of vanishing silently
([#369](https://github.com/Matysh/houseplan-card/issues/369)).
- Device markers in the Background editor are now passive, translucent
landmarks: their core, ring, value capsule and badges no longer hover, open,
+7
View File
@@ -17,6 +17,13 @@
физическая толщина у линий и фигур, а независимое изменение ширины и глубины
предмета по-прежнему не искажает горизонтальные, вертикальные и диагональные
штрихи ([#361](https://github.com/Matysh/houseplan-card/issues/361)).
- Пакет мелких честных фиксов из аудита: климат комнаты добирается до
легаси-маркеров без явного признака «нет HA Area»; устройство с полностью
отключёнными сущностями больше не светится как живое; превью мебели
реагирует на Shift мгновенно; правый клик с выбранным инструментом больше
не ставит объекты; отброшенный сегмент следа пылесоса (битая калибровка)
теперь виден в консоли, а не исчезает молча
([#369](https://github.com/Matysh/houseplan-card/issues/369)).
- Маркеры устройств в редакторе подложки теперь служат только полупрозрачными
ориентирами: ядро, кольцо, капсула значения и бейджи больше не реагируют на
+1 -1
View File
@@ -38,7 +38,7 @@ The generator validates a deliberately small, inert SVG subset and produces:
- `src/furniture-menu-art.generated.ts` for the lazy editor graph only.
Generated files are never edited manually. The 77 drawings were created by
Sergey Matyushin (`Matysh`) and granted to the project under its MIT License in
Sergey Matyunin (`Matysh`) and granted to the project under its MIT License in
[issue #159](https://github.com/Matysh/houseplan-card/issues/159#issuecomment-5454085168).
No separate attribution is required in the interface.
+4 -2
View File
@@ -740,8 +740,10 @@ of silently rebinding.
Multiple maps are represented as distinct sources/calibrations. A vacuum is
shown only in the space whose saved mapping currently matches the active map;
the dock remains in its configured space. See [VACUUM.md](VACUUM.md) for the
source dialect and calibration contract.
the dock remains in its configured space. Deleting a vacuum marker erases its
server-side trail immediately; adding the marker again starts the trail from
scratch. See [VACUUM.md](VACUUM.md) for the source dialect and calibration
contract.
## 17. Kiosk
+3 -1
View File
@@ -864,7 +864,9 @@ binding tombstone не вырезает её из живого устройст
проёма, остаётся отдельной рабочей связью и не восстанавливает удалённый маркер.
Повторное добавление создаёт маркеру новую позицию и снова оживляет сохранённые
текстовые переменные и controls, но не дублирует и не переписывает связь проёма.
Позиция, вложения и след пылесоса при удалении маркера удаляются.
Позиция, вложения и след пылесоса при удалении маркера удаляются —
серверный след стирается сразу и при повторном добавлении маркера
начинается заново.
### Скрытые устройства
+8
View File
@@ -169,3 +169,11 @@ debounced persistence and live-update path as a later state event.
Commands, zones/no-go polygons, cleaning-history UI and Roomba string parsing
are outside Stage 1.
## Deleting and restoring a vacuum marker (#369)
Deleting a vacuum marker erases its server-side trail immediately: the next
`config/set` purges trails of removed markers (#335), so an undeleted (re-added
or restored) vacuum starts its trail from scratch. This is deliberate — a
tombstone that kept trails alive used to leak the store — but it means trail
history does not survive marker deletion.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 319 KiB

+12 -12
View File
@@ -3,7 +3,7 @@
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"oxipng": null,
"sourceFingerprint": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceFingerprint": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"captureScriptSha256": "fe76c8e2e27501e9a377d7aa15dd6cba6a018d55c07deb602dbee097f0a0a5ba",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -15,7 +15,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "0ca982495a7749907c48ebbddfd089c54385a4347f79f64e94af2c5a8d5c03eb"
},
"view-touch": {
@@ -26,7 +26,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "3be239a5a494f6776540a9c0049694ee6f9d2ba927c8bcb4b26ee5a69a228a7d"
},
"space-create": {
@@ -37,7 +37,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "a55b463055a565892ca139014e314a8f63fb5301c87fff2e48d7e69210fe9b6c"
},
"room-contour-close": {
@@ -48,7 +48,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "dfad9a27371cfa397a3fd8dce7005f42d24649743f5322105ee894067d3a9f16"
},
"plan-context-tray": {
@@ -59,7 +59,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "b75f348c632296da5c2fc142d53df613f757e1516acac315be50f5b4557729cc"
},
"device-editor": {
@@ -70,7 +70,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "8affadfce926fe2f6cf344c33f611c44fcbc79c1969f69c3a6935ff2e99c36c3"
},
"device-display-preview": {
@@ -81,8 +81,8 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"imageSha256": "6d323b6f641b2cc7db64252f70567348bd3f2551f82e61fd3a2b4674d244918e"
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "6f628abe6b89d7c4b352e6d73ac0b126526f6fdba5927bb774c5b884e484ca19"
},
"background-editor": {
"file": "07-background-editor.png",
@@ -92,7 +92,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "a1d1a905f1410f73231d2ea5d1dfbd8ae79c2fe8b0a79cff87ebb977ac7a3103"
},
"room-card": {
@@ -103,7 +103,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "48a5685039a5e0de2a28190d857b193c86e2e63606e3c7a8c40fc9d2b190da4e"
},
"device-info": {
@@ -114,7 +114,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d02374a4194e4601cb0a2047dc556f70b9fdf354894bdfeea9288d74c14742d8",
"sourceSha256": "a5cdb130b30b7245243978d04cf6c7f55390b3d4be281451b382e2b692909aa7",
"imageSha256": "29a342811aaedaebc54ba337792d60cb454a7cf4c3063b210f6c4bafe0a4d87b"
}
}