diff --git a/NOTEPAD.md b/NOTEPAD.md index 5f1ffb1..c72d4b0 100644 --- a/NOTEPAD.md +++ b/NOTEPAD.md @@ -19,7 +19,6 @@ should reopen it. - CHORE/UI: loop lag on Home reads a real number with no flows, and that is right — `LoopWatchdog` times how late `asyncio.sleep(1.0)` wakes on the API's event loop and is started unconditionally, so it measures the engine process rather than any flow, and it is what turns the health badge `degraded`. Nothing to fix; recorded so it is not reopened. - BUG/UI auto node placement on flows should be improved in regards to least crossing edges and a more vertical layout on mobile devices - FEAT/UI we should highlight failing nodes accordingly in the flow view to facilitate easier tracking of mis-configurations -- BUG/UI when a dashboard widget is selected, the border does not cleanly draw on the left side of the widget (like it is obscured by the widget) - INFRA: ensure that all the packages/ dependencies needed to run fluksio are available on arm to make this software runnable on e.g. raspbian - 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 - CHORE/INFRA: `bunx playwright test` from the host is unsafe against this stack — `app.fluksio.com` and `api.fluksio.com` resolve to production, and `--host-resolver-rules` steers only Chromium while `page.request.*` resolves through Node, so setup and teardown write to the live instance. Run the specs in a container on the `proxy` network with `--add-host` pointing both names at Traefik. diff --git a/frontend/src/components/Dashboard/DashboardEditor.tsx b/frontend/src/components/Dashboard/DashboardEditor.tsx index e39a59c..0c1d632 100644 --- a/frontend/src/components/Dashboard/DashboardEditor.tsx +++ b/frontend/src/components/Dashboard/DashboardEditor.tsx @@ -368,7 +368,12 @@ export function DashboardEditor({ issue={widgetIssue(widget)} className={cn( "cursor-pointer", - widget.id === selected && "ring-2 ring-primary", + // Drawn inwards: the canvas is clipped to the panel's exact pixel + // size, so an outward ring on a widget sitting in column 0 or row 0 + // is cut off on that side. The border takes the same colour so the + // edge reads as one line rather than a grey seam around the ring. + widget.id === selected && + "border-primary ring-2 ring-inset ring-primary", )} grip={grip} onClick={(event) => {