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 15ms ✓ src/layouts/uiStore.test.ts > uiStore > defaults > has dark theme by default 4ms ✓ 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 1ms ✓ src/layouts/uiStore.test.ts > uiStore > setSidebarOpen > sets sidebar to false 7ms ✓ src/layouts/uiStore.test.ts > uiStore > setSidebarOpen > sets sidebar to true 3ms ✓ 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 2ms ✓ src/layouts/uiStore.test.ts > uiStore > sessionTimeoutAt > sets sessionTimeoutAt to a timestamp 2ms ✓ src/layouts/uiStore.test.ts > uiStore > sessionTimeoutAt > resets sessionTimeoutAt to null 2ms ✓ src/layouts/uiStore.test.ts > uiStore > resetSession > restores defaults 2ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > returns runs without filter 146ms ✓ 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) 17ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has healthy status by default 15ms ✓ 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 2ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has empty services by default 5ms ✓ src/layouts/healthStore.test.ts > healthStore > defaults > has null apiVersion by default 2ms ✓ 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 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/features/auth/authStore.test.ts > authStore > starts unauthenticated 14ms ✓ 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/msw/__tests__/runs-handler.test.ts > runs MSW handler > handles invalid created_after gracefully 43ms ✓ 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 71ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > returns default values when no URL params 129ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads initial values from URL 14ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets a single filter value 23ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > clears all filters and resets sort 14ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets multi-select filter as pipe-separated string 14ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > reads multi-select filter from URL 11ms ✓ src/shared/hooks/useFilterState.test.tsx > useFilterState > sets sort key and toggles order 29ms 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/msw/__tests__/runs-handler.test.ts > runs MSW handler > filters by multiple project_ids 26ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens desc 24ms ✓ src/msw/__tests__/runs-handler.test.ts > runs MSW handler > sorts by tokens asc 24ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to dashboard when valid code and verifier are in sessionStorage 396ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > sets auth store with decoded JWT when token exchange succeeds 38ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when no code in sessionStorage 30ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > clears code and verifier from sessionStorage after processing 39ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > navigates to returnUrl when set in sessionStorage 27ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when token exchange fails 33ms ✓ src/features/auth/CallbackPage.test.tsx > CallbackPage > shows error when only code is present without verifier 18ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders column headers 359ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders data rows 58ms 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 446ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows login heading, description and button 877ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders empty state when data is empty 27ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders loading skeleton rows 85ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > renders clear button 594ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows session expired message when expired query param is set 114ms ✓ src/shared/components/DataTable.test.tsx > DataTable > renders error state with retry button 656ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > does not show expired message without expired param 110ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > shows error toast when error query param is set 76ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > redirects to dashboard when already authenticated 206ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onRetry when retry clicked 326ms ✓ src/shared/components/FilterBar.test.tsx > FilterBar > calls onChange when multi-select option clicked 395ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > renders with title and message 3100ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onConfirm when confirm button is clicked 212ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > calls onCancel when cancel button is clicked 169ms ✓ src/shared/components/ConfirmDialog.test.tsx > ConfirmDialog > does not render when closed 12ms ✓ src/features/auth/LoginPage.test.tsx > LoginPage > performs mock login in dev mode and navigates to dashboard 3337ms ✓ src/shared/components/DataTable.test.tsx > DataTable > calls onSort when sortable header clicked 168ms 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/DurationDisplay.test.tsx > DurationDisplay > renders 0ms as "0s" 161ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 5000ms as "5s" 12ms ✓ 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" 18ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders 3723000ms as "1h 2m" 19ms ✓ src/shared/components/DurationDisplay.test.tsx > DurationDisplay > renders null as "—" 11ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 0 as "0" 192ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 500 as "500" 16ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1500 as "1.5K" 18ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 890123 as "890.1K" 16ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 1234567 as "1.2M" 13ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders pending with correct label 180ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders running with correct label 21ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders succeeded with correct label 36ms ✓ src/shared/components/RunPhaseIcon.test.tsx > RunPhaseIcon > renders failed with correct label 18ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders 999500 as "999.5K" 22ms ✓ src/shared/components/TokenDisplay.test.tsx > TokenDisplay > renders with label when provided 30ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders manual badge 107ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders webhook badge 11ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders schedule badge 7ms ✓ src/shared/components/SourceBadge.test.tsx > SourceBadge > renders cli badge 7ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders label and value 183ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders large values with abbreviation 19ms ✓ src/shared/components/StatsCard.test.tsx > StatsCard > renders accent color border 17ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders items with separators 157ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders links for items with href 228ms ✓ src/shared/components/Breadcrumb.test.tsx > Breadcrumb > renders last item as plain text 16ms 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 94ms ✓ src/shared/components/ErrorBoundary.test.tsx > ErrorBoundary > renders fallback on error 74ms × src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline 5743ms  → Test timed out in 5000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". ✓ src/App.test.tsx > App > shows login page when unauthenticated 694ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯  FAIL  src/features/pipelines/PipelineDetailPage.test.tsx > PipelineDetailPage > shows pipeline info for a known pipeline Error: Test timed out in 5000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".  ❯ src/features/pipelines/PipelineDetailPage.test.tsx:24:3  22|  23| describe('PipelineDetailPage', () => {  24| it('shows pipeline info for a known pipeline', async () => {  | ^  25| renderAt('/pipelines/pipeline-proj-1-1')  26| const heading = await screen.findByRole('heading', { name: /Doc qu… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯  Test Files  1 failed | 18 passed (19)  Tests  1 failed | 97 passed (98)  Start at  05:09:55  Duration  33.37s (transform 22.65s, setup 71.11s, import 38.42s, tests 21.69s, environment 58.08s) JUNIT report written to /workspace/niko/agent-platform/reports/front-unit/junit.xml