Thread protected release surfaces to launch status
This commit is contained in:
parent
af07f720ff
commit
163eb927cd
6 changed files with 48 additions and 9 deletions
|
|
@ -1057,6 +1057,11 @@ Current audit note:
|
|||
rollout truth after sign-in through a dedicated `/app/launch-status` route,
|
||||
so the signed-in browser lane no longer reduces launch authority back to a
|
||||
single dashboard panel once account context is present
|
||||
- the next protected release-follow-through continuation then threaded the same
|
||||
signed-in launch authority back through the protected download, browser
|
||||
access, account, notices, and release-reference surfaces too, so rollout
|
||||
posture remains one click away instead of being stranded on the overview
|
||||
route alone
|
||||
- this keeps the public manual professional without inventing browser
|
||||
simulator parity or widening the native XR branch
|
||||
- focused validation for that continuation stayed green under:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -87,6 +87,10 @@ manual:
|
|||
- the protected operator shell now also mirrors that same launch-authority
|
||||
posture on a dedicated signed-in `/app/launch-status` route, so rollout
|
||||
truth no longer collapses back down to a single dashboard panel after sign-in
|
||||
- the surrounding protected release, account, browser-access, download, and
|
||||
notices surfaces now also keep direct follow-through back to that same
|
||||
signed-in launch-authority route, so rollout truth does not disappear once
|
||||
the operator leaves the overview page
|
||||
- the protected app shell now also carries richer operator-facing browser
|
||||
boundary, account, entitlement, and notices guidance instead of treating
|
||||
those routes as thin placeholders beside the main dashboard
|
||||
|
|
|
|||
|
|
@ -411,10 +411,7 @@ describe('AppRouteTree', () => {
|
|||
})
|
||||
|
||||
renderRoute('/app/launch-status')
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText('Protected launch status')).toBeTruthy()
|
||||
})
|
||||
expect(screen.getByText('Launch references and notices')).toBeTruthy()
|
||||
expect(await screen.findByRole('heading', { name: 'Launch references and notices' })).toBeTruthy()
|
||||
})
|
||||
|
||||
it('renders the protected browser-access route through the real route tree when authenticated', async () => {
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ describe('protected app pages', () => {
|
|||
expect(screen.getByText('Operator escalation map')).toBeTruthy()
|
||||
expect(screen.getByText('Account and entitlement issues')).toBeTruthy()
|
||||
expect(screen.getAllByRole('link', { name: 'Open dashboard' }).every((link) => link.getAttribute('href') === '/app')).toBe(true)
|
||||
expect(screen.getAllByRole('link', { name: 'Protected launch status' }).every((link) => link.getAttribute('href') === '/app/launch-status')).toBe(true)
|
||||
expect(screen.getByRole('link', { name: 'Protected notices' }).getAttribute('href')).toBe('/app/notices')
|
||||
expect(screen.getByRole('link', { name: 'Open support' }).getAttribute('href')).toBe('/support?topic=operator-access')
|
||||
})
|
||||
|
|
@ -212,7 +213,7 @@ describe('protected app pages', () => {
|
|||
it('surfaces a dedicated protected launch-status route with signed-in rollout authority', async () => {
|
||||
renderPage(<ProtectedLaunchStatusPage />, '/app/launch-status')
|
||||
|
||||
expect(await screen.findByText('Protected launch status')).toBeTruthy()
|
||||
expect(await screen.findByRole('heading', { name: 'Protected launch status' })).toBeTruthy()
|
||||
expect(screen.getByText('Signed-in rollout authority')).toBeTruthy()
|
||||
expect(screen.getByText('Current release action')).toBeTruthy()
|
||||
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
|
||||
|
|
@ -220,7 +221,7 @@ describe('protected app pages', () => {
|
|||
expect(screen.getByText('Launch references and notices')).toBeTruthy()
|
||||
expect(screen.getByText('Protected browser-versus-desktop reality')).toBeTruthy()
|
||||
expect(screen.getByRole('link', { name: 'Open public launch status' }).getAttribute('href')).toBe('/launch-status')
|
||||
expect(screen.getByRole('link', { name: 'Open protected launch status' }).getAttribute('href')).toBe('/app/launch-status')
|
||||
expect(screen.getAllByRole('link', { name: 'Open protected launch status' }).every((link) => link.getAttribute('href') === '/app/launch-status')).toBe(true)
|
||||
expect(await screen.findByText(byExactTextContent('Public repository/notices URL: https://github.com/hypertwist/hypertwist', 'LI'))).toBeTruthy()
|
||||
expect(screen.getByRole('link', { name: 'Protected notices' }).getAttribute('href')).toBe('/app/notices')
|
||||
expect(screen.getByRole('link', { name: 'Public notices' }).getAttribute('href')).toBe('/open-source-notices')
|
||||
|
|
@ -245,6 +246,7 @@ describe('protected app pages', () => {
|
|||
expect(screen.getByText('Download and rollout escalation')).toBeTruthy()
|
||||
expect(screen.getByText('Current product-surface map')).toBeTruthy()
|
||||
expect(screen.getByText('Protected browser dashboard')).toBeTruthy()
|
||||
expect(screen.getAllByRole('link', { name: 'Protected launch status' }).every((link) => link.getAttribute('href') === '/app/launch-status')).toBe(true)
|
||||
expect(screen.getByRole('link', { name: 'Protected notices' }).getAttribute('href')).toBe('/app/notices')
|
||||
expect(screen.getByRole('link', { name: 'Public notices' }).getAttribute('href')).toBe('/open-source-notices')
|
||||
expect(screen.getByRole('link', { name: 'Download Windows' }).getAttribute('href')).toBe('https://downloads.hypertwist.app/windows.exe')
|
||||
|
|
@ -271,6 +273,7 @@ describe('protected app pages', () => {
|
|||
expect(await screen.findAllByText(byExactTextContent('Manifest viewer access: active', 'LI'))).toHaveLength(2)
|
||||
expect(await screen.findByText(byExactTextContent('Windows: Primary shipping lane (Version 1.0.0, Channel candidate)', 'LI'))).toBeTruthy()
|
||||
expect(screen.getAllByRole('link', { name: 'Open downloads' }).every((link) => link.getAttribute('href') === '/app/downloads')).toBe(true)
|
||||
expect(screen.getAllByRole('link', { name: 'Protected launch status' }).every((link) => link.getAttribute('href') === '/app/launch-status')).toBe(true)
|
||||
expect(screen.getByRole('link', { name: 'Get help' }).getAttribute('href')).toBe('/support?topic=operator-access')
|
||||
expect(screen.getByText('Desktop access follow-through')).toBeTruthy()
|
||||
expect(screen.getByText('Verify the current training lanes')).toBeTruthy()
|
||||
|
|
@ -293,6 +296,7 @@ describe('protected app pages', () => {
|
|||
expect(screen.getByText('Escalation and release follow-through')).toBeTruthy()
|
||||
expect(screen.getByText('Download and install issues')).toBeTruthy()
|
||||
expect(screen.getByRole('link', { name: 'Public notices' }).getAttribute('href')).toBe('/open-source-notices')
|
||||
expect(screen.getAllByRole('link', { name: 'Protected launch status' }).every((link) => link.getAttribute('href') === '/app/launch-status')).toBe(true)
|
||||
expect(screen.getAllByRole('link', { name: 'Open downloads' }).every((link) => link.getAttribute('href') === '/app/downloads')).toBe(true)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -293,10 +293,12 @@ function ProtectedAuthSessionAuthorityPanel({
|
|||
|
||||
function ReleaseAuthorityLinks({
|
||||
releaseManifest,
|
||||
includeProtectedLaunchStatusLink = false,
|
||||
includePublicNoticesLink = false,
|
||||
includeProtectedNoticesLink = false,
|
||||
}: {
|
||||
releaseManifest: ReleaseManifestView
|
||||
includeProtectedLaunchStatusLink?: boolean
|
||||
includePublicNoticesLink?: boolean
|
||||
includeProtectedNoticesLink?: boolean
|
||||
}) {
|
||||
|
|
@ -305,6 +307,7 @@ function ReleaseAuthorityLinks({
|
|||
|| releaseManifest.release_notes_url
|
||||
|| releaseManifest.corresponding_source_url
|
||||
|| releaseManifest.open_source_repo_url
|
||||
|| includeProtectedLaunchStatusLink
|
||||
|| includePublicNoticesLink
|
||||
|| includeProtectedNoticesLink,
|
||||
)
|
||||
|
|
@ -335,6 +338,11 @@ function ReleaseAuthorityLinks({
|
|||
Repository/notices
|
||||
</a>
|
||||
) : null}
|
||||
{includeProtectedLaunchStatusLink ? (
|
||||
<Link className="button button--ghost" to="/app/launch-status">
|
||||
Protected launch status
|
||||
</Link>
|
||||
) : null}
|
||||
{includeProtectedNoticesLink ? (
|
||||
<Link className="button button--ghost" to="/app/notices">
|
||||
Protected notices
|
||||
|
|
@ -395,12 +403,14 @@ function buildProtectedSupportTopicActions(topicKey: string): readonly Protected
|
|||
]
|
||||
case 'operator-access':
|
||||
return [
|
||||
{ label: 'Open protected launch status', to: '/app/launch-status' },
|
||||
{ label: 'Open downloads', to: buildProtectedDownloadPath('windows') },
|
||||
{ label: 'Open dashboard', to: '/app' },
|
||||
{ label: 'Open account', to: '/app/account' },
|
||||
]
|
||||
case 'studio-rollout':
|
||||
return [
|
||||
{ label: 'Open protected launch status', to: '/app/launch-status' },
|
||||
{ label: 'Open browser access', to: '/app/browser-access' },
|
||||
{ label: 'Open notices', to: '/app/notices' },
|
||||
{ label: 'Review release notes', to: '/changelog' },
|
||||
|
|
@ -600,6 +610,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: 'Open downloads', href: buildProtectedDownloadPath('windows'), primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Get help', href: buildSupportPath('operator-access') },
|
||||
],
|
||||
|
|
@ -620,6 +631,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: 'Open pricing', href: '/pricing', primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Get help', href: buildSupportPath('operator-access') },
|
||||
],
|
||||
|
|
@ -649,6 +661,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: `Download ${primaryActionTarget.platform} package`, href: primaryDownloadTarget.download_url, primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Review release notes', href: '/changelog' },
|
||||
],
|
||||
|
|
@ -670,6 +683,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: 'Review release notes', href: '/changelog', primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Get help', href: buildSupportPath('launch-readiness') },
|
||||
],
|
||||
|
|
@ -699,6 +713,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
...checkoutActions,
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Open pricing', href: '/pricing' },
|
||||
],
|
||||
}
|
||||
|
|
@ -716,6 +731,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: 'Open pricing', href: '/pricing', primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Get help', href: buildSupportPath('operator-access') },
|
||||
],
|
||||
|
|
@ -736,6 +752,7 @@ function buildProtectedReleaseActionSurface({
|
|||
],
|
||||
actions: [
|
||||
{ label: 'Open downloads', href: buildProtectedDownloadPath('windows'), primary: true },
|
||||
{ label: 'Open protected launch status', href: '/app/launch-status' },
|
||||
{ label: 'Review notices', href: '/app/notices' },
|
||||
{ label: 'Get help', href: buildSupportPath('operator-access') },
|
||||
],
|
||||
|
|
@ -784,6 +801,7 @@ function ProtectedReleaseAuthorityNotice({
|
|||
]}
|
||||
actions={[
|
||||
{ label: actionLabel, to: actionTo },
|
||||
{ label: 'Open protected launch status', to: '/app/launch-status' },
|
||||
{ label: 'Open support', to: buildSupportPath('operator-access') },
|
||||
]}
|
||||
/>
|
||||
|
|
@ -896,6 +914,7 @@ function ProtectedReleaseReferencesPanel({
|
|||
</ul>
|
||||
<ReleaseAuthorityLinks
|
||||
releaseManifest={releaseManifest}
|
||||
includeProtectedLaunchStatusLink
|
||||
includeProtectedNoticesLink
|
||||
includePublicNoticesLink
|
||||
/>
|
||||
|
|
@ -1584,6 +1603,7 @@ export function DownloadCenterPage() {
|
|||
</ul>
|
||||
<ReleaseAuthorityLinks
|
||||
releaseManifest={releaseManifest}
|
||||
includeProtectedLaunchStatusLink
|
||||
includePublicNoticesLink
|
||||
includeProtectedNoticesLink
|
||||
/>
|
||||
|
|
@ -1744,7 +1764,11 @@ export function BrowserAccessPage() {
|
|||
<li>Manifest viewer access: {releaseManifest.viewer.accessStatus || 'not resolved yet'}</li>
|
||||
<li>Support contact: {releaseManifest.support_email}</li>
|
||||
</ul>
|
||||
<ReleaseAuthorityLinks releaseManifest={releaseManifest} includeProtectedNoticesLink />
|
||||
<ReleaseAuthorityLinks
|
||||
releaseManifest={releaseManifest}
|
||||
includeProtectedLaunchStatusLink
|
||||
includeProtectedNoticesLink
|
||||
/>
|
||||
</Panel>
|
||||
<PackagedValidationPanel
|
||||
title={protectedPackagedDesktopProofTitle}
|
||||
|
|
@ -1908,7 +1932,11 @@ export function AccountPage() {
|
|||
Get help
|
||||
</Link>
|
||||
</div>
|
||||
<ReleaseAuthorityLinks releaseManifest={releaseManifest} includeProtectedNoticesLink />
|
||||
<ReleaseAuthorityLinks
|
||||
releaseManifest={releaseManifest}
|
||||
includeProtectedLaunchStatusLink
|
||||
includeProtectedNoticesLink
|
||||
/>
|
||||
</Panel>
|
||||
|
||||
<DesktopFirstLaunchChecklist
|
||||
|
|
@ -2001,6 +2029,7 @@ export function NoticesPage() {
|
|||
</p>
|
||||
<ReleaseAuthorityLinks
|
||||
releaseManifest={releaseManifest}
|
||||
includeProtectedLaunchStatusLink
|
||||
includeProtectedNoticesLink
|
||||
includePublicNoticesLink
|
||||
/>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue