diff --git a/NOTEPAD.md b/NOTEPAD.md index 24aac07..a0d861b 100644 --- a/NOTEPAD.md +++ b/NOTEPAD.md @@ -12,31 +12,16 @@ Deferring because out of scope is fine, but don't mention deferring than. ### 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 - rows — and that is as much as fits: a chart spends about eighty pixels on its - title, range picker and legend whatever height it is given, so two of them - read on that panel and three do not. The temperature history was the one - dropped; `history.climate_*` still answers, so it is a tile away. + rows. A chart's fixed chrome is now its title line and legend: the range picker + moved up onto the title and gave back its row, so the budget is nearer forty + pixels than eighty and a third chart may now fit — worth measuring against the + 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 chosen for the graph rather than for somebody reading it across a room. `Segment` now takes an optional `label`; the house dashboard sets one (`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.** 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 `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 from a panel whose dashboard says locked. Making it real means carrying the flag into `_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 `` 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. + 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 shows disabled controls without the pill. - 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 — which reads like a test failure and is not one. (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. - 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. @@ -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 - 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 -- 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. - 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)