Unify HyperTwist public release reference surfaces

This commit is contained in:
axiomlogicnexus 2026-06-25 03:23:31 +00:00
parent 0c895c7890
commit 5021f030ca
8 changed files with 310 additions and 77 deletions

View file

@ -760,3 +760,56 @@ Latest website and dependency hardening follow-up later on `2026-06-23`:
- current package and auth-server posture is more explicit
- unresolved third-party dependency residue is documented honestly instead
of being silently ignored
Latest shared-release-bundle follow-up on `2026-06-25`:
- the public website now carries a reusable shared release-reference bundle
across the full operator-facing public route family:
- homepage
- about
- features
- resources
- docs
- support
- changelog
- pricing
- download
- open-source notices
- privacy
- terms
- shipping/payment
- that shared bundle keeps public docs, release notes, corresponding source,
public repo/notices reference, and support contact visible together instead
of requiring operators to reconstruct the release follow-through path from
scattered footer or page-local fragments
- the same follow-up also removed duplicated public release-manifest
resolution logic from `PricingPage` and `DownloadPage` by routing both
through the shared `usePublicReleaseManifestView()` helper already used by
the rest of the public route family
- focused validation for that continuation stayed green under:
- `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx`
- `1` file passed
- `12` tests passed
- the broader owned website/runtime/server umbrella then also stayed green
again under:
- `scripts/run-hypertwist-web-surface-validation.sh`
- focused website route/auth/release validation: `12` files, `64` tests
passed
- `npm --prefix website run build`
- `npm --prefix website/server run type-check`
- `npm --prefix website/server test -- --run`
- `10` website/server files passed, `36` tests passed
- `npm --prefix Content/Browser run verify:shell`
- `npm --prefix Content/Browser run build`
- `website/` and `Content/Browser/` production audits: `found 0
vulnerabilities`
- `website/server` again retained only the already-documented upstream
`supertokens-node -> nodemailer` residual advisory
- the HyperTwist-owned structural loop remained clean on the same packet:
- `scripts/run-hypertwist-sentrux-source-only.sh`
- `Quality: 6210`
- all `7` rules pass
- `scripts/run-hypertwist-gitnexus-analyze.sh`
- `16,253` nodes, `38,116` edges, `665` clusters, `300` flows
- `scripts/run-hypertwist-gitnexus-status.sh`
- bounded mirror `Status: up-to-date`

View file

@ -797,3 +797,54 @@ Current audit note:
- `C:\HyperTwist\docs\ops\HYPERTWIST_UNREAL_INPUT_AND_XR_COMPLETENESS_AUDIT_2026-06-22.md`
- `C:\HyperTwist\docs\ops\HYPERTWIST_NATIVE_XR_HOST_AND_PLUGIN_DECISION_PACKET_2026-06-24.md`
## Latest public/manual follow-up (`2026-06-25`)
- the public website now carries one shared release-reference bundle across the
major operator-facing public routes:
- homepage
- about
- features
- resources
- docs
- support
- changelog
- pricing
- download
- open-source notices
- privacy
- terms
- shipping/payment
- that shared bundle keeps public docs, release notes, corresponding source,
public repo/notices reference, and support contact visible as one coherent
launch surface instead of fragmenting release follow-through by page
- `PricingPage` and `DownloadPage` now also consume the shared
`usePublicReleaseManifestView()` helper rather than duplicating public
release-manifest resolution logic locally
- focused public/manual validation stayed green under:
- `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx`
- `1` test file passed
- `12` tests passed
- the owned umbrella gate stayed green again under:
- `scripts/run-hypertwist-web-surface-validation.sh`
- focused website route/auth/release validation: `12` files, `64` tests
passed
- `npm --prefix website run build`
- `npm --prefix website/server run type-check`
- `npm --prefix website/server test -- --run`
- `10` website/server files passed, `36` tests passed
- `npm --prefix Content/Browser run verify:shell`
- `npm --prefix Content/Browser run build`
- `website/` and `Content/Browser/` production audits: `found 0
vulnerabilities`
- `website/server` retained only the already-documented upstream
`supertokens-node -> nodemailer` residual advisory
- the HyperTwist-owned structural loop also stayed healthy after that same
packet:
- `scripts/run-hypertwist-sentrux-source-only.sh`
- `Quality: 6210`
- all `7` rules pass
- `scripts/run-hypertwist-gitnexus-analyze.sh`
- `16,253` nodes, `38,116` edges, `665` clusters, `300` flows
- `scripts/run-hypertwist-gitnexus-status.sh`
- bounded mirror `Status: up-to-date`

View file

@ -251,6 +251,9 @@ describe('public marketing pages', () => {
expect(screen.getByText('Protected entitlement handoff')).toBeTruthy()
expect(screen.getByText('Distribution doctrine')).toBeTruthy()
expect(screen.getByText('Public pages are distribution surfaces')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy()
expect(screen.getByText('Pair desktop access to the browser account')).toBeTruthy()
expect(await screen.findByText('Version: 1.0.0')).toBeTruthy()
expect(screen.getByText('SHA-256: abc123')).toBeTruthy()
@ -416,6 +419,8 @@ describe('public marketing pages', () => {
expect(screen.getAllByText(/public auth runtime posture/i).length).toBeGreaterThan(0)
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(screen.getByText('How a real first session flows')).toBeTruthy()
expect(screen.getByText('Choose the right HyperTwist surface')).toBeTruthy()
expect(screen.getByText('Move into the protected dashboard')).toBeTruthy()
@ -540,6 +545,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('About-page launch and release posture')).toBeTruthy()
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy()
})
it('renders the public feature atlas with capability tiers and route-aware metadata', async () => {
@ -653,6 +660,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('Public feature and launch posture')).toBeTruthy()
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(document.title).toBe('HyperTwist features | HyperTwist')
expect(document.head.querySelector('meta[property="og:url"]')?.getAttribute('content')).toBe('https://hypertwist.app/features')
})
@ -833,6 +842,9 @@ describe('public marketing pages', () => {
expect(screen.getByText('Owns recognition, replay, coaching, and packaged training behavior')).toBeTruthy()
expect(screen.getByText('Commercial distribution doctrine')).toBeTruthy()
expect(screen.getByText('Public pages are distribution surfaces')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy()
expect(screen.getByText('Terms of access in practice')).toBeTruthy()
expect(screen.getByText('Access model')).toBeTruthy()
const checkoutLinks = screen.getAllByRole('link', { name: /open paddle checkout/i })
@ -927,6 +939,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('Current support-facing launch posture')).toBeTruthy()
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(screen.getByText('Digital delivery workflow')).toBeTruthy()
expect(screen.getByText('Post-install operator workflow')).toBeTruthy()
expect(screen.getByText('Privacy and compliance boundary')).toBeTruthy()
@ -1052,6 +1066,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('Deployment readiness snapshot')).toBeTruthy()
expect(screen.getAllByText('XR groundwork exists, but the full VR lane is not finished').length).toBeGreaterThan(0)
expect(screen.getByText('Higher-dimensional runtime ownership')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
})
it('renders the public operator manual on the docs page', async () => {
@ -1142,6 +1158,8 @@ describe('public marketing pages', () => {
expect(screen.getByText('If the desktop app is primary, why keep the web version?')).toBeTruthy()
expect(screen.getByText(/intentionally narrower than the simulator for training and device\/runtime work/i)).toBeTruthy()
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
expect(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
expect(await screen.findByRole('link', { name: /open public docs portal/i })).toBeTruthy()
})
@ -1251,6 +1269,8 @@ describe('public marketing pages', () => {
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(screen.getByText('Release references and source availability')).toBeTruthy()
expect(screen.getByRole('link', { name: 'https://notes.hypertwist.app' })).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')
@ -1353,6 +1373,9 @@ describe('public marketing pages', () => {
const noticesView = renderWithProviders(<OpenSourceNoticesPage />, ['/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('Release and source references')).toBeTruthy()
expect((await within(noticesView.container).findAllByRole('link', { name: 'https://hypertwist.app/open-source/source.zip' })).length).toBeGreaterThan(0)
expect((await within(noticesView.container).findAllByRole('link', { name: 'https://github.com/hypertwist/hypertwist' })).length).toBeGreaterThan(0)
expect(within(noticesView.container).getByText('Choose the right HyperTwist surface')).toBeTruthy()
expect(within(noticesView.container).getByText('Current packaged desktop proof')).toBeTruthy()
expect(within(noticesView.container).getByText('Packaged validation passed')).toBeTruthy()
@ -1366,6 +1389,8 @@ describe('public marketing pages', () => {
expect(within(privacyView.container).getByText('Support-safe escalation boundary')).toBeTruthy()
expect(within(privacyView.container).getByText('Current packaged desktop proof')).toBeTruthy()
expect(within(privacyView.container).getByText('Packaged validation passed')).toBeTruthy()
expect(within(privacyView.container).getByText('Release references and source availability')).toBeTruthy()
expect(within(privacyView.container).getByRole('link', { name: 'https://docs.hypertwist.app' })).toBeTruthy()
const termsView = renderWithProviders(<TermsPage />, ['/terms'])
expect(within(termsView.container).getByText('Terms in practice')).toBeTruthy()
@ -1376,12 +1401,16 @@ describe('public marketing pages', () => {
expect(within(termsView.container).getByText('Release and redistribution checklist')).toBeTruthy()
expect(within(termsView.container).getByText('Current packaged desktop proof')).toBeTruthy()
expect(within(termsView.container).getByText('Packaged validation passed')).toBeTruthy()
expect(within(termsView.container).getByText('Release references and source availability')).toBeTruthy()
expect(within(termsView.container).getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy()
const shippingPaymentView = renderWithProviders(<ShippingPaymentPage />, ['/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('What happens after access is granted')).toBeTruthy()
expect(within(shippingPaymentView.container).getByText('Choose the right HyperTwist surface')).toBeTruthy()
expect(within(shippingPaymentView.container).getByText('Release references and source availability')).toBeTruthy()
expect(within(shippingPaymentView.container).getByRole('link', { name: 'https://notes.hypertwist.app' })).toBeTruthy()
expect(within(shippingPaymentView.container).getByText('Terms of access in practice')).toBeTruthy()
expect(within(shippingPaymentView.container).getByText('Distribution doctrine')).toBeTruthy()
expect(within(shippingPaymentView.container).getByText('Release and redistribution checklist')).toBeTruthy()

View file

@ -322,6 +322,94 @@ export function PublicPackagedDesktopProofSection({
)
}
export function ReleaseAuthorityBundleSection({
releaseManifest,
title = 'Release references and source availability',
description = 'Treat public docs, release notes, corresponding source, notices repository, and operator contact as one launch bundle so distribution-critical pages do not fragment the release story.',
}: {
releaseManifest: ReturnType<typeof resolveReleaseManifestView>
title?: string
description?: string
}) {
const references = [
{
title: 'Public manual',
description:
'The public docs portal is the product-safe manual for browser-versus-desktop boundaries, rollout posture, and simulator truth.',
href: releaseManifest.public_docs_url,
configuredLabel: 'Configured',
missingLabel: 'Configure public docs URL before external launch',
linkLabel: releaseManifest.public_docs_url || 'Configure public docs URL before external launch',
},
{
title: 'Release notes feed',
description:
'Release notes keep public launch pages anchored to real browser, package, control-boundary, and distribution changes.',
href: releaseManifest.release_notes_url,
configuredLabel: 'Configured',
missingLabel: 'Configure release notes URL before external launch',
linkLabel: releaseManifest.release_notes_url || 'Configure release notes URL before external launch',
},
{
title: 'Corresponding source',
description:
'Any MPL-covered shipped build needs a stable corresponding-source location for the exact distributed material.',
href: releaseManifest.corresponding_source_url,
configuredLabel: 'Configured',
missingLabel: 'Configure corresponding-source URL before external launch',
linkLabel:
releaseManifest.corresponding_source_url || 'Configure corresponding-source URL before external launch',
},
{
title: 'Open-source repo and notices reference',
description:
'The public repository and notices reference keeps release, legal, and redistribution follow-through visible outside the simulator.',
href: releaseManifest.open_source_repo_url,
configuredLabel: 'Configured',
missingLabel: 'Configure public repo/notices URL before external launch',
linkLabel: releaseManifest.open_source_repo_url || 'Configure public repo/notices URL before external launch',
},
{
title: 'Operator support contact',
description:
'Support contact belongs in the same bundle so release, entitlement, notice, and rollout questions do not force operators to improvise escalation paths.',
href: releaseManifest.support_email ? `mailto:${releaseManifest.support_email}` : null,
configuredLabel: 'Ready',
missingLabel: 'Configure support email before external launch',
linkLabel: releaseManifest.support_email || 'Configure support email before external launch',
},
] as const
return (
<Section title={title} description={description}>
<div className="card-grid">
{references.map((reference) => {
const configured = Boolean(reference.href)
return (
<article key={reference.title} className="card">
<p className={`status-pill ${configured ? '' : 'status-pill--warn'}`}>
{configured ? reference.configuredLabel : 'Pending'}
</p>
<h3>{reference.title}</h3>
<p>{reference.description}</p>
<p className="top-gap">
{reference.href ? (
<a href={reference.href} target="_blank" rel="noreferrer">
{reference.linkLabel}
</a>
) : (
reference.missingLabel
)}
</p>
</article>
)
})}
</div>
</Section>
)
}
export function PlanActionLink({ href, label }: { href: string; label: string }) {
if (isExternalHref(href)) {
return (

View file

@ -1,7 +1,5 @@
import { useMemo } from 'react'
import { useQuery } from '@tanstack/react-query'
import { Link } from 'react-router-dom'
import { getReleaseManifest } from '../auth/auth-api'
import { MarketingShell } from '../components/layout/MarketingShell'
import { SiteMetadata } from '../components/seo/SiteMetadata'
import { OperationalStatusCallout } from '../components/ui/OperationalStatusCallout'
@ -9,11 +7,7 @@ import { ProductSurfaceMatrix } from '../components/ui/ProductSurfaceMatrix'
import { PublicLaunchStatus } from '../components/ui/PublicLaunchStatus'
import { ReleaseValidationSummary } from '../components/ui/ReleaseValidationSummary'
import { paddleReadyDescription } from '../site-config'
import {
buildReleaseMetadataItems,
resolveReleaseCommerceView,
resolveReleaseManifestView,
} from '../release-manifest'
import { buildReleaseMetadataItems, resolveReleaseCommerceView } from '../release-manifest'
import { buildLoginPath, buildProtectedDownloadPath, buildSupportPath } from '../site-routes'
import {
desktopFirstLaunchCards,
@ -31,12 +25,12 @@ import {
} from '../site-data'
import {
BrowserDesktopRealitySection,
buildPublicReleaseManifestFallback,
DeliverySurfaceResponsibilitiesGrid,
explorerFallbackPlan,
operatorFallbackPlan,
PlanActionLink,
PublicPackagedDesktopProofSection,
ReleaseAuthorityBundleSection,
releaseCommerceFallback,
Section,
studioFallbackPlan,
@ -45,23 +39,11 @@ import {
} from './public-page-helpers'
export function PricingPage() {
const releaseManifestQuery = useQuery({
queryKey: ['release-manifest', 'public'],
queryFn: getReleaseManifest,
retry: false,
})
const releaseManifest = useMemo(
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
[releaseManifestQuery.data?.manifest],
)
const { releaseManifestQuery, releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-pricing')
const releaseCommerce = useMemo(
() => resolveReleaseCommerceView(releaseManifestQuery.data?.manifest, releaseCommerceFallback),
[releaseManifestQuery.data?.manifest],
)
const windowsValidationPlatform = useMemo(
() => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows') || null,
[releaseManifest.platforms],
)
const runtimePlanCatalog = useMemo(() => ([
explorerFallbackPlan,
{
@ -120,6 +102,11 @@ export function PricingPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Pricing is a distribution surface, so its launch truth should carry the same docs, release, source, and escalation bundle as the rest of the public release lane."
/>
<Section
title="What happens after access is granted"
description="Pricing only stays professional when it explains the real path from browser entitlement into the packaged simulator instead of stopping at the checkout button."
@ -202,20 +189,7 @@ export function PricingPage() {
}
export function DownloadPage() {
const releaseManifestQuery = useQuery({
queryKey: ['release-manifest', 'public'],
queryFn: getReleaseManifest,
retry: false,
})
const releaseManifest = useMemo(
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
[releaseManifestQuery.data?.manifest],
)
const windowsValidationPlatform = useMemo(
() => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows') || null,
[releaseManifest.platforms],
)
const { releaseManifestQuery, releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-download')
return (
<>
@ -407,44 +381,14 @@ export function DownloadPage() {
<p>{signal.description}</p>
</article>
))}
<article className="card">
<h3>Operator rollout references</h3>
<ul className="list">
{releaseManifest.public_docs_url ? (
<li>
Public docs:{' '}
<a href={releaseManifest.public_docs_url} target="_blank" rel="noreferrer">
{releaseManifest.public_docs_url}
</a>
</li>
) : (
<li>Public docs URL not configured yet.</li>
)}
{releaseManifest.release_notes_url ? (
<li>
Release notes:{' '}
<a href={releaseManifest.release_notes_url} target="_blank" rel="noreferrer">
{releaseManifest.release_notes_url}
</a>
</li>
) : (
<li>Release notes URL not configured yet.</li>
)}
<li>
Notices and source posture:{' '}
{releaseManifest.corresponding_source_url ? (
<a href={releaseManifest.corresponding_source_url} target="_blank" rel="noreferrer">
Corresponding source
</a>
) : (
'configure the corresponding-source URL before external launch'
)}
</li>
</ul>
</article>
</div>
</Section>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Download posture is more trustworthy when docs, release notes, corresponding source, notices repository, and operator escalation remain visible as one coherent release bundle."
/>
<Section title="Why this page does not expose raw download URLs">
<article className="callout">
<p>
@ -536,6 +480,12 @@ export function OpenSourceNoticesPage() {
</div>
</Section>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
title="Release and source references"
description="The notices lane is stronger when corresponding source, release notes, docs, repo/notices references, and operator escalation stay visible together instead of being scattered across separate public pages."
/>
<Section title="Distribution readiness">
<PublicLaunchStatus title="Notices and corresponding-source readiness" />
</Section>
@ -592,7 +542,7 @@ export function OpenSourceNoticesPage() {
}
export function PrivacyPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-privacy')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-privacy')
return (
<>
@ -659,6 +609,11 @@ export function PrivacyPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Privacy posture remains more actionable when docs, release notes, corresponding source, notices repository, and operator support stay reachable from the same public boundary page."
/>
<Section
title="Support-safe escalation boundary"
description="When privacy or access concerns show up during rollout, support should keep account, runtime, and compliance questions separated instead of flattening them together."
@ -683,7 +638,7 @@ export function PrivacyPage() {
}
export function TermsPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-terms')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-terms')
return (
<>
@ -750,6 +705,11 @@ export function TermsPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Terms and access language are easier to trust when they keep public docs, release notes, corresponding source, notices references, and support follow-through in one visible release bundle."
/>
<Section
title="Release and redistribution checklist"
description="Terms become materially more trustworthy when they stay attached to release proof, download gating, and legal follow-through."
@ -773,7 +733,7 @@ export function TermsPage() {
}
export function ShippingPaymentPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-shipping-payment')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-shipping-payment')
return (
<>
@ -853,6 +813,11 @@ export function ShippingPaymentPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Shipping and payment posture should carry the same docs, release, source, notices, and support bundle as the rest of the public desktop-distribution lane."
/>
<Section
title="Terms of access in practice"
description="The shipping/payment page should still tell operators what they are actually buying access to and what remains outside the current browser scope."

View file

@ -17,13 +17,14 @@ import {
import {
BrowserDesktopRealitySection,
PublicPackagedDesktopProofSection,
ReleaseAuthorityBundleSection,
Section,
SurfaceChoiceGuideSection,
usePublicReleaseManifestView,
} from './public-page-helpers'
export function FeaturesPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-features')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-features')
return (
<>
@ -187,6 +188,11 @@ export function FeaturesPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="The feature atlas is part of the rollout story too, so it should keep docs, release notes, source, notices, and support references attached to the capability map."
/>
<Section
title="Explicit boundaries"
description="These are the product claims HyperTwist refuses to blur. Keeping them visible is part of the product quality bar."

View file

@ -37,6 +37,7 @@ import {
BrowserDesktopRealitySection,
DeliverySurfaceResponsibilitiesGrid,
PublicPackagedDesktopProofSection,
ReleaseAuthorityBundleSection,
Section,
SurfaceChoiceGuideSection,
supportTopicDirectory,
@ -255,7 +256,7 @@ function SupportTopicDirectorySection({
}
export function HomeLanding() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-home')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-home')
return (
<>
@ -401,6 +402,11 @@ export function HomeLanding() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="The homepage is part of the real release lane, so it keeps docs, release notes, source, notices, and operator support references bundled instead of scattering them behind later pages."
/>
<Section
title="How a real first session flows"
description="This is the public-facing operator path from curiosity into the actual simulator lane, without pretending the browser already replaced the desktop runtime."
@ -434,7 +440,7 @@ export function HomeLanding() {
}
export function AboutPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-about')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-about')
return (
<>
@ -576,6 +582,11 @@ export function AboutPage() {
{ to: '/docs', label: 'Open public manual' },
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="The about page should keep its product narrative tied to the same docs, release, source, notices, and support references that govern real rollout decisions."
/>
</MarketingShell>
</>
)
@ -805,6 +816,11 @@ export function ResourcesPage() {
{ to: '/app', label: 'Open operator dashboard' },
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="The resources portal is stronger when docs, release notes, corresponding source, notices, and support contact remain visible as part of the same operator reference bundle."
/>
</MarketingShell>
</>
)
@ -913,6 +929,11 @@ export function DocsPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="The public manual stays more useful when it ends with the same docs, release, source, notices, and support bundle operators need for real rollout follow-through."
/>
<FaqCardSection
title="Common operator questions"
description="These answers keep the public manual direct about the current browser shell, downloadable runtime, and bounded XR/settings truth."
@ -936,7 +957,7 @@ export function SupportPage() {
const supportTopic = searchParams.get('topic')
const selectedSupportTopicKey = supportTopic && supportTopicGuidance[supportTopic] ? supportTopic : null
const selectedSupportTopic = selectedSupportTopicKey ? supportTopicGuidance[selectedSupportTopicKey] : null
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-support')
const { releaseManifest, windowsValidationPlatform } = usePublicReleaseManifestView('public-support')
return (
<>
@ -983,6 +1004,11 @@ export function SupportPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Support conversations move faster when docs, release notes, source, notices, and operator contact stay visible beside the launch and package evidence."
/>
<Section title="Contact">
<article className="card">
<p>
@ -1180,6 +1206,11 @@ export function ChangelogPage() {
]}
/>
<ReleaseAuthorityBundleSection
releaseManifest={releaseManifest}
description="Release notes are operationally stronger when the feed also carries the same docs, source, notices, and support references needed to act on a change safely."
/>
{releaseManifest.release_notes_url ? (
<Section title="External release notes">
<a className="button button--ghost" href={releaseManifest.release_notes_url} target="_blank" rel="noreferrer">

View file

@ -821,6 +821,16 @@ export const resourceCollections = [
] as const
export const changelogEntries = [
{
date: 'June 25, 2026',
title: 'Public pages now carry one shared release-reference bundle end to end',
details: 'Home, About, Features, Resources, Docs, Support, Changelog, Privacy, Terms, Pricing, Download, Notices, and Shipping/Payment now all keep the same direct docs, release-notes, corresponding-source, public-repository/notices, and operator-support references visible instead of fragmenting release follow-through by route.',
},
{
date: 'June 25, 2026',
title: 'Public commerce pages now use the shared release-manifest view',
details: 'Pricing and Download now consume the same public release-manifest helper used across the rest of the site, removing duplicated manifest-resolution logic while keeping platform proof, fallback posture, and operator handoff behavior unchanged.',
},
{
date: 'June 24, 2026',
title: 'Feature atlas and support now carry the full browser-versus-desktop reality section too',