Commit Graph
2863 Commits
Author SHA1 Message Date
Codex 9d6ac98d3a fix: attach a warm summary runtime before the first render (#506)
Every card instance attached its summary-panel runtime through
import().then(), even when the chunk had loaded long ago. The first render
therefore measured a header without summary controls; the controls arrived
a beat later, the stage shrank, the deferred refit opened a `stage-resize`
continuity candidate and the first HA tick paid three extra render passes
(Full Performance: blend stateUpdate1 50 → 130 ms, overlay 217 → 809 ms;
locally 4 performUpdate per tick instead of 1).

summary-runtime-loader.ts separates the summary code from its state: the
loaded factory is cached per page, every host builds its own runtime from
it (no shared preferences, drafts, subscriptions, timers or DOM). A warm
factory yields the runtime synchronously in connectedCallback, before the
first Lit render; a cold mount still pays one lazy import, concurrent cold
mounts share the pending import, a failed import is forgotten so the next
connection retries, and a disconnect cancels the pending attachment of that
connection. SummaryRuntimeSlot owns the per-host lifecycle so the card core
stays under its line ceiling.

Witnesses: loader unit tests (distinct instances, shared pending import,
cancelled attachment, retry after failure); demo/smoke_summary_warm_attach
(warm replacement and cold-key instance on a warm page own the runtime
before the first render, header/stage stable from the first frame, no
stage-resize, one performUpdate per geometry-neutral tick, a real viewport
resize still opens stage-resize); mutant summary-runtime-attaches-after-
first-render. smoke_summary_panel waited for `_summary` as a readiness
proxy; it now waits for the server config load, which stays asynchronous.

Local paired glow benchmarks (4× CPU throttle): blend 159.7 → 49.9 ms and
overlay 326.7 → 120.4 ms at stateUpdate1 with renders 4 → 1; the isometric
load loses the three summary-owned long tasks.

Docs screenshots: all 11 frames decode pixel-identical to the committed
ones; the manifest carries only the new source fingerprint. Initial View
ceiling recentred 299 100 → 299 600 for the +299 B loader.

Issue: #506
User-Visible: yes
2026-09-09 13:57:53 +03:00
claude[bot] 2e502e09a2 docs: review document for #506
Issue: #506
User-Visible: no
2026-09-09 10:02:25 +00:00
Matysh e17cdb5162 docs: specify startup performance regression fix
Issue: #506
User-Visible: no
2026-09-09 12:57:12 +03:00
Matysh d11f95bc40 Release v1.73.0 candidate
Проверка (CI) / Классификация изменённых файлов (push) Successful in 1m0s
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 1m12s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 42s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 42s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 1m5s
Проверка (CI) / Мутанты по диффу (1/3): затронутые свидетели краснеют (push) Failing after 4m21s
Проверка (CI) / Мутанты по диффу (2/3): затронутые свидетели краснеют (push) Failing after 4m0s
Проверка (CI) / Мутанты по диффу (3/3): затронутые свидетели краснеют (push) Failing after 4m1s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 7m16s
Проверка (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
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 5m20s
Promote the eight published v1.73.0 betas without new product behavior. Synchronize version fields and generated bundles; aggregate public release notes from v1.72.0. Main-only workflow mirrors were merged with an identical beta.8 product tree.

Issue: #505
User-Visible: no
Release: v1.73.0
2026-09-09 12:05:08 +03:00
Matysh 6dfcb0e9bb Merge origin/main before v1.73.0 promotion 2026-09-09 11:58:56 +03:00
Matysh 8b07711d27 Release v1.73.0-beta.8: accept reviewed panel-control golden frames
Personally reviewed all 20 diffs from complete Linux capture34323743229: #505 header/control placement and beta version text only. 149 baselines remain untouched,112 exact witnesses. Product and timing guard unchanged; candidate reruns the same50ms search threshold after a single CI timing failure (local p95=17ms).

Issue: #505
User-Visible: no
Release: v1.73.0-beta.8
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/34323743229
v1.73.0-beta.8
2026-09-09 10:35:04 +03:00
Matysh ab71f27298 Release v1.73.0-beta.8 candidate
Accept complete Linux documentation capture 34323466079 after personal review: four expected header/control changes, seven byte-identical witnesses. Unrelated dialog footer dimensions restored. Scope: independently accepted #495, #498 and #505.

Issue: #495
Issue: #498
Issue: #505
User-Visible: no
Release: v1.73.0-beta.8
2026-09-09 10:25:00 +03:00
Matysh 3d2bfe9f6d Keep footer documentation out of the shipped CSS
Move the explanatory comment to TypeScript without changing styles; preserve the existing bundle-budget noise margin. Include independently accepted #498 in the release status.

Issue: #505
Issue: #498
User-Visible: no
2026-09-09 10:21:48 +03:00
Matysh 6fe01ecc1f Prepare v1.73.0-beta.8 and preserve dialog footer targets
Restore the shared footer minimum exposed by the #505 Linux screenshot gate; the focused browser assertion fails before the restoration and passes after it.

Issue: #505
Issue: #495
User-Visible: yes
2026-09-09 10:19:04 +03:00
claude[bot] 7d30a39020 docs: review document for #498
Issue: #498
User-Visible: no
2026-09-09 07:14:55 +00:00
Codexandclaude[bot] 4f040c4c8e fix: exact upload quota, support palette allowlist, bounded SVG reference chains (#498)
Attachment uploads stage the body as `.upload-*` under files_root and then
asked the quota to count that file as stored usage *and* as the incoming
size, so the last file that still fit was refused at the boundary — by
bytes and by count. check_quota/dir_usage now take `exclude` for the
caller's own staged file; other staged files keep counting, so two
concurrent uploads can never both land past the limit.

The support package copied every string key of settings.fill_colors. The
schema stays open for compatibility, but the projection now keeps only the
eleven slots the card defines (SUPPORT_FILL_COLOR_KEYS, pinned to
src/logic.ts DEFAULT_FILL_COLORS by a test); an empty palette is omitted.

The SVG local-reference walk was a recursive DFS: a flat chain of a few
thousand hrefs passed every #436 bound and died with RecursionError, which
the upload view turned into a 500. The walk is iterative and measures the
longest chain through each node (memoised, order-independent); chains
deeper than MAX_SVG_REF_DEPTH = 64 are refused as too_large, cycles stay
invalid_image.

Tests: quota boundaries on the validator and the HA endpoint, a barrier
test for concurrent uploads, palette allowlist and TS parity, reference
chains (plain, hostile id order, cycle) on the validator and the endpoint;
six mutants caught by the standard runner.

Issue: #498
User-Visible: yes
2026-09-09 07:06:20 +00:00
claude[bot] 5f8d40caf0 docs: review document for #498
Issue: #498
User-Visible: no
2026-09-09 07:06:20 +00:00
Codexandclaude[bot] c71f21f3c9 docs: spec #498 r2 — numbered AC, longest-chain reference limit, concurrent quota semantics
Spec review r1: add the AC list with proofs and the perf/touch statement;
measure the SVG reference limit as the longest chain through a node
(memoised), not the stack height of the first traversal, so a hostile id
order cannot cut a long chain into short segments; state that two uploads
checked while both are staged are both refused (conservative), never both
stored.

Issue: #498
User-Visible: no
2026-09-09 07:06:20 +00:00
claude[bot] 5d6f610a7c docs: review document for #498
Issue: #498
User-Visible: no
2026-09-09 07:06:20 +00:00
Codexandclaude[bot] ac478127d5 docs: spec for #498 — exact upload quota, support palette allowlist, bounded SVG reference chains
Issue: #498
User-Visible: no
2026-09-09 07:06:20 +00:00
claude[bot] 2aa6ed21e7 docs: review document for #505
Issue: #505
User-Visible: no
2026-09-09 07:01:42 +00:00
Matysh 7b9af60541 Remove unused summary visibility translations (#505)
Issue: #505
User-Visible: no
2026-09-09 09:54:14 +03:00
claude[bot] f03a9e5ddc docs: review document for #505
Issue: #505
User-Visible: no
2026-09-09 06:48:00 +00:00
Matysh d32dfc9be1 Record unchanged visual evidence after dev integration (#505)
Issue: #505
User-Visible: no
2026-09-09 09:33:28 +03:00
Matysh 2f607a04f1 Record summary panel visual and negative-witness evidence (#505)
Issue: #505
User-Visible: no
2026-09-09 09:32:36 +03:00
Matysh 05778a47c0 Align summary panel with designer prototype (#505)
Issue: #505
User-Visible: yes
2026-09-09 09:32:36 +03:00
claude[bot]andMatysh d23cb267d0 docs: review document for #505
Issue: #505
User-Visible: no
2026-09-09 09:32:23 +03:00
Matysh bb14064b18 docs: address summary panel spec review r1
Issue: #505
User-Visible: no
2026-09-09 09:32:23 +03:00
claude[bot]andMatysh f29b9831a5 docs: review document for #505
Issue: #505
User-Visible: no
2026-09-09 09:32:23 +03:00
Matysh 598e95f4c4 docs: specify summary panel designer parity
Issue: #505
User-Visible: no
2026-09-09 09:32:23 +03:00
claude[bot] 2e387ac1e0 docs: review document for #495
Issue: #495
User-Visible: no
2026-09-09 05:48:32 +00:00
Codex 2946e28352 fix: import result follows the commit; dropped route runs reach the store (#495)
Apply re-validated the preview token after both halves were durable, so a
TTL that lapsed during the write, or an eviction by a newer preview of the
same user, answered "preview expired" for a plan that was already replaced
and withheld both update events. The token is now simply spent after the
commit; validity is decided once, on entry under write_lock.

Route runs dropped by drop_unknown_routes never reached the store unless a
marker happened to be orphaned in the same pass; an idle robot kept them in
memory only and a restart brought them back. The drop now happens under
_refresh_lock, leaves with the orphan transaction or with an immediate
write of its own, and rolls back like #335 when the store refuses.

Tests: HA harness for both apply races and a live config/set route drop,
recorder stubs for the four durability cases; five mutants caught by the
standard runner.

Issue: #495
User-Visible: yes
2026-09-09 08:34:46 +03:00
claude[bot] adbd349920 docs: review document for #495
Issue: #495
User-Visible: no
2026-09-09 05:33:25 +00:00
Codex 70a394d228 docs: spec for #495 — import result follows the commit, dropped route runs reach the store
Issue: #495
User-Visible: no
2026-09-09 08:26:52 +03:00
Sergey Matyunin abbca50ce7 build: prepare v1.73.0-beta.7 candidate
Release: v1.73.0-beta.7
Issue: #437
Issue: #485
Issue: #489
Issue: #490
Issue: #491
Issue: #492
Issue: #493
Issue: #499
User-Visible: no
v1.73.0-beta.7
2026-09-09 07:04:02 +03:00
Sergey Matyunin 7f1cae21cf test: expose resize smoke coordinate diagnostics (#437)
Issue: #437
User-Visible: no
2026-09-09 06:51:55 +03:00
Sergey Matyunin 8e48ba80f6 build: prepare v1.73.0-beta.7 candidate
Release: v1.73.0-beta.7
Issue: #437
Issue: #485
Issue: #489
Issue: #490
Issue: #491
Issue: #492
Issue: #493
Issue: #499
User-Visible: no
2026-09-09 06:45:58 +03:00
Sergey Matyunin 8721d7d911 docs: refresh fixed warm-remount screenshot fingerprint (#437)
Issue: #437
User-Visible: no
2026-09-09 06:45:49 +03:00
Sergey Matyunin 1d072be0a9 fix: freeze warm-remount stage through chrome settle (#437)
Issue: #437
User-Visible: yes
2026-09-09 06:43:16 +03:00
Sergey Matyunin b607ade972 build: prepare v1.73.0-beta.7 candidate
Release: v1.73.0-beta.7
Issue: #437
Issue: #485
Issue: #489
Issue: #490
Issue: #491
Issue: #492
Issue: #493
Issue: #499
User-Visible: no
2026-09-09 06:27:50 +03:00
Sergey Matyunin a56df6eb8e docs: refresh warm-remount screenshot fingerprint (#437)
Issue: #437
User-Visible: no
2026-09-09 06:27:36 +03:00
Sergey Matyunin 590d6b59b6 fix: preserve warm-remount viewport through layout settle (#437)
Issue: #437
User-Visible: yes
2026-09-09 06:24:32 +03:00
Sergey Matyunin 244efed878 ci: persist mutation ledger between rerun attempts (#499)
Release: v1.73.0-beta.7
Issue: #499
User-Visible: no
2026-09-09 05:30:00 +03:00
Sergey Matyunin 7648ea79ce test: accept presence-toggle golden for beta.7 (#485)
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/34298831137
Issue: #437
Issue: #485
Issue: #489
Issue: #490
Issue: #491
Issue: #492
Issue: #493
Issue: #499
User-Visible: no
Release: v1.73.0-beta.7
2026-09-09 04:28:32 +03:00
Sergey Matyunin 931f1d45aa build: refresh v1.73.0-beta.7 candidate after #485
Issue: #437
Issue: #485
Issue: #489
Issue: #490
Issue: #491
Issue: #492
Issue: #493
Issue: #499
User-Visible: no
Release: v1.73.0-beta.7
2026-09-09 04:17:13 +03:00
claude[bot] e77f7b7361 docs: review document for #485
Issue: #485
User-Visible: no
2026-09-09 01:12:38 +00:00
Matysh ca25e91087 test: keep radar bundle ratchet outside gzip noise
Проверка (CI) / Классификация изменённых файлов (push) Successful in 1m36s
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 3m42s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 1m4s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 20s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 20s
Проверка (CI) / Мутанты по диффу (1/3): затронутые свидетели краснеют (push) Failing after 11m19s
Проверка (CI) / Мутанты по диффу (3/3): затронутые свидетели краснеют (push) Failing after 12m16s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 13m34s
Проверка (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
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 9m19s
Проверка (CI) / Мутанты по диффу (2/3): затронутые свидетели краснеют (push) Successful in 1h36m17s
Issue: #485
User-Visible: no
2026-09-09 04:01:00 +03:00
Matysh 3f0b4aeeea test: cover radar radial calibration guard
Issue: #485
User-Visible: no
2026-09-09 03:54:42 +03:00
claude[bot]andMatysh 02289aee44 docs: review document for #485
Issue: #485
User-Visible: no
2026-09-09 03:54:09 +03:00
Matysh f2007326c4 docs: record radar field evidence
Issue: #485
User-Visible: no
2026-09-09 03:54:09 +03:00
Matysh e9fb255a29 fix: close radar review gaps
User-Visible: yes
Issue: #485
2026-09-09 03:54:02 +03:00
claude[bot]andMatysh f911a442c4 docs: review document for #485
Issue: #485
User-Visible: no
2026-09-09 03:53:33 +03:00
Matysh d433b64cf0 fix: keep ordinary marker dialog close synchronous
User-Visible: no
Issue: #485
2026-09-09 03:53:33 +03:00
Matysh 3938caf00a build: integrate radar after dev rebase
User-Visible: no
Issue: #485
2026-09-09 03:52:46 +03:00
Matysh d12488f40d fix: harden presence radar stage one
User-Visible: yes
Issue: #485
2026-09-09 03:52:23 +03:00