RUN  v4.1.9 /workspace/niko/agent-platform/frontend Coverage enabled with v8 ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has healthy status by default 27ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null responseTime by default 9ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null lastChecked by default 4ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has empty services by default 7ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null apiVersion by default 4ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets healthy status on success 7ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets degraded status when services report issues 3ms ✓ src/layouts/healthStore.test.ts > healthStore > fetchHealth > sets unhealthy status on network error 4ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has sidebar open by default 45ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has dark theme by default 2ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has null sessionTimeoutAt by default 3ms ✓ 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 3ms ✓ src/layouts/uiStore.test.ts > uiStore > setTheme > sets theme to high-contrast 2ms ✓ 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/features/auth/authStore.test.ts > authStore > starts unauthenticated 22ms ✓ src/features/auth/authStore.test.ts > authStore > setAuth sets authenticated state 25ms ✓ src/features/auth/authStore.test.ts > authStore > clearAuth clears all auth state 3ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > returns runs without filter 109ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (30 days) 25ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (24 hours) 33ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles invalid created_after gracefully 24ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles today shorthand gracefully 29ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by project_id 69ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by multiple project_ids 24ms 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/shared/hooks/useFilterState.test.tsx > useFilterState > returns default values when no URL params 138ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets sort key and toggles order 21ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads initial values from URL 15ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets a single filter value 27ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > clears all filters and resets sort 16ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets multi-select filter as pipe-separated string 13ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads multi-select filter from URL 10ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens desc 32ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens asc 22ms 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 260ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to returnUrl when set in sessionStorage 39ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > sets auth store with decoded JWT when token exchange succeeds 23ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when token exchange fails 44ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when no code in sessionStorage 29ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when only code is present without verifier 45ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > clears code and verifier from sessionStorage after processing 29ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders column headers 338ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders data rows 123ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders empty state when data is empty 43ms 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/shared/components/FilterBar.test.tsx > FilterBar > renders filter labels 229ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows login heading, description and button 883ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows session expired message when expired query param is set 77ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > renders clear button 792ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders loading skeleton rows 132ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > does not show expired message without expired param 65ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows error toast when error query param is set 46ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > redirects to dashboard when already authenticated 36ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders error state with retry button 674ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > calls onChange when multi-select option clicked 268ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onRetry when retry clicked 278ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onSort when sortable header clicked 148ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > renders with title and message 865ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onConfirm when confirm button is clicked 635ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > performs mock login in dev mode and navigates to dashboard 932ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onCancel when cancel button is clicked 195ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > does not render when closed 15ms 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/TokenDisplay.test.tsx > TokenDisplay > renders 0 as "0" 168ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 500 as "500" 20ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1500 as "1.5K" 39ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 890123 as "890.1K" 46ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1234567 as "1.2M" 62ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 999500 as "999.5K" 53ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders with label when provided 49ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 0ms as "0s" 138ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 5000ms as "5s" 8ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 65000ms as "1m 5s" 19ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3661000ms as "1h 1m" 16ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3723000ms as "1h 2m" 18ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders items with separators 217ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders null as "—" 27ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders pending with correct label 185ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders running with correct label 19ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders succeeded with correct label 28ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders failed with correct label 32ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders links for items with href 396ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders last item as plain text 42ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders manual badge 182ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders webhook badge 15ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders schedule badge 17ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders cli badge 17ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders label and value 289ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders large values with abbreviation 30ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders accent color border 20ms ✓ src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline 1866ms 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 289ms ✓ src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders fallback on error 223ms ✓ src/App.test.tsx > App > shows login page when unauthenticated 806ms  Test Files  19 passed (19)  Tests  98 passed (98)  Start at  06:56:07  Duration  23.25s (transform 16.09s, setup 49.20s, import 29.01s, tests 14.35s, environment 52.27s) 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 -------------------|---------|----------|---------|---------|-------------------