Sergey Matyunin
b9db5d4750
fix: close #296 review gaps
...
Issue: #296
User-Visible: yes
2026-08-24 22:50:00 +03:00
Sergey Matyunin and claude[bot]
89ac96a8af
fix: reconcile hidden walls during Optimize
...
Issue: #296
User-Visible: yes
2026-08-24 19:10:27 +00:00
Sergey Matyunin
4ccf4a3ccc
fix: enforce exact lattice coordinates
...
Issue: #291
User-Visible: yes
2026-08-24 17:13:21 +03:00
Sergey Matyunin
07bd1a6781
fix: reconcile outer walls before resize
...
Issue: #281
User-Visible: yes
2026-08-24 10:43:33 +03:00
Sergey Matyunin
38ea8a9b9e
fix: validate optimize opening rehosts
...
Issue: #280
User-Visible: yes
2026-08-24 10:33:05 +03:00
Matysh
a952f5fd07
feat(api): let config/get and layout/get return less
...
Issue: #256
User-Visible: no
2026-08-23 10:22:51 +03:00
Sergey Matyunin
120b491eba
test: require schema-valid Optimize fixture
...
Issue: #248
User-Visible: no
2026-08-23 01:24:49 +03:00
Sergey Matyunin
cbdd5a7e73
fix: keep Optimize idempotent across storage reload
...
Issue: #248
User-Visible: yes
2026-08-23 01:13:27 +03:00
Sergey Matyunin
6a151d1ead
fix: preserve markers when deleting final space
...
Issue: #244
User-Visible: yes
2026-08-23 00:35:48 +03:00
Sergey Matyunin
f6f877e393
fix(spaces): repair orphaned plan references
...
Issue: #244
User-Visible: yes
2026-08-23 00:34:55 +03:00
Sergey Matyunin
4a798e3e13
fix: canonicalize persisted geometry
...
Issue: #224
User-Visible: yes
2026-08-22 14:47:38 +03:00
Codex
2935c293e1
fix: reject absolute urls in the content resolver, register the mutants
...
Review CODE-REVIEW-225-r1.
M1: urlsplit(url).path was trusted even when the url carried a scheme or an
authority, so "https://evil.example/houseplan_files/files/m1/doc.pdf "
resolved onto a local file while _looks_internal kept calling it external —
the mirror image of the inconsistency this resolver exists to prevent. Only a
same-document reference is resolved by its path now.
M2: the three mutants the spec described are registered in
scripts/mutation-gate.mjs instead of living as a one-off manual run. The
traversal entry drops both structural checks at once on purpose: taken one at
a time the defence is layered (sanitize_marker_id turns ".." into "misc") and
the mutant would be equivalent — established by running it.
Issue: #225
User-Visible: no
2026-08-20 22:00:22 +03:00
Codex
4a84734b18
fix: resolve internal content urls by path, not by string
...
A backup holding a PDF attachment could not be imported back: legacy links
carry a cache-buster (".../files/m1/doc.pdf?v=1783170649"), and the resolver
compared the raw tail with its sanitized form, so the query made the name
differ from itself. The reference then read as internal by prefix and
non-canonical by name, which is exactly the combination _content_state must
refuse — every such document failed with invalid_content.
Parse the url as a url: the path addresses the file, the query and the
fragment address the transfer. Path segments keep doing the guarding, so
dropping the query cannot widen what a segment is allowed to be.
Issue: #225
User-Visible: yes
2026-08-20 22:00:22 +03:00
Sergey Matyunin
56e01148f8
fix: resume vacuum trails after short stops
...
Issue: #205
User-Visible: yes
2026-08-19 20:55:38 +03:00
Sergey Matyunin
57ba75b9da
fix: keep jamb margin on partition openings
...
Issue: #186
User-Visible: yes
2026-08-19 15:43:23 +03:00
Sergey Matyunin
3fe0f8c443
fix: address partition opening review regressions
...
Issue: #132
User-Visible: yes
2026-08-19 01:34:51 +03:00
Sergey Matyunin
9f77e3e932
feat: support openings in independent walls
...
Issue: #132
User-Visible: yes
2026-08-19 01:11:55 +03:00
Sergey Matyunin
8086399aa6
feat: select exact toggle entity
...
Issue: #178
User-Visible: yes
2026-08-18 21:31:04 +03:00
Sergey Matyunin
c9a00b2a37
feat: add open passage openings
...
Validate / docs (push) Failing after 20s
Validate / provenance (push) Successful in 54s
Validate / hacs (push) Failing after 15s
Validate / process-gate (push) Failing after 50s
Validate / changes (push) Successful in 46s
Validate / hassfest (push) Failing after 14s
Validate / frontend (push) Successful in 5m54s
Validate / backend (push) Failing after 8m1s
Validate / smoke (push) Failing after 4m25s
Validate / golden (push) Failing after 4m26s
Validate / performance_smoke (push) Failing after 8m39s
Issue: #157
User-Visible: yes
2026-08-17 16:45:41 +03:00
Sergey Matyunin
a1b8861eff
fix: preserve plan-only room label scale
...
Issue: #167
User-Visible: yes
2026-08-17 13:16:04 +03:00
Sergey Matyunin
b369eb5dcd
test: preserve ordinary space layout scope
...
Issue: #167
User-Visible: no
2026-08-17 12:34:45 +03:00
Sergey Matyunin
7f397a6875
feat: add plan-only space export
...
Issue: #167
User-Visible: yes
2026-08-17 12:33:52 +03:00
Sergey Matyunin
f2fcf0d594
Release v1.64.0-beta.2 candidate
...
Validate / changes (push) Successful in 40s
Validate / provenance (push) Successful in 46s
Validate / process-gate (push) Failing after 45s
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 8m16s
Validate / backend (push) Failing after 8m22s
Validate / smoke (push) Failing after 3m27s
Validate / golden (push) Failing after 9m42s
Validate / performance_smoke (push) Failing after 13m13s
Issue: #146
User-Visible: yes
2026-08-14 18:14:02 +03:00
Sergey Matyunin
debb13baa2
feat: add four-phase sun background
...
Issue: #146
User-Visible: yes
2026-08-14 17:17:25 +03:00
Matysh
e6366b6548
fix: load virtual_lights by path so offline collection survives
...
The file declared itself pure but imported the module through the package, and
the package __init__ unconditionally imports homeassistant. Without homeassistant
installed pytest did not skip the file — it stopped collecting the whole
tests_backend directory, taking the previously working pure suite down with it.
test_validation.py had already established the by-path pattern; virtual_lights.py
imports nothing beyond the standard library, so it loads cleanly.
The async tests also dropped their pytest-asyncio dependency in favour of
asyncio.run: the offline environment does not carry the plugin, and without it
the two tests failed as unsupported async defs. The offline gate has to be green,
or nobody runs it.
Verified in both environments: pytest+voluptuous only — 129 passed where
collection previously stopped dead; with pytest-asyncio as in CI — 129 passed.
Issue: #135
User-Visible: no
2026-08-14 10:10:34 +03:00
Sergey Matyunin
1079cdfab2
feat: add persistent virtual light toggles
...
Issue: #107
User-Visible: yes
2026-08-14 03:32:53 +03:00
Matysh
661eb784fb
Fix beta.8 validation regressions
...
Issue: #75
Issue: #95
Issue: #98
User-Visible: yes
2026-08-12 19:38:34 +03:00
Matysh
9e74051652
Release v1.62.0-beta.8 candidate
...
Issue: #75
Issue: #76
Issue: #95
User-Visible: yes
2026-08-12 19:18:54 +03:00
Matysh
c41231a7ba
Release v1.62.0-beta.3 candidate
2026-08-12 02:33:54 +03:00
Matysh
554d2e6544
Release v1.62.0-beta.2 candidate
2026-08-11 22:12:08 +03:00
Matysh
446f33ed31
Release v1.62.0-beta.1 candidate
2026-08-11 19:15:21 +03:00
Matysh
f8f1718ad2
Release v1.61.0-beta.5 candidate
2026-08-10 18:01:16 +03:00
Matysh
1ed281b0dd
Release v1.61.0-beta.4 candidate
2026-08-10 14:32:20 +03:00
Matysh
cd55a8e897
Release v1.61.0-beta.3 candidate
2026-08-10 09:44:31 +03:00
Matysh
fb382bfa11
Release v1.61.0-beta.2 candidate
2026-08-10 00:24:42 +03:00
Matysh
112c260314
Release v1.61.0-beta.1
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
2026-08-09 21:51:33 +03:00
Matysh
e177c14603
v1.60.3-beta.1: harden rendering and QA tooling
2026-08-08 21:33:09 +03:00
Matysh
2a8302f4d6
v1.60.2-beta.3: unify boundaries and device presentation
2026-08-08 15:46:07 +03:00
Matysh
d48d220a8c
v1.60.2-beta.1: add persistent physical geometry
2026-08-07 22:02:41 +03:00
Matysh
6db9eb0a66
test: use access token for non-admin websocket
Validate / hacs (push) Failing after 9s
Validate / hassfest (push) Failing after 8s
Validate / frontend (push) Successful in 4m33s
Validate / backend (push) Failing after 10m31s
Validate / smoke (push) Failing after 20m7s
2026-08-07 13:10:27 +03:00
Matysh
3028122016
v1.60.0: harden background editing and device state
2026-08-07 13:02:46 +03:00
Matysh
29fb9deb43
v1.60.0-beta.1: unify background editing and device deletion
2026-08-07 11:14:20 +03:00
Matysh
e0f6746d7f
v1.59.0-rc.1: optimize plans and polish editor feedback
Validate / hacs (push) Failing after 7s
Validate / hassfest (push) Failing after 6s
Validate / frontend (push) Successful in 3m12s
Validate / backend (push) Failing after 8m53s
Validate / smoke (push) Failing after 13m51s
2026-08-06 10:14:52 +03:00
Matysh
d2bec266ed
v1.59.0-beta.10: unify device visuals and wall refinements
Validate / hacs (push) Failing after 6s
Validate / hassfest (push) Failing after 6s
Validate / frontend (push) Successful in 3m19s
Validate / smoke (push) Failing after 1m12s
Validate / backend (push) Failing after 7m45s
2026-08-05 23:38:01 +03:00
Matysh and Cursor
7333223a55
v1.59.0-beta.7: audit fixes, wall fill under hatch
...
Atomic wall intervals, open_spans in resize/Undo/Split/Delete, backend
open_spans schema, warm-nav ownership, smoke hygiene.
Wall fill colour paints under the hatch (both, not either/or).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-05 17:52:26 +03:00
Matysh and Cursor
ee87d3d00e
v1.59.0-beta.5: wall-thickness redesign, draw thickness, plan on new space
...
Seamless ±½ wall rings with inner floor/area/sun; Draw toolbar thickness
(default 15 cm); new spaces open Plan; audit hygiene from beta.4 recheck.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-05 15:13:19 +03:00
Matysh and Cursor
a7d956a072
v1.59.0-beta.4: wall thickness + white editor sheet with backdrop
...
Validate / backend (push) Failing after 9m24s
Validate / smoke (push) Failing after 22m47s
Validate / hassfest (push) Failing after 8s
Validate / hacs (push) Failing after 9s
Validate / frontend (push) Successful in 2m58s
Plan-editor wall thickness (docs/WALL-THICKNESS.md) and keep the white drawing sheet under the grid in editors even when a backdrop image is loaded.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-05 12:27:09 +03:00
Matysh and Cursor
31cd4142ac
feat(dev): furniture, hide layers, styling hooks, wall-thickness spec
...
Ship the unreleased 1.59 batch on dev: top-view furniture in the decor
layer, space toggles to hide decor/openings, stable card-mod data-*
hooks, HA entity value formatting, and the approved wall-thickness
spec (docs only — not implemented yet).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-05 11:41:00 +03:00
Cursor Agent and Matysh
e6579f1e55
fix(dev): audit P0/P3 — write policy, README diff, validation
...
- Default admin_only on; config/get returns can_write; card editors follow it
and fail closed without hass.user (P0-4).
- README EN/RU differentiation vs GUI draw cards / easy-floorplan (P0-3).
- Tighten marker binding, ripple_color, decor extents, space id (P3-4).
- quality_scale test path + deprecated card tap_action note (P3-5).
- Demo hass.user + can_write; unique marker id in upload overwrite test.
Co-authored-by: Matysh <Matysh@users.noreply.github.com >
2026-08-05 08:10:51 +00:00
Matysh
0ee80a6a52
v1.59.0-beta.2: live text labels, text block frame, warm-memo owners
Validate / hacs (push) Failing after 7s
Validate / hassfest (push) Failing after 7s
Validate / frontend (push) Successful in 2m29s
Validate / backend (push) Failing after 8m30s
Validate / smoke (push) Failing after 13m24s
2026-08-04 23:44:59 +03:00