diff --git a/website/src/__tests__/public-marketing-pages.test.tsx b/website/src/__tests__/public-marketing-pages.test.tsx
index 7585e3d..56a3e43 100644
--- a/website/src/__tests__/public-marketing-pages.test.tsx
+++ b/website/src/__tests__/public-marketing-pages.test.tsx
@@ -1036,7 +1036,44 @@ describe('public marketing pages', () => {
role: null,
accessStatus: null,
},
- platforms: [],
+ platforms: [
+ {
+ platform_key: 'windows',
+ platform: 'Windows',
+ subtitle: 'Primary shipping lane',
+ details: 'Current packaged validation is strongest on the Windows Unreal lane.',
+ configured: true,
+ channel: 'candidate',
+ version: '1.0.0',
+ build_id: 'win64-1000',
+ published_at: '2026-06-22T00:00:00.000Z',
+ file_name: 'HyperTwist-Windows.zip',
+ file_size_bytes: 1048576,
+ checksum_sha256: 'abc123',
+ download_url: null,
+ download_available: false,
+ validation_summary: {
+ lane: 'Windows Unreal packaged validation',
+ result: 'passed',
+ generated_at: '2026-06-22T01:43:08.7625247Z',
+ configuration: 'Development',
+ skip_build: true,
+ smoke_map_count: 2,
+ smoke_maps: [
+ {
+ map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining',
+ label: 'Magic120Cell dedicated-family training map',
+ result: 'passed',
+ },
+ {
+ map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining',
+ label: 'MagicCube5D dedicated-family training map',
+ result: 'passed',
+ },
+ ],
+ },
+ },
+ ],
},
})
@@ -1049,6 +1086,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('Release rollout checklist')).toBeTruthy()
expect(screen.getByText('Read the actual lane that changed')).toBeTruthy()
expect(screen.getByText(/Pair the release note with the current packaged-validation summary/i)).toBeTruthy()
+ expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
+ expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(await screen.findByRole('link', { name: /open release feed/i })).toBeTruthy()
expect(document.title).toBe('HyperTwist release notes | HyperTwist')
expect(document.head.querySelector('meta[property=\"og:url\"]')?.getAttribute('content')).toBe('https://hypertwist.app/changelog')
@@ -1107,13 +1146,52 @@ describe('public marketing pages', () => {
role: null,
accessStatus: null,
},
- platforms: [],
+ platforms: [
+ {
+ platform_key: 'windows',
+ platform: 'Windows',
+ subtitle: 'Primary shipping lane',
+ details: 'Current packaged validation is strongest on the Windows Unreal lane.',
+ configured: true,
+ channel: 'candidate',
+ version: '1.0.0',
+ build_id: 'win64-1000',
+ published_at: '2026-06-22T00:00:00.000Z',
+ file_name: 'HyperTwist-Windows.zip',
+ file_size_bytes: 1048576,
+ checksum_sha256: 'abc123',
+ download_url: null,
+ download_available: false,
+ validation_summary: {
+ lane: 'Windows Unreal packaged validation',
+ result: 'passed',
+ generated_at: '2026-06-22T01:43:08.7625247Z',
+ configuration: 'Development',
+ skip_build: true,
+ smoke_map_count: 2,
+ smoke_maps: [
+ {
+ map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining',
+ label: 'Magic120Cell dedicated-family training map',
+ result: 'passed',
+ },
+ {
+ map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining',
+ label: 'MagicCube5D dedicated-family training map',
+ result: 'passed',
+ },
+ ],
+ },
+ },
+ ],
},
})
- renderWithProviders(, ['/open-source-notices'])
- expect(screen.getByText('Distribution doctrine')).toBeTruthy()
- expect(screen.getByText('Public pages are distribution surfaces')).toBeTruthy()
+ const noticesView = renderWithProviders(, ['/open-source-notices'])
+ expect(within(noticesView.container).getByText('Distribution doctrine')).toBeTruthy()
+ expect(within(noticesView.container).getByText('Public pages are distribution surfaces')).toBeTruthy()
+ expect(within(noticesView.container).getByText('Current packaged desktop proof')).toBeTruthy()
+ expect(within(noticesView.container).getByText('Packaged validation passed')).toBeTruthy()
renderWithProviders(, ['/privacy'])
expect(screen.getByText('Practical privacy boundary')).toBeTruthy()
@@ -1123,8 +1201,10 @@ describe('public marketing pages', () => {
expect(screen.getByText('Terms in practice')).toBeTruthy()
expect(screen.getByText('Access model')).toBeTruthy()
- renderWithProviders(, ['/shipping-payment'])
- expect(screen.getByText('Digital delivery workflow')).toBeTruthy()
- expect(screen.getByText('Protected entitlement handoff')).toBeTruthy()
+ const shippingPaymentView = renderWithProviders(, ['/shipping-payment'])
+ expect(within(shippingPaymentView.container).getByText('Digital delivery workflow')).toBeTruthy()
+ expect(within(shippingPaymentView.container).getByText('Protected entitlement handoff')).toBeTruthy()
+ expect(within(shippingPaymentView.container).getByText('Current packaged desktop proof')).toBeTruthy()
+ expect(within(shippingPaymentView.container).getByText('Packaged validation passed')).toBeTruthy()
})
})
diff --git a/website/src/pages/public-pages-commerce.tsx b/website/src/pages/public-pages-commerce.tsx
index 5383d5d..550b837 100644
--- a/website/src/pages/public-pages-commerce.tsx
+++ b/website/src/pages/public-pages-commerce.tsx
@@ -338,6 +338,10 @@ export function OpenSourceNoticesPage() {
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
[releaseManifestQuery.data?.manifest],
)
+ const windowsValidationPlatform = useMemo(
+ () => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
+ [releaseManifest],
+ )
return (
<>
@@ -399,6 +403,20 @@ export function OpenSourceNoticesPage() {
+ {windowsValidationPlatform ? (
+
+
+
+
+ Open download center
+
+
+ Review release notes
+
+
+
+ ) : null}
+
resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
+ [releaseManifestQuery.data?.manifest],
+ )
+ const windowsValidationPlatform = useMemo(
+ () => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
+ [releaseManifest],
+ )
+
return (
<>
+
+ {windowsValidationPlatform ? (
+
+
+
+
+ Open download center
+
+
+ Review notices
+
+
+
+ ) : null}
>
)
diff --git a/website/src/pages/public-pages-marketing.tsx b/website/src/pages/public-pages-marketing.tsx
index 59d6256..08b1079 100644
--- a/website/src/pages/public-pages-marketing.tsx
+++ b/website/src/pages/public-pages-marketing.tsx
@@ -876,6 +876,10 @@ export function ChangelogPage() {
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
[releaseManifestQuery.data?.manifest],
)
+ const windowsValidationPlatform = useMemo(
+ () => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
+ [releaseManifest],
+ )
return (
<>
@@ -938,6 +942,20 @@ export function ChangelogPage() {
+ {windowsValidationPlatform ? (
+
+
+
+
+ Open download center
+
+
+ Open public manual
+
+
+
+ ) : null}
+
{releaseManifest.release_notes_url ? (