From 173f096e33157a1744ffa2ef9d09a170216ac036 Mon Sep 17 00:00:00 2001 From: Offending Commit Date: Wed, 3 Jun 2026 17:01:19 -0500 Subject: [PATCH] fix(web): break metricsEqual lastSeen dep-loop; add staleTime to test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove lastSeen from metricsEqual in ServerWorkspaceRows: computeFleetAggregates never reads lastSeen, so comparing it in metricsEqual causes background TanStack Query refetches (dataUpdatedAt changes) to trigger spurious onMetrics callbacks, cascading into a Dashboard → ServerWorkspaceRows render loop that hits React's 100-render limit in CI. Add staleTime: Infinity to the test QueryClient to prevent background refetches from interfering with test assertions. --- packages/web/src/components/dashboard/ServerWorkspaceRows.tsx | 1 - packages/web/src/test/dashboard.test.tsx | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/web/src/components/dashboard/ServerWorkspaceRows.tsx b/packages/web/src/components/dashboard/ServerWorkspaceRows.tsx index 8e2e909..af43b5f 100644 --- a/packages/web/src/components/dashboard/ServerWorkspaceRows.tsx +++ b/packages/web/src/components/dashboard/ServerWorkspaceRows.tsx @@ -34,7 +34,6 @@ function metricsEqual(a: FleetRowMetrics, b: FleetRowMetrics): boolean { a.conclusionCount === b.conclusionCount && a.queueActive === b.queueActive && a.queuePending === b.queuePending && - a.lastSeen === b.lastSeen && a.health === b.health ); } diff --git a/packages/web/src/test/dashboard.test.tsx b/packages/web/src/test/dashboard.test.tsx index 3108a51..b11c3b8 100644 --- a/packages/web/src/test/dashboard.test.tsx +++ b/packages/web/src/test/dashboard.test.tsx @@ -41,7 +41,9 @@ function renderDashboard() { routeTree, history: createMemoryHistory({ initialEntries: ["/"] }), }); - const qc = new QueryClient({ defaultOptions: { queries: { retry: false } } }); + const qc = new QueryClient({ + defaultOptions: { queries: { retry: false, staleTime: Infinity } }, + }); return render(