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 12ms ✓ 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 2ms ✓ src/layouts/uiStore.test.ts > uiStore > toggleSidebar > closes sidebar when open 3ms ✓ src/layouts/uiStore.test.ts > uiStore > toggleSidebar > opens sidebar when closed 2ms ✓ src/layouts/uiStore.test.ts > uiStore > setSidebarOpen > sets sidebar to false 1ms ✓ 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 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 2ms ✓ src/layouts/uiStore.test.ts > uiStore > sessionTimeoutAt > resets sessionTimeoutAt to null 1ms ✓ src/layouts/uiStore.test.ts > uiStore > resetSession > restores defaults 3ms 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 > returns runs without filter 158ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (30 days) 34ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by created_after (24 hours) 16ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles invalid created_after gracefully 25ms ✓ src/features/auth/authStore.test.ts > authStore > starts unauthenticated 19ms ✓ src/features/auth/authStore.test.ts > authStore > setAuth sets authenticated state 8ms ✓ src/features/auth/authStore.test.ts > authStore > clearAuth clears all auth state 3ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > returns default values when no URL params 147ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads initial values from URL 24ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles today shorthand gracefully 21ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by project_id 78ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 0 as "0" 166ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 500 as "500" 24ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1500 as "1.5K" 19ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by multiple project_ids 29ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens desc 56ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens asc 61ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets a single filter value 61ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > clears all filters and resets sort 27ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets multi-select filter as pipe-separated string 38ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads multi-select filter from URL 27ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 890123 as "890.1K" 56ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1234567 as "1.2M" 45ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 999500 as "999.5K" 31ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets sort key and toggles order 55ms stderr | src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to dashboard when valid token and state are present ⚠️ 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 with label when provided 16ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to dashboard when valid token and state are present 340ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > sets auth store with decoded JWT when token and state are valid 25ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when no access token in callback 32ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows CSRF error when state does not match 28ms stderr | src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to returnUrl when set in sessionStorage No routes matched location "/runs/run-1" ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows CSRF error when state is missing in callback 31ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows CSRF error when no stored state exists 18ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > clears oidc-state from sessionStorage after processing 12ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to returnUrl when set in sessionStorage 10ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders column headers 482ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders data rows 91ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders empty state when data is empty 34ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > renders filter labels 273ms 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 clear button 572ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows login heading, description and button 838ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows session expired message when expired query param is set 46ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders loading skeleton rows 67ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > does not show expired message without expired param 70ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > redirects to dashboard when already authenticated 54ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > calls onChange when multi-select option clicked 164ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders error state with retry button 368ms 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 onRetry when retry clicked 309ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > renders with title and message 748ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onSort when sortable header clicked 149ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onConfirm when confirm button is clicked 436ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > performs mock login in dev mode and navigates to dashboard 849ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onCancel when cancel button is clicked 327ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > does not render when closed 17ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders manual badge 158ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders webhook badge 17ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders schedule badge 24ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders cli badge 17ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders items with separators 169ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 0ms as "0s" 149ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 5000ms as "5s" 14ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 65000ms as "1m 5s" 13ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3661000ms as "1h 1m" 12ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3723000ms as "1h 2m" 25ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders null as "—" 10ms ✓ src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline 2387ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders links for items with href 388ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders last item as plain text 29ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders pending with correct label 188ms ✓ 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 21ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders failed with correct label 18ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders label and value 162ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders large values with abbreviation 15ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders accent color border 15ms 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 110ms ✓ src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders fallback on error 84ms ✓ src/App.test.tsx > App > shows login page when unauthenticated 720ms  Test Files  18 passed (18)  Tests  90 passed (90)  Start at  07:35:33  Duration  20.15s (transform 9.94s, setup 45.07s, import 25.56s, tests 13.32s, environment 51.22s) 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 | 22.62 | 20.65 | 23.19 | 23.51 | src | 53.33 | 50 | 62.5 | 50 | App.tsx | 100 | 100 | 100 | 100 | main.tsx | 0 | 0 | 0 | 0 | 7-19 router.tsx | 75 | 100 | 66.66 | 71.42 | 22-23 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 | 83.56 | 84.37 | 94.73 | 83.33 | AuthGuard.tsx | 85.71 | 50 | 100 | 83.33 | 18 CallbackPage.tsx | 93.93 | 90 | 87.5 | 96.66 | 75 LoginPage.tsx | 68.96 | 80 | 100 | 65.38 | 36-51 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 | 12.9 | 2 | 20 | 13.46 | AppLayout.tsx | 3.57 | 2.94 | 0 | 4.54 | 18-232 ...eoutModal.tsx | 4 | 0 | 0 | 4.54 | 11-70 healthStore.ts | 25 | 0 | 50 | 14.28 | 25-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.72 | 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 | 90 | 100 | 100 | 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 -------------------|---------|----------|---------|---------|-------------------