Commit Graph
646 Commits
Author SHA1 Message Date
Matysh b5324ce4e3 test: accept inherited dev golden updates
The same eight changes are present on origin/dev and are unrelated to the smooth camera implementation. Review confirmed the catalog actions, toolbar undo/redo controls and dialog help/status icons are the intended current dev UI. Accept only those named Linux candidates; keep 139 existing scenarios unchanged.

Issue: #82
User-Visible: no
Release: v1.70.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33319326145
2026-08-30 18:53:11 +03:00
Matysh 64f54fd4b0 test: settle animated camera checks
Wait for camera transitions in legacy smoke and golden scenarios, and render the far-object hint state even when fitting is a camera no-op.

Issue: #82
User-Visible: no
2026-08-30 18:53:10 +03:00
Matysh a945ca473b test: wait for settled camera in docs capture
Issue: #82
User-Visible: no
2026-08-30 18:53:10 +03:00
Matysh c465eae821 feat: add smooth viewport zoom transitions
Issue: #82
User-Visible: yes
2026-08-30 18:52:54 +03:00
Matysh 2e30daa399 test: include device history icons in demo harness
Issue: #74
User-Visible: no
2026-08-30 16:39:06 +03:00
Matysh a6b0850a0c test: update device alignment guide fixture
Issue: #74
User-Visible: no
2026-08-30 16:24:48 +03:00
Matyshandclaude[bot] fc63f3bf36 test: align device drag regression smokes
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
Matyshandclaude[bot] bdf81fad58 feat: add device position undo history
Issue: #74
User-Visible: yes
2026-08-30 13:16:27 +00:00
Matysh cd9bd54801 test: accept 200 percent help baselines
Accept the two reviewed Linux DPR 2 help frames and refresh the two
documentation images changed by the rebased dev bundle.

Issue: #86
User-Visible: no
Release: v1.70.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33308795628
2026-08-30 14:49:33 +03:00
Matysh 981b6b25e8 test: add reviewed 200 percent help goldens
Capture the general-settings help surface at 390 CSS pixels and DPR 2 in
both themes, assert its viewport contract, and teach the golden runner to
select a renderer scale per scenario.

Issue: #86
User-Visible: no
2026-08-30 14:49:27 +03:00
Matysh 74ec0199fa test: prove settings help at 200 percent zoom
Exercise the effective Chromium renderer contract for 200% browser zoom and
assert that the trigger and tooltip stay visible, the dialog does not gain
horizontal overflow, and opening help leaves stage geometry unchanged.

Issue: #86
User-Visible: no
2026-08-30 14:49:19 +03:00
Matysh 244271835f test: cover cold onboarding settings help
Exercise the real lazy onboarding runtime, verify all five space help controls,
and prove that opening help neither mutates the draft nor eagerly loads the
editor runtime.

Issue: #86
User-Visible: no
2026-08-30 14:49:08 +03:00
Matysh 26304c8ce2 test: accept reviewed settings help goldens
Accept the six intentional settings-help layout changes from the complete Linux candidate and the two pending furniture-transform scenarios already merged for #383. The remaining 137 baselines stay unchanged.

Issue: #86
User-Visible: no
Release: v1.70.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33305056892
2026-08-30 14:49:08 +03:00
Matysh 30c15a070b feat: add critical settings help content
Add the agreed Party 1 help controls to general, space, marker and device-catalog settings in all four locales, including cold onboarding parity and regression coverage.

Issue: #86
User-Visible: yes
2026-08-30 14:48:56 +03:00
Codex 8d431d6ddf feat: discovery filters become visible, explained and previewable (#44)
Light grouping and the excluded-integrations list move from hidden keys
to a Discovery-filters section on the catalog's Available tab: a toggle
(unset = on, the legacy behaviour), searchable integration chips with a
Restore-recommended reset (defaults stored as key absence), and
appear/disappear counters computed by diffing the REAL
seedHiddenBindings/buildDevices outputs — no second copy of the filter.
Saving writes settings once over the ordinary expected_rev path. Every
excluded candidate now names its integration in the catalog. Room
climate follows the same user exclusions through the single
effectiveExcludedIntegrations resolver (spec H2); explicit climate
opt-in stays stronger. The field registry passports both keys as
current supported settings.

User-Visible: yes
Issue: #44
2026-08-30 14:03:35 +03:00
Sergey Matyunin 686557c5cf feat: add smooth furniture transforms
Issue: #383
User-Visible: yes
2026-08-30 11:56:35 +03:00
Codex e561e5fc5d fix: drop the unreachable virtual-radio guard, keep honest evidence (#385 r2-M1)
An already-checked radio input fires no change event, so the same-binding
guard on the virtual branch was dead code and its smoke assert vacuous.
Removed both; a comment documents why the reset there is always
legitimate. The candidate-list guard (the reachable path) stays tested.

User-Visible: no
Issue: #385
2026-08-30 11:44:57 +03:00
Codexandclaude[bot] 223f499e37 fix: audit-lows batch from the v1.69.0 audit (#385)
(a) a same-binding click in the marker dialog is a no-op: the value
source and badge reset only on an actual change of binding (#378 §1.6) —
both the candidate list and the virtual radio.
(b) rewriteMarkerControlReferences no longer plants value_badge /
value_source keys as undefined on markers that never had them.
(v) the expensive release diff proof (2 git-show per src file) runs only
for commits the SAME shared predicate classifies as release — both
disjuncts, including the Release: trailer.
(g) the paired neutralisation formats in space export are documented in
place and pinned by a combined badge+value_source pytest.

User-Visible: yes
Issue: #385
2026-08-30 08:24:40 +00:00
Codex 1613339463 fix: hidden architecture no longer widens the fit: house frame (#384)
Wall bodies, extras and zero walls vote in the tight frame only while
show_borders renders them — mirroring the hideOpenings guard for opening
symbols. needsCanonicalWallGeometry returns to its pre-#373 form: the
union is no longer forced for extras-only plans just for the frame.

User-Visible: yes
Issue: #384
2026-08-30 10:53:14 +03:00
Sergey Matyuninandclaude[bot] ea7803230a feat: add no-op marker tap action
Issue: #381
User-Visible: yes
2026-08-30 07:48:16 +00:00
Sergey Matyunin 9c162c0926 fix: preload each measured editor card
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (blend) (push) Failing after 33m7s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (large-house) (push) Failing after 38m37s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (isometric) (push) Failing after 47m35s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (overlay) (push) Failing after 57m39s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (space-default) (push) Failing after 21m38s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (plan-snap) (push) Failing after 33m1s
Полные бенчмарки производительности / Бенчмарки рендера и геометрии (space-glow) (push) Failing after 24m36s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 7m31s
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 1m6s
Проверка (CI) / Классификация изменённых файлов (push) Successful in 22s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 54s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 20s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 16s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 9m57s
Проверка (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
Issue: #380
User-Visible: no
2026-08-30 00:55:01 +03:00
Sergey Matyunin 285688de47 fix: support stable performance baselines
Issue: #380
User-Visible: no
2026-08-30 00:45:31 +03:00
Sergey Matyunin 5f6ee65768 test: accept explicit value source golden
Reviewed by Claude in CODE-REVIEW-378-r2 against the complete Linux candidate. Exactly the new 42 percent value-face frame is accepted; 142 existing baselines retain their reviewed hashes.

Issue: #378
User-Visible: no
Release: v1.69.0-beta.5
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33271690654
2026-08-29 23:07:07 +03:00
Sergey Matyunin dbbe94ae08 Add golden proof for explicit value source
Issue: #378
User-Visible: no
2026-08-29 22:45:23 +03:00
Sergey Matyunin 591f8f6ac9 Add selectable value face sources
Issue: #378
User-Visible: yes
2026-08-29 22:20:18 +03:00
Codex 2e32cbcb38 fix: small honesty batch from the beta.4 audit (#376)
(а) title: null gets the same compact frame as title: '' — YAML 'title:'
with no value parses as null, the owner's decision makes them synonyms.
(б) the guides state that room labels are inert in the Background editor.
(г) furniture strokes skip the flat-camera compensation in the labs iso
projection, tracking ordinary decor there.
(д) TESTING.md notes the light_pools opt-in for static room cards.
(е) the space-card dispose gate mirrors the strict === true render gate.

User-Visible: yes
Issue: #376
2026-08-29 21:54:29 +03:00
Codex 1b1c1c1d99 test: pin the persist debounce window in the #377 smoke
User-Visible: no
Issue: #377
2026-08-29 21:39:09 +03:00
Codex 10a1a26612 feat: persist the Background editor's default style with the plan (#377)
settings.decor_default_style (all fields optional, validated) seeds
_decorStyle once from the first config that arrives; every UI change of
the session default flows through one runtime method with a 1s debounce
and the ordinary serialized expected_rev write path. The built-in default
is stored as the absence of the key; a partial or garbage key falls back
per-field. decorStyleFromSettings/decorStyleToSettings are the single
snake_case<->camelCase conversion point.

User-Visible: yes
Issue: #377
2026-08-29 21:39:08 +03:00
Sergey Matyunin 0d33691fc4 feat: add tight house framing to space card
Issue: #373
User-Visible: yes
2026-08-29 21:15:21 +03:00
Sergey Matyunin f5a49718a0 test: separate Glow performance contracts
Issue: #374
User-Visible: no
2026-08-29 15:03:12 +03:00
Sergey Matyunin 6e3d08eda7 docs: add static Glow smoke commands
Issue: #374
User-Visible: no
2026-08-29 14:55:02 +03:00
Sergey Matyunin 0dfc74244b feat: add opt-in Glow to space card
Issue: #374
User-Visible: yes
2026-08-29 14:46:52 +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 2bb7dfca5f test: cover compact space card surfaces
Issue: #372
User-Visible: no
2026-08-29 13:25:42 +03:00
Sergey Matyunin 3c733c390c feat: compact empty-title space card
Issue: #372
User-Visible: yes
2026-08-29 13:18:57 +03:00
Sergey Matyunin 5ba0d9e1b7 test: accept reviewed device shortcut frames
Issue: #363
User-Visible: no
Release: v1.69.0-beta.3
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33245527914
2026-08-29 12:47:03 +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 e8916c7131 feat: restore direct device add shortcut
Issue: #363
User-Visible: yes
2026-08-29 12:47:02 +03:00
Sergey Matyunin ae6486de7a test: model primary decor pointer explicitly
Issue: #360
User-Visible: no
2026-08-29 11:54:30 +03:00
Sergey Matyunin 577e654e59 test: accept decor default color golden frames
Issue: #360
User-Visible: no
Release: v1.69.0-beta.3
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33243321606
2026-08-29 11:48:50 +03:00
Sergey Matyunin 822c8000a2 feat: expose decor default color in main toolbar
Issue: #360
User-Visible: yes
2026-08-29 11:48:50 +03:00
Codex 2c984d8f9d fix: Shift listeners die with every palette exit, not only placement (#369 r2-H1)
The r2 reviewer proved two real exits leaked the window keydown/keyup
listeners of the furniture preview — Escape (the card closes the palette
by direct assignment, bypassing the runtime paths) and disconnectedCallback
(only _clearFurniturePreview ran). The arrow-field listener pins the whole
editor runtime and, through it, the card: the exact leak class this
disconnectedCallback already names two cases above. Both sites now call
_furnShiftDetach alongside the preview cleanup, the smoke gained the
Escape regression (re-arm attaches again, Escape closes the palette AND
brings removes level with adds), and the idempotent double detach in
_furnPlace (r2 Low) is gone.

Issue: #369
User-Visible: no
2026-08-29 11:30:11 +03:00
Codex 8ee1c91fff 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
2026-08-29 11:29:42 +03:00
Sergey Matyuninandclaude[bot] cc209b97d1 test: accept furniture stroke golden baselines
Reviewed the full Linux candidate for #361. Exactly four furniture-bearing scenarios are accepted; the other 138 baselines remain byte-identical.

Issue: #361
User-Visible: no
Release: v1.69.0-beta.4
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33240556186
2026-08-29 07:55:23 +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 7c45372c32 fix: guard dismissal honesty, one threshold source, EXIF proven (#39 r1)
r1-M1: dismissal (Escape/scrim/Cancel) while the reduce or keep-original
flow is executing no longer races the decision — hp-close is ignored while
busy, and every flow re-checks it still owns the guard before applying, so
a force-cleared dialog can never silently install its stale result. The
smoke now drives both: hp-close during a hanging decode leaves the busy
dialog up, and a force-cleared guard ends with clean staging, no toast, no
planFile. A new registry mutant removes the busy gate and is killed.

r1-M2: the hard-dialog text takes its limit from the imported
HARD_DIMENSION instead of a literal — recalibration stays a one-file
change, as the spec promises.

r1-M3: AC8 is now proven end to end, not plausible: the smoke splices a
real EXIF APP1 (orientation 6) into a canvas-encoded 8200×4100 JPEG,
asserts the header probe reads the unrotated SOF, that the decode call
carries imageOrientation:'from-image' (captured on the hook), and that the
reduced copy comes out portrait 2048×4096. TESTING.md names the scenario.

Issue: #39
User-Visible: no
2026-08-29 10:13:09 +03: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 Matyuninandclaude[bot] 5d37438e11 fix: make devices inert in the Background editor
Issue: #362
User-Visible: yes
2026-08-29 06:39:28 +00:00
Matysh fd762fa744 fix: restore reviewed furniture preview tree
The code-review worker published its report from a stale local snapshot and unintentionally reverted the already reviewed implementation artifacts. Restore every affected path exactly to the reviewed 84bdc7ef tree while retaining CODE-REVIEW-359-r1.md.

Issue: #359
User-Visible: no
2026-08-29 00:51:43 +03:00
claude[bot] bb2919f8c0 docs: review document for #359
Issue: #359
User-Visible: no
2026-08-28 21:49:12 +00:00