113 Commits
Author SHA1 Message Date
Matyshandclaude[bot] 139dceaa4f chore(golden): принять резкую штриховку после зума (#685)
WSL-приёмка обновляет 21 существующую масштабную сцену и добавляет четыре проверки 132/140%, DPR 1/2 с проёмами. Восемь кадров документации пересняты в той же доказанной среде; три неизменных кадра подтвердили совместимость.

Issue: #685
User-Visible: no
Release: v1.78.0-beta.8
Baseline-Reviewed-Local: sha256:414e55783bc8272d7b2ff209a94bd69e12de95f6759d5bc95975acb94e937f39
2026-09-28 07:35:39 +00:00
Sergey Matyunin f5c6d70b7c fix: stabilize cold 2.5D first frame
Issue: #654
User-Visible: yes
2026-09-26 09:05:20 +03:00
Claude 813554253a chore(docs): accept updated dialog screenshots (#603)
Reviewed three changed switch frames from Linux Docs screenshots run 35566543872; eight unchanged frames witness the capture environment.

Issue: #603
User-Visible: no
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/35566543872
2026-09-21 09:02:00 +03:00
Claude c69d73f1f2 docs: accept refreshed settings screenshots (#602)
Issue: #602
User-Visible: no
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/35534819172
2026-09-20 23:16:39 +03:00
Claude fa12045271 docs: принять три кадра диалогов настроек (#600)
Linux Docs Screenshots 35506234074 снял ветку после исправления скроллера.
Просмотрены space-create, device-editor и device-display-preview; кадр preview
отличается от обычного и показывает блок Display preview. Остальные восемь
сцен совпали побайтово.

Issue: #600
User-Visible: no
2026-09-20 13:54:24 +03:00
Claude 619352509e docs: принять накопленные form-kit кадры (#585)
Строгий docs-гейт #585 обнаружил отложенную визуальную дельту уже
смёрженного #598: карточки групп в диалогах пространства и устройства.
Все три кадра просмотрены; остальные восемь Linux-сцен совпали побайтно.

Съёмка и проверка воспроизводимости:
https://github.com/Matysh/houseplan-card/actions/runs/35465854646

Issue: #585
User-Visible: no
2026-09-19 23:00:24 +03:00
Sergey Matyunin 15e0efe3bf docs: accept data-hp contract screenshots (#489)
Issue: #489
User-Visible: no
2026-09-08 21:30:58 +03:00
Matysh e86b689d65 docs: accept PDF export screenshots
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/34071499278
Issue: #53
User-Visible: no
2026-09-07 04:03:09 +03:00
Matysh 23c65e449e test: accept corrected dialog baselines
Issue: #463
User-Visible: no
Release: v1.72.0-beta.5
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33973294353
2026-09-05 18:05:19 +03:00
Codex 921d0f4c0d docs: accept the screenshots taken with the pinned compositor (#424)
User-Visible: no
Issue: #424
2026-09-02 22:00:24 +03:00
Sergey Matyunin 3576cc2ea7 docs: accept support pipeline screenshots
Issue: #423
User-Visible: no
2026-09-02 21:34:20 +03:00
Sergey Matyunin 567a45ab6b Refresh documentation screenshot fingerprint
Accepted from canonical Docs screenshots run:
https://github.com/Matysh/houseplan-card/actions/runs/33654212929

Runner-image transition evidence (base and repeat):
https://github.com/Matysh/houseplan-card/actions/runs/33654548270
https://github.com/Matysh/houseplan-card/actions/runs/33654551524

Issue: #419
User-Visible: no
2026-09-02 19:26:29 +03:00
Sergey Matyuninandclaude[bot] a173f9168e docs: refresh reviewed support screenshots
Canonical Linux capture: https://github.com/Matysh/houseplan-card/actions/runs/33592550716
Eight changed frames were reviewed; two byte-identical frames remain as environment witnesses.

Issue: #415
User-Visible: no
2026-09-02 05:08:51 +00:00
Matysh 4fa670e873 docs: accept deterministic documentation screenshots
Accept the canonical Linux capture after rasterisation flags and whole-pixel clipping changed every frame.

Issue: #410
User-Visible: no
2026-09-01 23:36:05 +03:00
Sergey Matyunin 24af34ccba docs: refresh #405 screenshot source fingerprint
Проверка (CI) / Классификация изменённых файлов (push) Successful in 27s
Проверка (CI) / HACS: валидация репозитория (push) Skipped
Проверка (CI) / Hassfest: манифест интеграции (push) Skipped
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 1m10s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 40s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 17m35s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Skipped
Проверка (CI) / Смоки: все шарды зелёные (push) Skipped
Проверка (CI) / Golden-кадры против принятых эталонов (push) Skipped
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Skipped
Canonical run 33549400366; the 76-pixel raster flake is tracked in #410.

Issue: #405
User-Visible: no
2026-09-01 22:36:15 +03:00
Sergey Matyuninandclaude[bot] 2274e6eb84 docs: refresh canonical screenshots
Docs screenshots run 33521193808; all 10 pairs were visually reviewed. The explicit no-witnesses reason is recorded in screenshots.json because the prior rasterization baseline is no longer reproducible.

Issue: #403
User-Visible: no
2026-09-01 15:08:22 +00:00
Codex ccd870ddf7 build: refresh bundle trees and the doc capture for #402
User-Visible: no
Issue: #402
2026-08-31 16:47:53 +03:00
Matysh 26cb00db24 docs: refresh canonical screenshots for area relocation
Issue: #126
User-Visible: no
2026-08-31 10:21:53 +03:00
Matysh b319fc9548 docs: refresh canonical screenshots
Issue: #126
User-Visible: no
2026-08-31 09:45:53 +03:00
Codex bd6722ccd2 build: refresh bundle trees and the doc capture for #400
User-Visible: no
Issue: #400
2026-08-31 08:14:55 +03:00
Codex f3620f2b27 build: refresh bundle trees and the doc capture after the dev rebase (#396)
User-Visible: no
Issue: #396
2026-08-31 01:40:05 +03:00
Matysh 7b363caabc Accept canonical documentation screenshots
Canonical run: https://github.com/Matysh/houseplan-card/actions/runs/33337407834

User-Visible: no
Issue: #32
2026-08-31 00:50:44 +03:00
Codex 512ab7f279 docs: commit the recaptured screenshot images, not only the manifest (#42)
The previous commit refreshed docs/images/screenshots.json but left the
re-rendered PNGs out of the index — CI compared the committed manifest
against the committed (stale) images and failed on every hash.

User-Visible: no
Issue: #42
2026-08-30 21:34:32 +03:00
Matyshandclaude[bot] fd301b6b08 docs: accept settled camera captures
Canonical capture: https://github.com/Matysh/houseplan-card/actions/runs/33319234994

Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matysh 6d73d6e909 docs: refresh device editor screenshots
Issue: #74
User-Visible: no
2026-08-30 16:44:57 +03:00
Matyshandclaude[bot] bdf81fad58 feat: add device position undo history
Issue: #74
User-Visible: yes
2026-08-30 13:16:27 +00:00
Matysh fa146fb133 docs: accept rebased settings help screenshots
Refresh the canonical documentation frames after rebasing #86 onto the
current dev branch and visually reviewing all ten scenarios.

Issue: #86
User-Visible: no
2026-08-30 14:55:54 +03:00
Codex e4e1e3705f fix: close CODE-REVIEW-44-r1 M1-M2
M1: the room-climate cache keys on the STORED exclusion array reference
(stable across renders; _excluded builds a fresh Set per call), so
saving new Discovery filters recomputes climate immediately instead of
waiting for an unrelated hass tick.
M2: a device without a platform-bearing entity takes its integration
name from the identifier domain — the excluded reason can no longer
render a raw {integration} placeholder (if the exclusion matched,
at least one of the two names exists).

User-Visible: no
Issue: #44
2026-08-30 14:29:19 +03:00
Codex 34778d81e4 build: refresh bundle trees for #44
User-Visible: no
Issue: #44
2026-08-30 14:06:15 +03:00
Codex 572cf92896 build: refresh bundle trees for #33
User-Visible: no
Issue: #33
2026-08-30 12:47:07 +03:00
Sergey Matyunin b1b1e7439b docs: refresh screenshot fingerprint
Issue: #383
User-Visible: no
2026-08-30 12:00:28 +03:00
Codex 4f28bf4f7f build: refresh bundle trees for #384
User-Visible: no
Issue: #384
2026-08-30 10:53:58 +03:00
Sergey Matyuninandclaude[bot] c1f2d36267 test: register no-op tap review evidence
Issue: #381
User-Visible: no
2026-08-30 07:48:16 +00:00
Sergey Matyunin e524f07dde Refresh docs screenshots for golden matrix
Captured by https://github.com/Matysh/houseplan-card/actions/runs/33271699236

Issue: #378
User-Visible: no
2026-08-29 22:47:05 +03:00
Sergey Matyunin 552b78a134 Refresh documentation screenshots after rebase
Captured by https://github.com/Matysh/houseplan-card/actions/runs/33270679280

Issue: #378
User-Visible: no
2026-08-29 22:24:15 +03:00
Codex 40ba222ac3 build: refresh bundle trees for #377; align the color-picker contract
User-Visible: no
Issue: #377
2026-08-29 21:39:55 +03:00
Sergey Matyunin 41c09ea6a2 docs: accept rebased canonical screenshots
Issue: #373
User-Visible: no
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33268042941
2026-08-29 21:23:50 +03:00
Codexandclaude[bot] 05a81403bd build: refresh bundle trees for #375
User-Visible: no
Issue: #375
2026-08-29 18:09:53 +00:00
Sergey Matyunin 6d838d7750 docs: accept canonical screenshots
Issue: #374
User-Visible: no
2026-08-29 14:49:08 +03:00
Codex 89fa8ca588 feat: French localization — community contribution by @OUARZA (#371)
The complete French dictionary contributed in #371 (1026 keys, zero empty
values, zero placeholder mismatches) lands as the second lazy locale on the
fr.ts + one static entry. The contributor's snapshot predated this week's
keys, so the 121 additions (device inbox #29, backdrop guard #39, junction
limits #331, lazy-editor toasts #353/#354, furniture #159) are translated
in this commit and flagged in the issue for the author's review; 21 stale
pre-#62 keys are dropped; key order follows en.json. The HA integration
translations file ships as contributed (full parity).

Wiring: loadFrench + __HOUSEPLAN_FR_RETRY_ASSET__ with the same 1/1
replacement guarantee as German; locale roles and localeRoots generalise to
(de|fr); the stale-entry fallback panel (#353) gains its French branch —
the r1 reviewer caught that this second hardcoded language list would have
silently degraded French to English on a cached entry. French profiles
(fr, fr-FR, fr-CA, fr-BE, fr-CH) select automatically.

Proofs: the registry-driven parity suite covers fr by construction
(1128/1128 keys); French analogues of both German-personal tests (product
glossary + non-translation scan with a reviewed equal-to-English
allow-list of 22 legitimate homographs); smoke_french_locale — fr-CA
profile commits French from the real bundle, one lazy chunk per page,
initial graph free of fr; smoke_entry_stale gains the French run; a
registry mutant drops the fr entry and is killed by the smoke. Initial
view: +0.5 KB (registry entry + fallback branch); the 23 KB dictionary is
lazy.

Issue: #371
User-Visible: yes
2026-08-29 13:39:21 +03:00
Sergey Matyunin 3068a97cff test: align device catalog evidence with shortcut
Issue: #363
User-Visible: no
2026-08-29 12:47:03 +03:00
Sergey Matyunin 7daaae7209 docs: accept background picker screenshots
Issue: #360
User-Visible: no
2026-08-29 11:53:18 +03:00
Codex 3965475c2d docs: refresh screenshot fingerprint after rebase
Issue: #369
User-Visible: no
2026-08-29 11:30:32 +03:00
Codexandclaude[bot] e758c3d9fb fix: quantise the light aperture amount of moving covers (#366)
A gate or door bound to a position-reporting cover fed current_position
into the light-barrier signature at toFixed(3) precision: every percent of
movement produced a new fingerprint, a full physicalBodyParts recompute
and a recut — up to ~100 heavy passes per gate cycle, plus LRU churn.

The light pipeline now consumes one quantised amount
(OPENING_LIGHT_AMOUNT_QUANTUM = 0.05, exact 0 and 1 nodes) at the single
point that feeds BOTH the signature and the cut geometry, so the cache key
and the drawn aperture agree by construction and a full sweep costs at
most 21 recomputes. The door LEAF animation stays smooth — _openingAmt is
quantised only for the light pipeline, nowhere else. Binary contact doors
are byte-identical to the previous behaviour (pinned by unit).

Assumption recorded in the spec: the 5% visual step of the light cut is
indistinguishable on real plans; if field impressions disagree, the
quantum is a one-constant change (0.02 => <=51 recomputes) or the decision
falls back to a debounce. LIGHT.md §Caching documents the grid.

Issue: #366
User-Visible: yes
2026-08-29 08:15:51 +00:00
Sergey Matyuninandclaude[bot] 953eda4f6e fix: scale furniture strokes with plan zoom
Issue: #361
User-Visible: yes
2026-08-29 07:55:23 +00:00
Codex 7c31725ac9 feat: warn about huge backdrops and offer a safe reduced copy (#39)
A picked raster is now classified from its HEADER BYTES ONLY before anything
heavy happens: src/backdrop-probe.ts parses PNG IHDR (+colour type/tRNS for
alpha), JPEG SOF and WebP VP8/VP8L/VP8X at fixed offsets, never using a file
field as an allocation size; hostile or truncated headers collapse to
'unknown', which warns without numbers instead of passing silently. The
thresholds live in that module as the single calibration point
(WARN_DECODED_BYTES 128 MiB ≈ 32 MP, HARD_DIMENSION 16384 — the browser
canvas cap, DOWNSCALE_TARGET_PX 4096), derived from the desktop-Chromium
matrix now committed as demo/benchmark_backdrop_decode.mjs with a
conservative tablet margin documented in the spec.

The shared pick flow (src/backdrop-pick.ts) feeds BOTH lazy runtimes — the
editor space dialog and the onboarding first-space dialog — so the guard
cannot drift between them, and nothing of it enters the eager View graph.
Warn shows the real numbers and three actions; the reduced copy decodes
EXIF-aware, keeps aspect and alpha (PNG stays PNG, opaque becomes JPEG
q0.9) and flows through the ordinary planFile → upload path. Hard has two
phases with one outcome: beyond 16384 px only Cancel; a failed or timed-out
(10 s) reduce closes with a toast, clean staging and NO silent fallback to
the original the user just declined. SVG never reaches the probe. The safe
path swaps the manual byte-loop base64 for FileReader — half the JS-heap
peak on every upload, byte-identical output (parity asserted in the smoke).

Proofs: header-table units incl. a fuzz set of hostile headers and ±1
threshold bounds; smoke_backdrop_guard on the real bundle — zero decode
calls before the choice, byte parity of keep-original, a real 6200 px
reduce to 4096 for both alpha and opaque branches, cancel-only hard
dialog, both phase-2 failures (reject and hang under the test-only timeout
override), re-pick after refusal, SVG bypass; four registry mutants
(probe-always-safe, alpha-dropped, hard-demoted, phase-2 silent fallback).
Spec anchor corrected alongside: the server plan limit is 8 MB
(MAX_PLAN_BYTES), attachments are the 50 MB path — an 8 MB JPEG is easily
80-160 MP decoded, so the client-side guard stays the primary defence.

Issue: #39
User-Visible: yes
2026-08-29 10:13:09 +03:00
Sergey Matyunin d3d3312adb docs: accept #362 screenshot source
Issue: #362
User-Visible: no
2026-08-29 09:40:13 +03:00
Matysh 9d2ef12c96 feat: smooth vacuum trails (#209)
Issue: #209
User-Visible: yes
2026-08-28 23:16:58 +03:00
Matysh f62926fbeb feat: make Glow follow door opening state (#20)
Issue: #20
User-Visible: yes
2026-08-28 22:33:07 +03:00
Codex 49174e81f7 fix: a cold View resolves taps without the lazy editor runtime (#357)
Field report from the dacha: the wall switch "Гостиная основной свет",
whose controls name three virtual light sources, periodically ignored taps
— no toggle, no glow — until its settings dialog was opened once with no
changes. "Periodically" was every fresh tab: the #337 lazy split left
_toggleIntent (and the confirm-line helpers) on the card as stubs
delegating into the editor runtime, so a plain View tap on a cold tab
threw `Houseplan editor runtime is not loaded` synchronously inside the
click handler. Opening any editor surface loaded the runtime and "healed"
the tab for its lifetime.

The View card now owns toggle resolution: _toggleIntent calls
resolveToggleIntent directly (device-toggle.ts was already in the initial
graph; the card owns _planHass/_fullRegistryHass/_virtualLights), and
_toggleStateText/_toggleConfirmationStateText/_toggleConfirmationLines
moved with it. The editor runtime delegates back to the host — one source
of truth, editor consumers (dialog preview, hint lines) unchanged.

Every product smoke preloads the runtime, so none of them could see this
class of regression. The new smoke_cold_view_toggle mirrors the field
config on a genuinely cold tab: a real switch drives three passive
virtual lamps with one tap, a controlled lamp drives its switch back,
tap_confirm renders its state lines and confirms, and the editor chunk is
never requested. A registry mutant restores the old delegation and is
killed by that smoke.

Issue: #357
User-Visible: yes
2026-08-28 21:02:19 +03:00