diff --git a/website/src/__tests__/DashboardOverviewPage.test.tsx b/website/src/__tests__/DashboardOverviewPage.test.tsx index ce0700c..2bc6ab0 100644 --- a/website/src/__tests__/DashboardOverviewPage.test.tsx +++ b/website/src/__tests__/DashboardOverviewPage.test.tsx @@ -223,6 +223,8 @@ describe('DashboardOverviewPage', () => { expect(screen.getByText('First simulator session')).toBeTruthy() expect(screen.getByText('1. Resolve access and choose the right build')).toBeTruthy() expect(screen.getByText('4. Open the higher-dimensional lanes and read the control boundary honestly')).toBeTruthy() + expect(screen.getByText('Software workflows after access is resolved')).toBeTruthy() + expect(screen.getByText('2. Run a recognition and correction workflow')).toBeTruthy() expect(screen.getByText('Native control and settings roster')).toBeTruthy() expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0) expect(screen.getByText('XR groundwork exists, but the full VR lane is not finished')).toBeTruthy() diff --git a/website/src/__tests__/protected-app-pages.test.tsx b/website/src/__tests__/protected-app-pages.test.tsx index db2635a..ba6286a 100644 --- a/website/src/__tests__/protected-app-pages.test.tsx +++ b/website/src/__tests__/protected-app-pages.test.tsx @@ -198,6 +198,8 @@ describe('protected app pages', () => { expect(screen.getByText(/Magic120Cell dedicated-family training map: passed/i)).toBeTruthy() expect(screen.getByText('Protected browser-versus-desktop reality')).toBeTruthy() expect(screen.getByText('Why the browser is intentionally narrower')).toBeTruthy() + expect(screen.getByText('Desktop workflows behind the browser handoff')).toBeTruthy() + expect(screen.getByText('4. Open the higher-dimensional family lanes')).toBeTruthy() expect(screen.getByText('Native control and XR boundary')).toBeTruthy() expect(screen.getByText('Shipped classic control profile')).toBeTruthy() expect(await screen.findByText(byExactTextContent('Auth runtime mode: public', 'LI'))).toBeTruthy() @@ -390,10 +392,12 @@ describe('protected app pages', () => { expect(screen.getByText('Current packaged desktop proof')).toBeTruthy() expect(screen.getAllByText('Packaged validation passed').length).toBeGreaterThan(0) expect(screen.getByText('Protected operator quick routes')).toBeTruthy() + expect(screen.getByText('What the downloaded software already supports')).toBeTruthy() + expect(screen.getByText('3. Review replay, coaching, and analytics')).toBeTruthy() expect(screen.getByText('Protected browser-versus-desktop reality')).toBeTruthy() expect(screen.getByText('What the desktop runtime is for')).toBeTruthy() expect(screen.getByRole('link', { name: 'Open account' }).getAttribute('href')).toBe('/app/account') - expect(screen.getByRole('link', { name: 'Open browser access' }).getAttribute('href')).toBe('/app/browser-access') + expect(screen.getAllByRole('link', { name: 'Open browser access' }).every((link) => link.getAttribute('href') === '/app/browser-access')).toBe(true) expect(screen.getByText('Download and rollout escalation')).toBeTruthy() expect(screen.getByText('Current product-surface map')).toBeTruthy() expect(screen.getByText('Protected browser dashboard')).toBeTruthy() @@ -419,6 +423,8 @@ describe('protected app pages', () => { expect(screen.getByText('Current simulator control ownership')).toBeTruthy() expect(screen.getByText('Current release action')).toBeTruthy() expect(screen.getByRole('link', { name: 'Download Windows package' }).getAttribute('href')).toBe('https://downloads.hypertwist.app/windows.exe') + expect(screen.getByText('Desktop workflows available to this account')).toBeTruthy() + expect(screen.getByText('2. Run a recognition and correction workflow')).toBeTruthy() expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0) expect(screen.getByText('XR reopen requirements')).toBeTruthy() expect(screen.getByText('It would also need user-facing settings and controller-rebinding ownership instead of leaving that lane at inspect-surface truth only.')).toBeTruthy() diff --git a/website/src/pages/app-pages.tsx b/website/src/pages/app-pages.tsx index ce350c8..9e0fce9 100644 --- a/website/src/pages/app-pages.tsx +++ b/website/src/pages/app-pages.tsx @@ -22,6 +22,7 @@ import { controlProfileRosterCards, desktopDownloadSteps, desktopFirstLaunchCards, + desktopWorkflowTracks, inputAndDevicePostureCards, operatorDesktopQuickstartCards, productSurfaceMatrixRows, @@ -1027,6 +1028,50 @@ function OperatorDesktopQuickstartPanel({ ) } +function ProtectedSoftwareWorkflowPanel({ + title, + kicker, + description, + limit, +}: { + title: string + kicker: string + description: string + limit?: number +}) { + const cards = typeof limit === 'number' ? desktopWorkflowTracks.slice(0, limit) : desktopWorkflowTracks + + return ( + +

{description}

+
+ {cards.map((card) => ( +
+

{card.title}

+

{card.description}

+
    + {card.steps.map((step) => ( +
  • {step}
  • + ))} +
+
+ ))} +
+
+ + Open downloads + + + Open browser access + + + Open public manual + +
+
+ ) +} + function SupportEscalationChecklist({ title, kicker, @@ -1313,6 +1358,13 @@ export function DashboardOverviewPage() { description="The protected dashboard now also condenses the real operator journey into one place so account state, desktop-link pairing, first launch, native training verification, and the current XR/controller boundary can be reviewed together instead of reconstructed from scattered cards." /> + +