Thread protected release surfaces to launch status

This commit is contained in:
axiomlogicnexus 2026-06-27 23:53:26 +00:00
parent af07f720ff
commit 163eb927cd
6 changed files with 48 additions and 9 deletions

View file

@ -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

View file

@ -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

View file

@ -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 () => {

View file

@ -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)
})

View file

@ -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
/>