Files
houseplan-card/demo
Matysh 49b0cb4e05 perf/fix v1.43.1: external audit P1 — render cost, drag threshold, geometry, backend
L1: memoized space model + open pairs (structural fingerprint key, epoch
bumped synchronously at mutation time, not inside the debounce); hoisted
per-room geometry out of the render loop; smoke asserts zero recomputation
across state pushes.

L4: openings get the 3 px drag threshold used by every other pipeline and
only write when the geometry actually changed — taps open the dialog again.

G2: interiorPoint() replaces the vertex mean, so island rooms inside
concave (U/L) parents are accepted and their evenodd holes render; traced
duplicates still are not containment.

G3: segKey rounds before ordering — one shared wall, one key.

B2: _check_write fails closed when the entry is unavailable.
B3: layout/set honours expected_rev and returns the new rev.
B4: config/set without expected_rev over a non-empty store logs a warning.
B5: coordinates reject NaN/Infinity; spaces/rooms/markers/decor/layout capped.

+2 unit tests (118), +2 backend tests (14), smoke_render_perf; docs
same-commit
2026-07-27 10:58:18 +03:00
..

Synthetic demo home

A fully fictional house (plans, devices, states) used for README screenshots, the demo GIF and headless smoke tests — so no real home data ever appears in public materials.

  • srv/demo.html — self-contained host page: <ha-icon>/<ha-card> stubs and a fake hass (registries, states, callWS, callService, floors).
  • srv/assets/ — generated plan SVGs and icons.js (node demo/gen_icons.mjs, needs the repo's devDependencies). The card bundle is copied from dist/: cp dist/houseplan-card.js demo/srv/assets/.
  • serve.mjs — playwright launcher (route interception, no web server).
  • smoke_*.mjs — feature smoke tests; run with a Chromium installed via PLAYWRIGHT_BROWSERS_PATH=<dir> npx playwright install chromium-headless-shell.

Note for sandboxed sessions: /tmp does not survive; this directory is the persistent home of the harness (docs/DEVELOPMENT.md has the LD_LIBRARY_PATH recipe).