Harden public manual evidence and release routing

This commit is contained in:
axiomlogicnexus 2026-06-24 22:27:16 +00:00
parent 556ad2edf2
commit de02745b82
9 changed files with 110 additions and 40 deletions

View file

@ -273,6 +273,18 @@ Latest same-day browser/distribution continuity follow-up still on `2026-06-24`:
- protected notices
- protected browser-access
- protected dashboard
- the remaining public pricing, launch-status, and download fallback CTAs now
also stop opening generic `/login` or broad support detours when the real
next lane is already known:
- the free explorer plan now preserves `/register?next=/app`
- operator fallback now opens the protected downloads lane directly
- studio fallback now opens the protected rollout/browser-access lane
- public launch-status and download fallback callouts now point at exact
protected release, notices, and dashboard follow-through
- the public About and Support pages now also surface the same live launch and
packaged-proof evidence already shown on the stronger public manual routes,
so those narrative/help surfaces no longer talk about maturity only in the
abstract
- the public topic cards therefore no longer dead-end on broad public guidance when the real next step is signed-in protected follow-through
- the new shared callout posture explicitly separates:
- what still works
@ -283,6 +295,18 @@ Latest same-day browser/distribution continuity follow-up still on `2026-06-24`:
- protected-route loading with preserved next-target sign-in and support escape hatches
- dashboard auth-health and release-authority fallback continuity
- public download and protected release-lane fallback continuity
- the same bounded follow-up then reran the HyperTwist-owned refactor tools on
the current public-route continuity state:
- `scripts/run-hypertwist-sentrux-source-only.sh`
- `Quality: 6135`
- all `7` rules passing
- `scripts/run-hypertwist-gitnexus-analyze.sh`
- `16,236` nodes
- `38,055` edges
- `670` clusters
- `300` flows
- `scripts/run-hypertwist-gitnexus-status.sh`
- `Status: up-to-date`
- this hardening is still boundary-honest:
- degraded browser auth does not become a false production claim
- degraded release-manifest lookup does not unlock raw package delivery

File diff suppressed because one or more lines are too long

View file

@ -41,7 +41,7 @@ vi.mock('../site-config', () => ({
name: 'Explorer',
price: 'Free',
ctaLabel: 'Start in the browser',
ctaHref: '/register',
ctaHref: '/register?next=%2Fapp',
notes: 'Preview the browser account shell, operator dashboard, release notes, and desktop onboarding posture.',
features: ['Browser account access'],
},
@ -49,8 +49,8 @@ vi.mock('../site-config', () => ({
key: 'operator',
name: 'Operator',
price: 'Launch pricing via Paddle',
ctaLabel: 'Request operator access',
ctaHref: '/support?topic=operator-access',
ctaLabel: 'Open protected downloads',
ctaHref: '/app/downloads?platform=windows',
notes: 'Desktop-first recognition, replay, training, and higher-dimensional runtime ownership for active training operators.',
features: ['Desktop download access'],
},
@ -58,8 +58,8 @@ vi.mock('../site-config', () => ({
key: 'studio',
name: 'Studio',
price: 'Contact for launch readiness',
ctaLabel: 'Talk to HyperTwist',
ctaHref: '/support?topic=studio-rollout',
ctaLabel: 'Open protected rollout lane',
ctaHref: '/app/browser-access',
notes: 'Higher-dimensional families, operator deployment support, and packaging/validation coordination for production lanes.',
features: ['Magic120Cell and 5D operator posture'],
},

View file

@ -61,7 +61,7 @@ vi.mock('../site-config', () => ({
name: 'Explorer',
price: 'Free',
ctaLabel: 'Start in the browser',
ctaHref: '/register',
ctaHref: '/register?next=%2Fapp',
notes: 'Preview the browser account shell, operator dashboard, release notes, and desktop onboarding posture.',
features: ['Browser account access'],
},
@ -69,8 +69,8 @@ vi.mock('../site-config', () => ({
key: 'operator',
name: 'Operator',
price: 'Launch pricing via Paddle',
ctaLabel: 'Request operator access',
ctaHref: '/support?topic=operator-access',
ctaLabel: 'Open protected downloads',
ctaHref: '/app/downloads?platform=windows',
notes: 'Desktop-first recognition, replay, training, and higher-dimensional runtime ownership for active training operators.',
features: ['Desktop download access'],
},
@ -78,8 +78,8 @@ vi.mock('../site-config', () => ({
key: 'studio',
name: 'Studio',
price: 'Contact for launch readiness',
ctaLabel: 'Talk to HyperTwist',
ctaHref: '/support?topic=studio-rollout',
ctaLabel: 'Open protected rollout lane',
ctaHref: '/app/browser-access',
notes: 'Higher-dimensional families, operator deployment support, and packaging/validation coordination for production lanes.',
features: ['Magic120Cell and 5D operator posture'],
},
@ -303,7 +303,7 @@ describe('public marketing pages', () => {
expect(await screen.findByText(/public release fallback/i)).toBeTruthy()
expect(screen.getByText(/direct package delivery stays intentionally withheld until that authority returns/i)).toBeTruthy()
expect(screen.getByText('What stays intentionally withheld')).toBeTruthy()
expect(screen.getByRole('link', { name: 'Sign in to inspect access' }).getAttribute('href')).toBe('/login')
expect(screen.getByRole('link', { name: 'Open protected downloads' }).getAttribute('href')).toBe('/app/downloads?platform=windows')
expect(screen.getByRole('link', { name: 'Open support' }).getAttribute('href')).toBe('/support?topic=operator-access')
})
@ -524,6 +524,10 @@ describe('public marketing pages', () => {
expect(screen.getByText('Generates desktop-link tokens for safe browser-to-desktop handoff')).toBeTruthy()
expect(screen.getByText('Must prove its own runtime and backend contract before being marketed as live')).toBeTruthy()
expect(screen.getByText('Release and deployment maturity')).toBeTruthy()
expect(screen.getByText('Current public rollout posture')).toBeTruthy()
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()
})
it('renders the public feature atlas with capability tiers and route-aware metadata', async () => {
@ -638,7 +642,7 @@ describe('public marketing pages', () => {
expect(document.head.querySelector('meta[property="og:url"]')?.getAttribute('content')).toBe('https://hypertwist.app/features')
})
it('uses useful support fallback routes for plans that do not yet have live checkouts', () => {
it('uses exact protected fallback routes for plans that do not yet have live checkouts', () => {
mockGetAuthHealth.mockResolvedValue({
ok: true,
service: 'hypertwist-auth-server',
@ -696,8 +700,8 @@ describe('public marketing pages', () => {
})
renderWithProviders(<PricingPage />)
expect(screen.getByRole('link', { name: /request operator access/i }).getAttribute('href')).toBe('/support?topic=operator-access')
expect(screen.getByRole('link', { name: /talk to hypertwist/i }).getAttribute('href')).toBe('/support?topic=studio-rollout')
expect(screen.getByRole('link', { name: /open protected downloads/i }).getAttribute('href')).toBe('/app/downloads?platform=windows')
expect(screen.getByRole('link', { name: /open protected rollout lane/i }).getAttribute('href')).toBe('/app/browser-access')
})
it('prefers runtime checkout URLs and live plan prices on the pricing page when the manifest provides them', async () => {
@ -897,6 +901,10 @@ describe('public marketing pages', () => {
expect(screen.getAllByText('Manual and route focus').length).toBeGreaterThan(0)
expect(screen.getByText('Recovery and degraded-state guidance')).toBeTruthy()
expect(screen.getByText('Desktop-first continuity during recovery')).toBeTruthy()
expect(screen.getByText('Current release and package posture')).toBeTruthy()
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('Digital delivery workflow')).toBeTruthy()
expect(screen.getByText('Post-install operator workflow')).toBeTruthy()
expect(screen.getByText('Privacy and compliance boundary')).toBeTruthy()

View file

@ -4,7 +4,7 @@ import { Link } from 'react-router-dom'
import { getAuthHealth } from '../../auth/auth-api'
import { resolvePublicLaunchStatusSummary } from '../../public-launch'
import { launchReadiness } from '../../site-config'
import { buildSupportPath } from '../../site-routes'
import { buildProtectedDownloadPath } from '../../site-routes'
function usePublicLaunchStatus() {
const authHealthQuery = useQuery({
@ -58,8 +58,8 @@ export function MarketingLaunchStatusBanner() {
<Link className="inline-link" to="/pricing">
View launch posture
</Link>
<Link className="inline-link" to={buildSupportPath('launch-readiness')}>
Get launch help
<Link className="inline-link" to={buildProtectedDownloadPath('windows')}>
Open protected release lane
</Link>
</div>
</article>
@ -105,11 +105,11 @@ export function PublicLaunchStatus({
) : null}
{!ready ? (
<div className="button-row top-gap">
<Link className="button button--ghost" to={buildSupportPath('launch-readiness')}>
Contact launch support
<Link className="button button--ghost" to={buildProtectedDownloadPath('windows')}>
Open protected release lane
</Link>
<Link className="button button--ghost" to="/open-source-notices">
Review notices
<Link className="button button--ghost" to="/app/notices">
Open protected notices
</Link>
</div>
) : null}

View file

@ -14,7 +14,7 @@ import {
resolveReleaseCommerceView,
resolveReleaseManifestView,
} from '../release-manifest'
import { buildProtectedDownloadPath, buildSupportPath } from '../site-routes'
import { buildLoginPath, buildProtectedDownloadPath, buildSupportPath } from '../site-routes'
import {
desktopFirstLaunchCards,
desktopDownloadSteps,
@ -65,14 +65,14 @@ export function PricingPage() {
{
...operatorFallbackPlan,
price: releaseCommerce.plan_price_operator,
ctaLabel: releaseCommerce.operator_checkout_url ? 'Open Paddle checkout' : 'Request operator access',
ctaHref: releaseCommerce.operator_checkout_url || buildSupportPath('operator-access'),
ctaLabel: releaseCommerce.operator_checkout_url ? 'Open Paddle checkout' : operatorFallbackPlan.ctaLabel,
ctaHref: releaseCommerce.operator_checkout_url || operatorFallbackPlan.ctaHref,
},
{
...studioFallbackPlan,
price: releaseCommerce.plan_price_studio,
ctaLabel: releaseCommerce.studio_checkout_url ? 'Open Paddle checkout' : 'Talk to HyperTwist',
ctaHref: releaseCommerce.studio_checkout_url || buildSupportPath('studio-rollout'),
ctaLabel: releaseCommerce.studio_checkout_url ? 'Open Paddle checkout' : studioFallbackPlan.ctaLabel,
ctaHref: releaseCommerce.studio_checkout_url || studioFallbackPlan.ctaHref,
},
]), [releaseCommerce])
@ -261,7 +261,7 @@ export function DownloadPage() {
},
]}
actions={[
{ label: 'Sign in to inspect access', to: '/login' },
{ label: 'Open protected downloads', to: buildProtectedDownloadPath('windows') },
{ label: 'Open support', to: buildSupportPath('operator-access') },
]}
/>
@ -443,8 +443,8 @@ export function DownloadPage() {
download links live behind the protected dashboard where plan and entitlement
state are resolved.
</p>
<Link className="button button--ghost" to="/login">
Sign in to check access
<Link className="button button--ghost" to={buildProtectedDownloadPath('windows')}>
Open protected download lane
</Link>
</article>
</Section>
@ -455,8 +455,8 @@ export function DownloadPage() {
After sign-in, open the operator dashboard to generate a desktop-link token.
That token is designed to hand browser identity and plan posture over to the local desktop app without exposing your password.
</p>
<Link className="button button--ghost" to="/app">
Open dashboard
<Link className="button button--ghost" to={buildLoginPath('/app')}>
Open protected dashboard
</Link>
</article>
</Section>

View file

@ -428,6 +428,8 @@ export function HomeLanding() {
}
export function AboutPage() {
const { windowsValidationPlatform } = usePublicReleaseManifestView('public-about')
return (
<>
<SiteMetadata
@ -549,6 +551,21 @@ export function AboutPage() {
))}
</div>
</Section>
<Section
title="Current public rollout posture"
description="Narrative claims stay more credible when this page also shows the live public launch posture and the current packaged desktop proof."
>
<PublicLaunchStatus title="About-page launch and release posture" />
</Section>
<PublicPackagedDesktopProofSection
platform={windowsValidationPlatform}
actions={[
{ to: '/download', label: 'Open download center' },
{ to: '/docs', label: 'Open public manual' },
]}
/>
</MarketingShell>
</>
)
@ -901,6 +918,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')
return (
<>
@ -932,6 +950,21 @@ export function SupportPage() {
/>
) : null}
<Section
title="Current release and package posture"
description="Support gets easier when current launch-readiness truth and current packaged desktop proof remain visible beside the help lanes themselves."
>
<PublicLaunchStatus title="Current support-facing launch posture" />
</Section>
<PublicPackagedDesktopProofSection
platform={windowsValidationPlatform}
actions={[
{ to: '/download', label: 'Open download center' },
{ to: '/changelog', label: 'Review release notes' },
]}
/>
<Section title="Contact">
<article className="card">
<p>

View file

@ -1,5 +1,5 @@
import type { DownloadPlatformKey } from './site-routes'
import { buildSupportPath } from './site-routes'
import { buildProtectedDownloadPath, buildRegisterPath } from './site-routes'
const env = import.meta.env as Record<string, string | undefined>
@ -54,7 +54,7 @@ export const planCatalog = [
name: 'Explorer',
price: 'Free',
ctaLabel: 'Start in the browser',
ctaHref: '/register',
ctaHref: buildRegisterPath('/app'),
notes: 'Preview the browser account shell, operator dashboard, release notes, and desktop onboarding posture.',
features: [
'Browser account access',
@ -67,8 +67,8 @@ export const planCatalog = [
key: 'operator',
name: 'Operator',
price: readTrimmedEnv('VITE_PLAN_PRICE_OPERATOR', 'Launch pricing via Paddle'),
ctaLabel: operatorCheckoutUrl ? 'Open Paddle checkout' : 'Request operator access',
ctaHref: operatorCheckoutUrl || buildSupportPath('operator-access'),
ctaLabel: operatorCheckoutUrl ? 'Open Paddle checkout' : 'Open protected downloads',
ctaHref: operatorCheckoutUrl || buildProtectedDownloadPath('windows'),
notes: 'Desktop-first recognition, replay, training, and higher-dimensional runtime ownership for active training operators.',
features: [
'Desktop download access',
@ -81,8 +81,8 @@ export const planCatalog = [
key: 'studio',
name: 'Studio',
price: readTrimmedEnv('VITE_PLAN_PRICE_STUDIO', 'Contact for launch readiness'),
ctaLabel: studioCheckoutUrl ? 'Open Paddle checkout' : 'Talk to HyperTwist',
ctaHref: studioCheckoutUrl || buildSupportPath('studio-rollout'),
ctaLabel: studioCheckoutUrl ? 'Open Paddle checkout' : 'Open protected rollout lane',
ctaHref: studioCheckoutUrl || '/app/browser-access',
notes: 'Higher-dimensional families, operator deployment support, and packaging/validation coordination for production lanes.',
features: [
'Magic120Cell and 5D operator posture',

View file

@ -762,6 +762,11 @@ export const resourceCollections = [
] as const
export const changelogEntries = [
{
date: 'June 24, 2026',
title: 'About and Support now surface live launch posture plus packaged desktop proof',
details: 'The public About and Support pages no longer talk about maturity only in abstract terms. They now expose the same current launch-readiness callout and Windows packaged-proof section already used by the other public manual surfaces, so narrative, rollout, and help pages stay anchored to current native release evidence.',
},
{
date: 'June 24, 2026',
title: 'Public support topics now preserve exact protected destinations through auth',