Codex
398281a93f
fix: the summary panel's first paint no longer freezes or claims the sources are gone
...
Two halves of the same first paint. The panel showed «Source unavailable»
in every row until the lazy metrics chunk arrived, because value() could
not tell "not loaded yet" from "source is dead"; and metrics() ran inside
render, walking the HA registry and unioning the clean floor of every
space synchronously — 11 s on the large-house fixture.
- totalCleanFloorAreaM2 computes the space's masonry and junction
topology once per SPACE and hands them to innerContourForRoom, which
otherwise unions the whole space again for every room: 11 045 → 1 488 ms
on that fixture, same 306.3 m². The card has always done this through
its own _innerContour cache; the panel now does the same.
- Aggregates leave the render path: the first frame paints skeletons and
the work starts right after the frame is shown (timeout → rAF →
timeout, never requestIdleCallback, which under load would leave the
skeleton up for seconds). Stale memo keeps the previous number on
screen instead of flashing back to a skeleton.
- valueState() separates pending from unavailable; a pending row keeps
the same plate, grid and height and carries a pulsing rectangle the
height of the line, replaced by the value with a short fade. Reduced
motion keeps the rectangle and drops the pulse.
- Panel enter/exit animation (#505 , 190 ms) is now actually visible —
the main thread is free — and the smoke witnesses it.
Mutants: summary-first-paint-shows-unavailable, summary-metrics-block-first-frame,
summary-area-recomputes-walls-per-room, summary-stale-metric-falls-back-to-skeleton.
Issue: #509
User-Visible: yes
2026-09-10 11:24:10 +03:00
..
2026-09-09 03:52:23 +03:00
2026-09-09 03:52:23 +03:00
2026-09-08 21:26:29 +03:00
2026-08-29 21:15:21 +03:00
2026-09-09 10:21:48 +03:00
2026-08-12 19:18:54 +03:00
2026-09-06 17:52:05 +00:00
2026-08-28 05:40:28 +00:00
2026-09-08 21:26:29 +03:00
2026-08-29 10:13:09 +03:00
2026-09-08 19:51:04 +03:00
2026-08-23 00:34:55 +03:00
2026-09-04 10:24:25 +03:00
2026-09-09 18:53:38 +03:00
2026-09-06 17:52:05 +00:00
2026-08-19 03:46:38 +03:00
2026-08-09 21:51:33 +03:00
2026-09-01 15:08:22 +00:00
2026-09-08 18:49:36 +03:00
2026-09-06 17:38:47 +03:00
2026-08-31 00:46:54 +03:00
2026-08-14 17:17:25 +03:00
2026-09-03 15:23:40 +03:00
2026-09-08 21:26:29 +03:00
2026-09-02 19:18:28 +03:00
2026-08-20 11:00:22 +03:00
2026-08-27 23:17:53 +00:00
2026-08-20 11:00:22 +03:00
2026-08-30 13:16:27 +00:00
2026-08-27 22:41:46 +03:00
2026-08-29 22:20:18 +03:00
2026-08-19 22:37:25 +03:00
2026-08-30 07:48:16 +00:00
2026-08-29 22:20:18 +03:00
2026-08-16 22:35:54 +03:00
2026-08-30 14:03:35 +03:00
2026-09-06 17:52:05 +00:00
2026-09-06 17:38:47 +03:00
2026-09-06 07:06:54 +03:00
2026-08-09 08:34:05 +03:00
2026-09-08 21:26:29 +03:00
2026-08-28 11:58:46 +03:00
2026-08-11 19:15:21 +03:00
2026-08-11 19:15:21 +03:00
2026-09-06 16:10:46 +03:00
2026-08-28 18:52:03 +03:00
2026-09-06 16:10:46 +03:00
2026-09-06 16:10:46 +03:00
2026-09-06 16:10:46 +03:00
2026-09-04 08:58:48 +03:00
2026-09-06 16:10:46 +03:00
2026-08-11 02:49:42 +03:00
2026-08-29 18:09:53 +00:00
2026-08-25 12:49:41 +03:00
2026-08-19 02:12:37 +03:00
2026-08-12 21:49:29 +03:00
2026-09-09 18:53:38 +03:00
2026-09-09 18:53:38 +03:00
2026-09-08 21:26:29 +03:00
2026-09-08 21:26:29 +03:00
2026-09-04 22:04:03 +03:00
2026-09-06 12:56:13 +00:00
2026-09-08 21:26:29 +03:00
2026-08-20 11:00:22 +03:00
2026-09-09 19:49:18 +00:00
2026-08-20 08:42:34 +03:00
2026-09-06 00:48:54 +03:00
2026-09-05 11:10:44 +03:00
2026-08-28 11:58:46 +03:00
2026-08-20 01:38:01 +03:00
2026-08-08 15:46:07 +03:00
2026-09-04 22:03:45 +03:00
2026-09-06 07:06:54 +03:00
2026-09-06 11:23:51 +00:00
2026-09-06 07:06:54 +03:00
2026-09-06 17:38:47 +03:00
2026-09-06 07:06:54 +03:00
2026-09-04 23:54:09 +03:00
2026-09-04 16:31:06 +03:00
2026-08-11 02:49:42 +03:00
2026-09-05 12:10:26 +03:00
2026-09-04 22:04:03 +03:00
2026-09-04 22:04:17 +03:00
2026-09-04 22:04:17 +03:00
2026-09-08 10:44:13 +03:00
2026-09-09 03:53:33 +03:00
2026-08-18 21:31:04 +03:00
2026-08-30 16:11:35 +00:00
2026-09-06 17:38:47 +03:00
2026-08-08 15:46:07 +03:00
2026-08-22 12:24:49 +03:00
2026-08-19 15:43:23 +03:00
2026-09-06 07:48:03 +03:00
2026-08-19 15:43:23 +03:00
2026-09-06 17:38:47 +03:00
2026-09-06 17:38:47 +03:00
2026-09-05 09:25:08 +03:00
2026-09-06 17:38:47 +03:00
2026-09-06 17:38:47 +03:00
2026-08-20 08:42:34 +03:00
2026-09-04 22:04:17 +03:00
2026-09-09 03:52:23 +03:00
2026-09-09 03:54:02 +03:00
2026-09-09 03:51:25 +03:00
2026-09-09 03:52:23 +03:00
2026-09-09 03:52:23 +03:00
2026-09-09 03:54:02 +03:00
2026-09-04 22:03:45 +03:00
2026-09-04 22:04:03 +03:00
2026-09-05 01:46:26 +03:00
2026-08-24 22:59:33 +03:00
2026-09-06 17:38:47 +03:00
2026-08-28 05:40:28 +00:00
2026-08-26 02:20:57 +03:00
2026-09-04 18:33:03 +03:00
2026-09-06 17:52:05 +00:00
2026-09-08 10:44:49 +03:00
2026-08-07 13:02:46 +03:00
2026-09-03 21:42:57 +00:00
2026-08-11 19:15:21 +03:00
2026-09-03 15:23:40 +03:00
2026-09-08 21:26:29 +03:00
2026-09-05 09:25:08 +03:00
2026-09-03 19:41:55 +03:00
2026-09-08 10:44:13 +03:00
2026-08-29 21:15:21 +03:00
2026-09-06 17:38:47 +03:00
2026-08-19 02:49:39 +03:00
2026-08-21 00:50:15 +03:00
2026-08-25 14:47:04 +03:00
2026-09-08 10:44:13 +03:00
2026-08-26 01:34:20 +03:00
2026-09-08 18:49:36 +03:00
2026-09-09 09:32:36 +03:00
2026-09-09 09:32:36 +03:00
2026-09-09 19:49:18 +00:00
2026-09-09 02:53:36 +03:00
2026-09-09 09:54:14 +03:00
2026-09-09 09:32:36 +03:00
2026-09-08 19:20:39 +03:00
2026-09-10 11:24:10 +03:00
2026-09-09 02:53:36 +03:00
2026-09-09 09:32:36 +03:00
2026-09-10 11:24:10 +03:00
2026-09-10 11:24:10 +03:00
2026-09-09 00:10:16 +03:00
2026-09-09 13:57:53 +03:00
2026-08-30 12:42:31 +03:00
2026-09-02 21:25:30 +03:00
2026-09-09 03:52:23 +03:00
2026-09-03 21:42:57 +00:00
2026-09-03 19:22:55 +00:00
2026-09-03 23:24:08 +03:00
2026-08-29 11:29:42 +03:00
2026-09-09 03:51:25 +03:00
2026-09-05 16:04:54 +03:00
2026-09-04 10:24:25 +03:00
2026-08-14 03:32:53 +03:00
2026-08-11 05:40:32 +03:00
2026-08-26 13:39:52 +03:00
2026-08-22 10:56:38 +03:00
2026-09-06 17:39:54 +03:00
2026-08-27 20:30:07 +03:00
2026-09-06 18:46:50 +03:00
2026-08-28 10:46:27 +00:00
2026-08-28 05:40:28 +00:00
2026-09-06 17:52:05 +00:00
2026-09-06 17:38:47 +03:00
2026-09-05 10:50:19 +03:00
2026-09-06 00:48:54 +03:00
2026-09-04 15:26:06 +03:00
2026-09-04 14:40:09 +03:00
2026-09-05 10:50:19 +03:00