RUN  v4.1.9 /workspace/niko/agent-platform/frontend Coverage enabled with v8 ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has sidebar open by default 14ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has dark theme by default 3ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has null sessionTimeoutAt by default 2ms ✓ src/layouts/uiStore.test.ts > uiStore > toggleSidebar > closes sidebar when open 2ms ✓ src/layouts/uiStore.test.ts > uiStore > toggleSidebar > opens sidebar when closed 2ms ✓ src/layouts/uiStore.test.ts > uiStore > setSidebarOpen > sets sidebar to false 2ms ✓ src/layouts/uiStore.test.ts > uiStore > setSidebarOpen > sets sidebar to true 1ms ✓ src/layouts/uiStore.test.ts > uiStore > setTheme > sets theme to light 1ms ✓ src/layouts/uiStore.test.ts > uiStore > setTheme > sets theme to high-contrast 1ms ✓ src/layouts/uiStore.test.ts > uiStore > setTheme > sets theme to dark 1ms ✓ src/layouts/uiStore.test.ts > uiStore > sessionTimeoutAt > sets sessionTimeoutAt to a timestamp 1ms ✓ src/layouts/uiStore.test.ts > uiStore > sessionTimeoutAt > resets sessionTimeoutAt to null 1ms ✓ src/layouts/uiStore.test.ts > uiStore > resetSession > restores defaults 2ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > returns runs without filter 120ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (30 days) 23ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (24 hours) 13ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles invalid created_after gracefully 15ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles today shorthand gracefully 16ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has healthy status by default 13ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null responseTime by default 2ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null lastChecked by default 1ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has empty services by default 4ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null apiVersion by default 1ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets healthy status on success 5ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets degraded status when services report issues 2ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets unhealthy status on network error 3ms ✓ src/features/auth/authStore.test.ts > authStore > starts unauthenticated 14ms ✓ src/features/auth/authStore.test.ts > authStore > setAuth sets authenticated state 7ms ✓ src/features/auth/authStore.test.ts > authStore > clearAuth clears all auth state 2ms stderr | src/shared/hooks/useFilterState.test.tsx > useFilterState > returns default values when no URL params ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by project_id 74ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by multiple project_ids 24ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens desc 40ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens asc 24ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > returns default values when no URL params 152ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > clears all filters and resets sort 73ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads initial values from URL 14ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets multi-select filter as pipe-separated string 71ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets a single filter value 21ms stderr | src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to dashboard when valid code and verifier are in sessionStorage ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to dashboard when valid code and verifier are in sessionStorage 446ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads multi-select filter from URL 17ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets sort key and toggles order 28ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > sets auth store with decoded JWT when token exchange succeeds 47ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to returnUrl when set in sessionStorage 57ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when no code in sessionStorage 28ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when token exchange fails 57ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > clears code and verifier from sessionStorage after processing 51ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when only code is present without verifier 37ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders column headers 539ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders data rows 63ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders empty state when data is empty 20ms stderr | src/features/auth/LoginPage.test.tsx > LoginPage > shows login heading, description and button ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows login heading, description and button 907ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > renders filter labels 433ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders loading skeleton rows 105ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows session expired message when expired query param is set 102ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > does not show expired message without expired param 108ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders error state with retry button 489ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > renders clear button 749ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows error toast when error query param is set 74ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > redirects to dashboard when already authenticated 119ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onRetry when retry clicked 396ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > calls onChange when multi-select option clicked 332ms stderr | src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onSort when sortable header clicked 218ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > renders with title and message 972ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onConfirm when confirm button is clicked 685ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > performs mock login in dev mode and navigates to dashboard 935ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onCancel when cancel button is clicked 323ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > does not render when closed 19ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders items with separators 196ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 0ms as "0s" 177ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 5000ms as "5s" 17ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 65000ms as "1m 5s" 26ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3661000ms as "1h 1m" 14ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders links for items with href 335ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders last item as plain text 43ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 0 as "0" 135ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 500 as "500" 16ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1500 as "1.5K" 17ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 890123 as "890.1K" 15ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1234567 as "1.2M" 21ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders pending with correct label 148ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders running with correct label 17ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders succeeded with correct label 26ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders failed with correct label 13ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3723000ms as "1h 2m" 18ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders null as "—" 21ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders manual badge 192ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders webhook badge 13ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders schedule badge 20ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders cli badge 23ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 999500 as "999.5K" 24ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders with label when provided 24ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders label and value 189ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders large values with abbreviation 42ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders accent color border 41ms ✓ src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline 2312ms stderr | src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders fallback on error Error: kaboom at Bomb (/workspace/niko/agent-platform/frontend/src/shared/components/ErrorBoundary.test.tsx:6:9) at Object.react_stack_bottom_frame (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20) at renderWithHooks (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22) at updateFunctionComponent (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19) at beginWork (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18) at runWithFiberInDEV (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:874:13) at performUnitOfWork (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22) at workLoopSync (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41) at renderRootSync (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17450:11) at performWorkOnRoot (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:16583:35) { [stack]: [Getter/Setter], [message]: 'kaboom' } The above error occurred in the component. React will try to recreate this component tree from scratch using the error boundary you provided, ErrorBoundary. ErrorBoundary caught: Error: kaboom at Bomb (/workspace/niko/agent-platform/frontend/src/shared/components/ErrorBoundary.test.tsx:6:9) at Object.react_stack_bottom_frame (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20) at renderWithHooks (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22) at updateFunctionComponent (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19) at beginWork (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18) at runWithFiberInDEV (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:874:13) at performUnitOfWork (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22) at workLoopSync (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41) at renderRootSync (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:17450:11) at performWorkOnRoot (/workspace/node_modules/react-dom/cjs/react-dom-client.development.js:16583:35) { componentStack: '\n' + ' at Bomb (/workspace/niko/agent-platform/frontend/src/shared/components/ErrorBoundary.test.tsx:11:8)\n' + ' at ErrorBoundary (/workspace/niko/agent-platform/frontend/src/shared/components/ErrorBoundary.tsx:10:1)' } ✓ src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders children when no error 98ms ✓ src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders fallback on error 89ms ✓ src/App.test.tsx > App > shows login page when unauthenticated 704ms  Test Files  19 passed (19)  Tests  98 passed (98)  Start at  07:18:11  Duration  23.26s (transform 15.25s, setup 59.62s, import 29.73s, tests 15.10s, environment 56.92s) JUNIT report written to /workspace/niko/agent-platform/reports/front-unit/junit.xml  % Coverage report from v8 -------------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -------------------|---------|----------|---------|---------|------------------- All files | 23.4 | 20.94 | 23.89 | 24.3 | src | 56.25 | 66.66 | 62.5 | 53.33 | App.tsx | 100 | 100 | 100 | 100 | main.tsx | 0 | 0 | 0 | 0 | 7-19 router.tsx | 75 | 100 | 66.66 | 71.42 | 22-23 version.ts | 100 | 100 | 100 | 100 | src/components/ui | 68.96 | 80 | 66.66 | 68.96 | button.tsx | 100 | 66.66 | 100 | 100 | 52 card.tsx | 28.57 | 100 | 28.57 | 28.57 | 24-60,83 dialog.tsx | 80 | 83.33 | 80 | 80 | 17,29 skeleton.tsx | 100 | 100 | 100 | 100 | table.tsx | 75 | 100 | 75 | 75 | 41,96 src/features/auth | 75.55 | 84.84 | 84.61 | 74.39 | AuthGuard.tsx | 85.71 | 50 | 100 | 83.33 | 18 CallbackPage.tsx | 94.44 | 89.47 | 90.9 | 96.87 | 93 LoginPage.tsx | 55.81 | 83.33 | 70 | 52.5 | 11-26,64-84 authStore.ts | 100 | 100 | 100 | 100 | ...ures/dashboard | 1.14 | 0 | 0 | 1.26 | ...boardPage.tsx | 1.42 | 0 | 0 | 1.61 | 17-26,34-210 dashboardApi.ts | 0 | 0 | 0 | 0 | 9-46 ...eatures/errors | 0 | 100 | 0 | 0 | NotFoundPage.tsx | 0 | 100 | 0 | 0 | 5-11 ...ures/pipelines | 24.58 | 20.74 | 18.03 | 26.54 | ...etailPage.tsx | 66.66 | 66.66 | 41.17 | 71.42 | 91-95,123-203 ...eFormPage.tsx | 2.12 | 0 | 0 | 2.43 | 16-303 pipelinesApi.ts | 19.35 | 100 | 20 | 19.35 | ...40,54-74,83-86 ...tures/projects | 2.34 | 0 | 3.94 | 2.57 | ...etailPage.tsx | 0 | 0 | 0 | 0 | 16-263 ...tFormPage.tsx | 1.44 | 0 | 0 | 1.63 | 13-226 ProjectsPage.tsx | 0 | 0 | 0 | 0 | 9-104 projectsApi.ts | 13.79 | 100 | 16.66 | 13.79 | 12-13,22-36,51-83 ...s/repositories | 0 | 0 | 0 | 0 | ...oriesPage.tsx | 0 | 0 | 0 | 0 | 8-133 ...yFormPage.tsx | 0 | 0 | 0 | 0 | 11-181 ...itoriesApi.ts | 0 | 100 | 0 | 0 | 10-91 src/features/runs | 3.01 | 0.67 | 6.06 | 3.48 | ...etailPage.tsx | 0 | 0 | 0 | 0 | 19-328 RunsPage.tsx | 0 | 0 | 0 | 0 | 17-342 runsApi.ts | 37.5 | 33.33 | 36.36 | 37.5 | 30-36,47-52,61-64 ...tures/settings | 12.5 | 100 | 0 | 16.66 | SettingsPage.tsx | 12.5 | 100 | 0 | 16.66 | 10-29 src/layouts | 17.74 | 5.55 | 22.22 | 19.23 | AppLayout.tsx | 3.57 | 2.77 | 0 | 4.54 | 19-233 ...eoutModal.tsx | 4 | 0 | 0 | 4.54 | 11-70 healthStore.ts | 100 | 50 | 100 | 100 | 35-36 uiStore.ts | 100 | 100 | 100 | 100 | src/lib | 66.66 | 8.33 | 60 | 66.66 | axios.ts | 63.63 | 25 | 66.66 | 63.63 | 14,22-25 env.ts | 50 | 0 | 0 | 50 | 9 query-client.ts | 100 | 100 | 100 | 100 | utils.ts | 100 | 100 | 100 | 100 | ...red/components | 47.55 | 52.12 | 45.31 | 47.76 | Breadcrumb.tsx | 100 | 100 | 100 | 100 | ...andSearch.tsx | 5.55 | 0 | 0 | 5.88 | 18-60 ...irmDialog.tsx | 50 | 33.33 | 50 | 50 | 29 DataTable.tsx | 88.88 | 71.11 | 81.81 | 88.88 | 59,196 ...onDisplay.tsx | 100 | 80 | 100 | 100 | 10-13 ...rBoundary.tsx | 75 | 100 | 75 | 75 | 40-41 FilterBar.tsx | 62.5 | 62.5 | 60 | 62.5 | 32-49,83,113,126 ...ggerModal.tsx | 0 | 0 | 0 | 0 | 48-193 ...ransition.tsx | 0 | 100 | 0 | 0 | 4-5 RunPhaseIcon.tsx | 100 | 100 | 100 | 100 | SourceBadge.tsx | 100 | 100 | 100 | 100 | StatsCard.tsx | 100 | 66.66 | 100 | 100 | 28-29 Toaster.tsx | 100 | 100 | 100 | 100 | TokenDisplay.tsx | 100 | 90 | 100 | 100 | 9 src/shared/hooks | 92.3 | 77.77 | 100 | 94.11 | ...ilterState.ts | 92.3 | 77.77 | 100 | 94.11 | 48,61 src/shared/utils | 88.88 | 50 | 100 | 100 | format.ts | 88.88 | 50 | 100 | 100 | 2 -------------------|---------|----------|---------|---------|-------------------