fix(#74): address PR #81 review blockers for live handoff

Distinguish FIA feed drops from true session end via terminal SessionStatus,
consume canonical /api/v1/weekend-context (post-#72 rebase), poll until
analysis-ready, and restore missing live-state styles plus transition/E2E/visual coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-12 18:50:50 -04:00
parent 1543a09ff1
commit dbe3ac644d
14 changed files with 1323 additions and 152 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -62,10 +62,12 @@ export async function gotoDataLibraryReady(page: Page): Promise<void> {
await waitForScreenshotReady(page)
}
export async function gotoLiveEmptyReady(page: Page): Promise<void> {
export async function gotoLiveInactiveReady(page: Page): Promise<void> {
await page.goto('/live')
await expect(page.locator('.loading-state')).toHaveCount(0)
await expect(page.getByTestId('live-empty')).toBeVisible()
// With BOXBOX_DISABLE_LIVE=1 the feed is silent, so the page settles into the
// inactive weekend-context handoff sourced from /api/v1/weekend-context.
await expect(page.getByTestId('live-inactive')).toBeVisible()
await waitForScreenshotReady(page)
}

View File

@@ -2,7 +2,7 @@ import { test } from '@playwright/test'
import {
gotoWeekendReady,
gotoDataLibraryReady,
gotoLiveEmptyReady,
gotoLiveInactiveReady,
gotoRaceHubFutureReady,
gotoRaceHubReady,
screenshotPage,
@@ -32,8 +32,8 @@ test.describe('MVP visual regression', () => {
await screenshotPage(page, 'data-library')
})
test('live-empty', async ({ page }) => {
await gotoLiveEmptyReady(page)
test('live-inactive', async ({ page }) => {
await gotoLiveInactiveReady(page)
await screenshotPage(page, 'live')
})
})