Expand HyperTwist protected workflow guidance
This commit is contained in:
parent
d81339fde6
commit
4e5f48f0c1
4 changed files with 86 additions and 1 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Panel title={title} kicker={kicker}>
|
||||
<p>{description}</p>
|
||||
<div className="card-grid top-gap">
|
||||
{cards.map((card) => (
|
||||
<article key={card.title} className="card card--compact">
|
||||
<h3>{card.title}</h3>
|
||||
<p>{card.description}</p>
|
||||
<ul className="list top-gap">
|
||||
{card.steps.map((step) => (
|
||||
<li key={step}>{step}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
<div className="button-row top-gap">
|
||||
<Link className="button button--ghost" to="/app/downloads">
|
||||
Open downloads
|
||||
</Link>
|
||||
<Link className="button button--ghost" to="/app/browser-access">
|
||||
Open browser access
|
||||
</Link>
|
||||
<Link className="button button--ghost" to="/docs">
|
||||
Open public manual
|
||||
</Link>
|
||||
</div>
|
||||
</Panel>
|
||||
)
|
||||
}
|
||||
|
||||
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."
|
||||
/>
|
||||
|
||||
<ProtectedSoftwareWorkflowPanel
|
||||
title="Software workflows after access is resolved"
|
||||
kicker="Protected simulator-use manual"
|
||||
description="The protected dashboard should also say what the installed software is actually for once access, pairing, and release posture are already settled."
|
||||
limit={4}
|
||||
/>
|
||||
|
||||
<Panel title="Billing and entitlement state" kicker="Release access">
|
||||
<ul className="list">
|
||||
<li>Source: {user?.billing?.source || 'session'}</li>
|
||||
|
|
@ -1627,6 +1679,13 @@ export function DownloadCenterPage() {
|
|||
/>
|
||||
</Panel>
|
||||
|
||||
<ProtectedSoftwareWorkflowPanel
|
||||
title="What the downloaded software already supports"
|
||||
kicker="Protected simulator-use manual"
|
||||
description="Protected package access is more useful when the same route also teaches the real desktop workflows that follow immediately after install."
|
||||
limit={4}
|
||||
/>
|
||||
|
||||
<ProtectedOperatorQuickRoutesPanel
|
||||
title="Protected operator quick routes"
|
||||
kicker="Signed-in help lanes"
|
||||
|
|
@ -1747,6 +1806,12 @@ export function BrowserAccessPage() {
|
|||
</Link>
|
||||
</div>
|
||||
</Panel>
|
||||
<ProtectedSoftwareWorkflowPanel
|
||||
title="Desktop workflows behind the browser handoff"
|
||||
kicker="Protected simulator-use manual"
|
||||
description="Once browser access has done its job, these are the actual desktop workflows HyperTwist already supports today."
|
||||
limit={4}
|
||||
/>
|
||||
<ProtectedReleaseActionPanel
|
||||
title="Current release action"
|
||||
kicker="Protected access guidance"
|
||||
|
|
@ -1957,6 +2022,13 @@ export function AccountPage() {
|
|||
/>
|
||||
</Panel>
|
||||
|
||||
<ProtectedSoftwareWorkflowPanel
|
||||
title="Desktop workflows available to this account"
|
||||
kicker="Protected simulator-use manual"
|
||||
description="Account, plan, and entitlement posture exist to unlock real native workflows. This panel keeps those practical simulator uses visible after sign-in."
|
||||
limit={4}
|
||||
/>
|
||||
|
||||
<DesktopFirstLaunchChecklist
|
||||
title="Desktop access follow-through"
|
||||
kicker="After sign-in"
|
||||
|
|
|
|||
|
|
@ -1143,6 +1143,11 @@ export const publicManualRouteAtlasCards = [
|
|||
] as const
|
||||
|
||||
export const changelogEntries = [
|
||||
{
|
||||
date: 'June 30, 2026',
|
||||
title: 'Protected browser routes now teach the concrete desktop workflows too',
|
||||
details: 'The signed-in dashboard, browser-access, download, and account routes now share a first-party protected workflow manual for classic-cube practice, recognition and correction, replay/coaching review, and higher-dimensional session use. Protected browser access now explains not only release and entitlement posture, but also what the installed software is actually used for once the browser handoff is complete.',
|
||||
},
|
||||
{
|
||||
date: 'June 30, 2026',
|
||||
title: 'Public manual now teaches concrete desktop workflows across the main operator routes',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue