Notepad: close the wave-1 items, record what they left behind

Eleven "to be sorted" entries are done. Three that survive are amended
rather than removed: the house panel's chart budget (the range picker
gave its row back), layoutGraph (height is derived now, width is still
guessed), and the dark:-variant scope, which turned out to share a root
with the React Flow colorMode bug. Adds the portal's missing
not-reporting state, and drops the frontend-origin entry the rebuild
settled.
This commit is contained in:
2026-08-23 11:16:50 +02:00
parent f58acfbd43
commit 485b8e9db5
+16 -22
View File
@@ -12,31 +12,16 @@ Deferring because out of scope is fine, but don't mention deferring than.
### To be sorted ### To be sorted
- FEAT/UI: charts (dashboard) should have a slight smoothening option (either influx or in chart; depending what is more "general")
- FEAT/UI: allow assigning individual colors for the traces in a chart
- FEAT/UI time range selector should be drawn at the top right of a chart (same level as the title, such that fewer vertical space is wasted)
- BUG/UI: the size of a node (height) should grow depending on it's (max) number of inputs/ outputs
- BUG/UI: inputs/outputs referencing outside a flow should show similar like the dashboard labels (but with a flow icon instead)
- BUG/UI edges in the brain view should dim a bit slower and fade out further
- BUG/UI: some nodes (when called very frequently) show a slightly flickering shape (which extends/shrinks )
- BUG/UI: the canvas and nodes in the flow UI does not seem to respond to the dark theme when enter (seen in 4ef6995a-36b9-4238-b2cd-b67dc7738c07/flows/appliances)
- BUG/UI: in the portal; the "Failures 24H" does not seem to match the values stated in the overview of the correspondign installation. Check for similar infos
- BUG/UI: when hovering a chart, the hovered data point location does not match the mouse location (seen in 4ef6995a-36b9-4238-b2cd-b67dc7738c07/dashboards/energy)
- CHORE/UI: the house panels are laid out for 1280x800 — twelve columns, twelve - CHORE/UI: the house panels are laid out for 1280x800 — twelve columns, twelve
rows — and that is as much as fits: a chart spends about eighty pixels on its rows. A chart's fixed chrome is now its title line and legend: the range picker
title, range picker and legend whatever height it is given, so two of them moved up onto the title and gave back its row, so the budget is nearer forty
read on that panel and three do not. The temperature history was the one pixels than eighty and a third chart may now fit — worth measuring against the
dropped; `history.climate_*` still answers, so it is a tile away. panel before adding one. The temperature history was the one dropped;
`history.climate_*` still answers, so it is a tile away.
- FEAT/UI: a bar's nested reading is captioned by its port name, which is - FEAT/UI: a bar's nested reading is captioned by its port name, which is
chosen for the graph rather than for somebody reading it across a room. chosen for the graph rather than for somebody reading it across a room.
`Segment` now takes an optional `label`; the house dashboard sets one `Segment` now takes an optional `label`; the house dashboard sets one
(`Solar`), and it shows on the next frontend build. (`Solar`), and it shows on the next frontend build.
- BUG/INFRA: the running `fluksio-frontend` image calls `https://api.localhost`
while `app/.env` says `VITE_API_URL=http://api.localhost` — the image predates
the environment being switched to `local`. Anything served from that bundle
reaches the API only where something terminates TLS for `api.localhost`. The
next frontend build changes the origin, so check how the app is actually
reached before making one.
- BUG/FLOW: **a cancelled request can leave `FlowController._lock` held forever.** - BUG/FLOW: **a cancelled request can leave `FlowController._lock` held forever.**
Seeding nineteen flows over a client that timed out mid-request left the next Seeding nineteen flows over a client that timed out mid-request left the next
@@ -61,6 +46,11 @@ Deferring because out of scope is fine, but don't mention deferring than.
for one seed. It is the slowest thing about standing an installation up, and a for one seed. It is the slowest thing about standing an installation up, and a
`PUT` that could say "published, stopped" in one call would halve it. `PUT` that could say "published, stopped" in one call would halve it.
- CHORE/UI: the portal's aggregate tiles have no not-reporting state. A figure an
installation never sends renders through `?? 0`, so a missing field reads as a confident
zero rather than as unknown — which is how a deleted `failures_24h` showed as "0 failures"
unnoticed. The per-card half is one line; Home sums across installations and has nowhere to
say "3 of 4 reporting", so the two want doing together.
- FEAT/SEC: `locked` is a read-only surface, not a permission — the server accepts a publish - FEAT/SEC: `locked` is a read-only surface, not a permission — the server accepts a publish
from a panel whose dashboard says locked. Making it real means carrying the flag into from a panel whose dashboard says locked. Making it real means carrying the flag into
`_panel_may`. `_panel_may`.
@@ -68,6 +58,11 @@ Deferring because out of scope is fine, but don't mention deferring than.
matches `dark:` variant utilities, because those compile to `&:is(.dark *)` and `<html>` matches `dark:` variant utilities, because those compile to `&:is(.dark *)` and `<html>`
always carries a theme class. Cosmetic (a few faint shadcn backgrounds); fixing it properly always carries a theme class. Cosmetic (a few faint shadcn backgrounds); fixing it properly
needs a theme-scope mechanism CSS ancestor selectors cannot express today. needs a theme-scope mechanism CSS ancestor selectors cannot express today.
Shares a root with a bug fixed since: the token scopes are keyed on the bare class names
`light`/`dark`, so React Flow's own `colorMode` class silently re-themed an entire canvas
to light until the prop was passed explicitly. Namespacing them (`.theme-light` /
`.theme-dark`) would sit under both. Two repos — the token blocks are a byte-identical
duplication contract with `index/src/index.css` — plus `useDashboardTheme`.
- CHORE/UI: the lock notice is on `PanelSurface` only, so `/dashboards/{name}` in read mode - CHORE/UI: the lock notice is on `PanelSurface` only, so `/dashboards/{name}` in read mode
shows disabled controls without the pill. shows disabled controls without the pill.
- CHORE/DOC: the docs call a cron `inject` node "a node publishing on a schedule". The node - CHORE/DOC: the docs call a cron `inject` node "a node publishing on a schedule". The node
@@ -170,7 +165,6 @@ Deferring because out of scope is fine, but don't mention deferring than.
`make test-backend` then fails at the coverage HTML step *after* every test has passed — `make test-backend` then fails at the coverage HTML step *after* every test has passed —
which reads like a test failure and is not one. which reads like a test failure and is not one.
(tests/flows.spec.ts, tests/admin.spec.ts)". There are nine. (tests/flows.spec.ts, tests/admin.spec.ts)". There are nine.
- BUG/UI in the brain view: make the chasing circle animation running entirely in the gap between the ring and the node (using the full width)
- CHORE/UI: the edge popover shows the same value twice — `MessageSparkline` falls through to a collapsed `ValuePreview` for a non-numeric value, and `EdgeInspector` then renders its own `ValuePreview defaultOpen` below it. Cosmetic; one of the two is redundant. - CHORE/UI: the edge popover shows the same value twice — `MessageSparkline` falls through to a collapsed `ValuePreview` for a non-numeric value, and `EdgeInspector` then renders its own `ValuePreview defaultOpen` below it. Cosmetic; one of the two is redundant.
- FEAT/UI: a settings-and-inputs overview page, so what every node of an installation is configured with can be read and searched in one place rather than one panel at a time. - FEAT/UI: a settings-and-inputs overview page, so what every node of an installation is configured with can be read and searched in one place rather than one panel at a time.
- FEAT/UI: an input endpoint opens the flow panel, which is right for editing but not for reading one value. A panel of its own — the declaration, the current value, its history — is what clicking a label wants to give. - FEAT/UI: an input endpoint opens the flow panel, which is right for editing but not for reading one value. A panel of its own — the declaration, the current value, its history — is what clicking a label wants to give.
@@ -182,7 +176,7 @@ Deferring because out of scope is fine, but don't mention deferring than.
- INFRA: merge the philosophy statement at the beginning of vision.md into the rest of the document. Dissolve the decision dates and fold the decisions into a clean structure - INFRA: merge the philosophy statement at the beginning of vision.md into the rest of the document. Dissolve the decision dates and fold the decisions into a clean structure
- FEAT/UI introduce a graph panel which renders at the top right next to the graph view (to make more use of the horizontal space) and which allows (de-) selecting flows to be excluded from the graph view or search for individual nodes where only the flows containing this node should be shown (like slicing the brain) - FEAT/UI introduce a graph panel which renders at the top right next to the graph view (to make more use of the horizontal space) and which allows (de-) selecting flows to be excluded from the graph view or search for individual nodes where only the flows containing this node should be shown (like slicing the brain)
- FEAT/UI labels in flows (indicating dashboard widget connections) naturally can't pulse. Instead add an animation (enlightning fade) from either ltr or rtl depending if the label is in- or outbound - FEAT/UI labels in flows (indicating dashboard widget connections) naturally can't pulse. Instead add an animation (enlightning fade) from either ltr or rtl depending if the label is in- or outbound
- CHORE/UI: `layoutGraph` treats every node as 220×56 rather than measuring, because feeding a measurement back into the layout oscillates. A node wider than that crowds its neighbours; take the sizes from `node.measured` once they have settled if it shows. - CHORE/UI: `layoutGraph` treats every node as 220 wide rather than measuring, because feeding a measurement back into the layout oscillates. A node wider than that crowds its neighbours; take the width from `node.measured` once it has settled if it shows. Height is no longer a guess — `nodeHeight()` derives it from the port count before dagre runs, so it cannot oscillate.
- FEAT/UI/MOBILE: a rank of many nodes — a connector feeding eight dashboard tiles — is thousands of pixels wide however the graph is turned, so on a phone the fit shrinks it past reading. The layout is right and the flow is simply too big for the screen; a "one rank at a time" reading mode, or wrapping a wide rank, is what would make it legible. - FEAT/UI/MOBILE: a rank of many nodes — a connector feeding eight dashboard tiles — is thousands of pixels wide however the graph is turned, so on a phone the fit shrinks it past reading. The layout is right and the flow is simply too big for the screen; a "one rank at a time" reading mode, or wrapping a wide rank, is what would make it legible.
- CHORE/UI: an edge's value chip sits at the bezier midpoint while the layout reserves its room at dagre's label rank. The two agree closely enough today; if chips ever pile up, take the position from the layout instead. - CHORE/UI: an edge's value chip sits at the bezier midpoint while the layout reserves its room at dagre's label rank. The two agree closely enough today; if chips ever pile up, take the position from the layout instead.
- FEAT/UI (deferred until MCP lands): add a "bot" icon button to the home view (graph panel) which opens a chat window (reuse general concept of a side panel like in flows/nodes to make it a chat panel which can open on any screen (stacks below any other existing panel -> introduce stacking) to give support on errors/write code, generate dashboards etc) to explain the error(s) - FEAT/UI (deferred until MCP lands): add a "bot" icon button to the home view (graph panel) which opens a chat window (reuse general concept of a side panel like in flows/nodes to make it a chat panel which can open on any screen (stacks below any other existing panel -> introduce stacking) to give support on errors/write code, generate dashboards etc) to explain the error(s)