Expand public control profile manual
This commit is contained in:
parent
9611a4d189
commit
02f14da717
6 changed files with 180 additions and 2 deletions
|
|
@ -372,6 +372,40 @@ Latest runtime-recovery hardening follow-up later on `2026-06-24`:
|
|||
- `Quality: 6189`
|
||||
- `All rules pass`
|
||||
|
||||
Latest public-manual control-roster follow-up later on `2026-06-24`:
|
||||
|
||||
- the public manual no longer only says “keyboard/mouse are real” and
|
||||
“finished VR is not”; it now also exposes a more concrete shipped desktop
|
||||
roster
|
||||
- the public `about`, `features`, `resources`, and `docs` pages now all carry
|
||||
a first-party selectable control/settings roster covering:
|
||||
- the shipped `classic-wca-keyboard/v1` profile
|
||||
- the current scenic immersive preset families
|
||||
- dedicated `Magic120Cell` and `MagicCube5D` selector/view ownership
|
||||
- bounded selector-recall persistence truth
|
||||
- the still-unfinished XR/controller-rebinding boundary
|
||||
- this makes the current manual materially better at answering the operator
|
||||
question “what can I actually choose or persist today?” without widening
|
||||
public claims into finished VR or generalized preferences ownership
|
||||
- focused validation for that manual-content continuation stayed green under:
|
||||
- `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx`
|
||||
- `1` test file passed
|
||||
- `11` tests passed
|
||||
- the broader website suite then also stayed green under:
|
||||
- `npm --prefix website test -- --run`
|
||||
- `41` test files passed
|
||||
- `168` tests passed
|
||||
- the owned umbrella and structural gates then stayed green again under:
|
||||
- `scripts/run-hypertwist-web-surface-validation.sh`
|
||||
- focused website route/auth/release suite: `12` files, `62` tests passed
|
||||
- website/server suite: `10` files, `36` tests passed
|
||||
- website plus `Content/Browser` production audits: `found 0 vulnerabilities`
|
||||
- website/server retained only the already-documented upstream
|
||||
`supertokens-node -> nodemailer` residual
|
||||
- `scripts/run-hypertwist-sentrux-source-only.sh`
|
||||
- `Quality: 6189`
|
||||
- `All rules pass`
|
||||
|
||||
Latest protected-surface resilience follow-up later on `2026-06-23`:
|
||||
|
||||
- the shared release-manifest fallback was tightened so protected browser
|
||||
|
|
|
|||
|
|
@ -61,6 +61,12 @@ manual:
|
|||
- the docs and resources pages now also carry a practical simulator-use manual
|
||||
for recognition, replay, higher-dimensional runtime ownership, and operator
|
||||
diagnostics without overclaiming browser or VR parity
|
||||
- the about, feature-atlas, resources, and docs surfaces now also expose a
|
||||
concrete shipped control-profile and settings roster for the desktop lane,
|
||||
including the current `classic-wca-keyboard/v1` profile, scenic immersive
|
||||
preset families, dedicated-family selector/view ownership, bounded
|
||||
selector-recall persistence truth, and the still-unfinished
|
||||
XR/controller-rebinding boundary
|
||||
- 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
|
||||
|
|
@ -174,6 +180,27 @@ Latest runtime-recovery hardening follow-up later on `2026-06-24`:
|
|||
- `Quality: 6189`
|
||||
- `All rules pass`
|
||||
|
||||
Latest public-manual control-roster follow-up later on `2026-06-24`:
|
||||
|
||||
- the public pages now answer the concrete “what can users actually choose
|
||||
today?” question more directly instead of only speaking in broad control/XR
|
||||
categories
|
||||
- the about, feature-atlas, resources, and docs surfaces now all project a
|
||||
first-party selectable control/settings roster covering:
|
||||
- the shipped `classic-wca-keyboard/v1` profile
|
||||
- the current scenic immersive preset families
|
||||
- dedicated `Magic120Cell` and `MagicCube5D` selector/view ownership
|
||||
- current persisted selector-recall truth
|
||||
- the still-unfinished XR/controller-rebinding boundary
|
||||
- the focused public-marketing suite stayed green under:
|
||||
- `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx`
|
||||
- `1` test file passed
|
||||
- `11` tests passed
|
||||
- the broader current website suite then stayed green again under:
|
||||
- `npm --prefix website test -- --run`
|
||||
- `41` test files passed
|
||||
- `168` tests passed
|
||||
|
||||
Current dependency-health truth from the `2026-06-23` hardening pass:
|
||||
|
||||
- `website/` production audit is clean
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { render, screen, within } from '@testing-library/react'
|
||||
import { cleanup, render, screen, within } from '@testing-library/react'
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { MemoryRouter } from 'react-router-dom'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
|
@ -137,6 +137,7 @@ function renderWithProviders(element: React.ReactNode, initialEntries?: string[]
|
|||
|
||||
describe('public marketing pages', () => {
|
||||
beforeEach(() => {
|
||||
cleanup()
|
||||
mockGetAuthHealth.mockReset()
|
||||
mockGetReleaseManifest.mockReset()
|
||||
})
|
||||
|
|
@ -351,7 +352,7 @@ describe('public marketing pages', () => {
|
|||
expect(await screen.findByText('Public website and release posture')).toBeTruthy()
|
||||
expect(screen.getAllByText('Preview posture').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText('Paddle webhook secret: missing').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('Public auth runtime posture: production-ready')).toBeTruthy()
|
||||
expect(screen.getAllByText(/public auth runtime posture/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('How a real first session flows')).toBeTruthy()
|
||||
expect(screen.getAllByText('Current surface authority map').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText('Native Unreal desktop runtime').length).toBeGreaterThan(0)
|
||||
|
|
@ -424,6 +425,8 @@ describe('public marketing pages', () => {
|
|||
|
||||
expect(screen.getByText('How a real HyperTwist session unfolds')).toBeTruthy()
|
||||
expect(screen.getByText('Current desktop control and XR truth')).toBeTruthy()
|
||||
expect(screen.getByText('Selectable control and settings roster')).toBeTruthy()
|
||||
expect(screen.getByText('Shipped classic control profile')).toBeTruthy()
|
||||
expect(screen.getByText('Release and deployment maturity')).toBeTruthy()
|
||||
})
|
||||
|
||||
|
|
@ -473,6 +476,8 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getAllByText('Current surface authority map').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText('Embedded simulator browser shell').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('Current shipped capability')).toBeTruthy()
|
||||
expect(screen.getByText('Current selectable control roster')).toBeTruthy()
|
||||
expect(screen.getAllByText('Selectable immersive and family-specific settings').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('Current public rollout posture')).toBeTruthy()
|
||||
expect(screen.getByText('Public feature and launch posture')).toBeTruthy()
|
||||
expect(document.title).toBe('HyperTwist features | HyperTwist')
|
||||
|
|
@ -791,6 +796,8 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('Simulator use today')).toBeTruthy()
|
||||
expect(screen.getByText('Higher-dimensional runtime guide')).toBeTruthy()
|
||||
expect(screen.getByText('Current control and device posture')).toBeTruthy()
|
||||
expect(screen.getAllByText('Selectable control and settings roster').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText(/3 immersive-intensity presets and 3 reduced-distraction presets/i)).toBeTruthy()
|
||||
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()
|
||||
|
|
@ -863,7 +870,9 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('Higher-dimensional family guide')).toBeTruthy()
|
||||
expect(screen.getByText('Deployment readiness manual')).toBeTruthy()
|
||||
expect(screen.getByText('Input and device posture')).toBeTruthy()
|
||||
expect(screen.getAllByText('Selectable control and settings roster').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText('Keyboard and mouse ship today').length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getAllByText(/latest persisted generated-mode selector posture is available for recall/i).length).toBeGreaterThan(0)
|
||||
expect(screen.getByText('Feature-registry-backed wording only')).toBeTruthy()
|
||||
expect(await screen.findByRole('link', { name: /open public docs portal/i })).toBeTruthy()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { SiteMetadata } from '../components/seo/SiteMetadata'
|
|||
import { PublicLaunchStatus } from '../components/ui/PublicLaunchStatus'
|
||||
import { ProductSurfaceMatrix } from '../components/ui/ProductSurfaceMatrix'
|
||||
import {
|
||||
controlProfileRosterCards,
|
||||
deploymentReadinessTracks,
|
||||
featureAtlasCurrentTracks,
|
||||
featureRegistryTierCards,
|
||||
|
|
@ -111,6 +112,25 @@ export function FeaturesPage() {
|
|||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Current selectable control roster"
|
||||
description="This keeps the feature atlas concrete about the shipped keyboard profile, scenic presets, dedicated-family selectors, and the current persistence boundary."
|
||||
>
|
||||
<div className="card-grid">
|
||||
{controlProfileRosterCards.map((card) => (
|
||||
<article key={card.title} className="card">
|
||||
<h3>{card.title}</h3>
|
||||
<p>{card.description}</p>
|
||||
<ul className="list top-gap">
|
||||
{card.bullets.map((bullet) => (
|
||||
<li key={bullet}>{bullet}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Release and distribution maturity"
|
||||
description="Production readiness in HyperTwist is not just code quality. It also includes package proof, launch posture, account access, and legal/distribution discipline."
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import {
|
|||
deploymentReadinessTracks,
|
||||
heroMetrics,
|
||||
higherDimensionalRuntimeGuideCards,
|
||||
controlProfileRosterCards,
|
||||
inputAndDevicePostureCards,
|
||||
operatorManualTracks,
|
||||
operatorPlaybooks,
|
||||
|
|
@ -293,6 +294,25 @@ export function AboutPage() {
|
|||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Selectable control and settings roster"
|
||||
description="This keeps the public manual concrete about what users can already choose or persist today without inflating that into finished controller rebinding or headset-runtime completion."
|
||||
>
|
||||
<div className="card-grid">
|
||||
{controlProfileRosterCards.map((card) => (
|
||||
<article key={card.title} className="card">
|
||||
<h3>{card.title}</h3>
|
||||
<p>{card.description}</p>
|
||||
<ul className="list top-gap">
|
||||
{card.bullets.map((bullet) => (
|
||||
<li key={bullet}>{bullet}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Release and deployment maturity"
|
||||
description="Production seriousness comes from clean separation between identity, package proof, legal posture, and runtime execution."
|
||||
|
|
@ -478,6 +498,25 @@ export function ResourcesPage() {
|
|||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Selectable control and settings roster"
|
||||
description="This keeps the public resources lane concrete about the shipped keyboard profile, scenic presets, family selectors, and current persistence boundary."
|
||||
>
|
||||
<div className="card-grid">
|
||||
{controlProfileRosterCards.map((card) => (
|
||||
<article key={card.title} className="card">
|
||||
<h3>{card.title}</h3>
|
||||
<p>{card.description}</p>
|
||||
<ul className="list top-gap">
|
||||
{card.bullets.map((bullet) => (
|
||||
<li key={bullet}>{bullet}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Runtime control guide"
|
||||
description="This public-safe guide focuses on how operators and trainees actually drive the current desktop runtime today."
|
||||
|
|
@ -668,6 +707,25 @@ export function DocsPage() {
|
|||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Selectable control and settings roster"
|
||||
description="This manual section answers the concrete user question: what settings, profiles, selectors, and persistence surfaces are already real today?"
|
||||
>
|
||||
<div className="card-grid">
|
||||
{controlProfileRosterCards.map((card) => (
|
||||
<article key={card.title} className="card">
|
||||
<h3>{card.title}</h3>
|
||||
<p>{card.description}</p>
|
||||
<ul className="list top-gap">
|
||||
{card.bullets.map((bullet) => (
|
||||
<li key={bullet}>{bullet}</li>
|
||||
))}
|
||||
</ul>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title="Runtime control guide"
|
||||
description="This manual section explains how to approach the current desktop runtime without pretending a later XR/preferences packet has already landed."
|
||||
|
|
|
|||
|
|
@ -425,6 +425,36 @@ export const runtimeControlGuideCards = [
|
|||
},
|
||||
] as const
|
||||
|
||||
export const controlProfileRosterCards = [
|
||||
{
|
||||
title: 'Shipped classic control profile',
|
||||
description: 'The current desktop runtime exposes a concrete shipped control profile rather than vague “keyboard support” language.',
|
||||
bullets: [
|
||||
'The native operator and training surfaces currently expose the shipped classic profile as `classic-wca-keyboard/v1` with 18 active bindings.',
|
||||
'Classic-cube interaction already combines that keyboard profile with click, touch, orbit, zoom, hint, and hold-to-talk behavior in the live desktop lane.',
|
||||
'Treat this roster as native simulator ownership, not as something delegated to the browser shell.',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Selectable immersive and family-specific settings',
|
||||
description: 'Current settings ownership already goes beyond one camera toggle, but it stays bounded to the real shipped family lanes and scenic presets.',
|
||||
bullets: [
|
||||
'The current scenic immersive roster includes 3 immersive-intensity presets and 3 reduced-distraction presets.',
|
||||
'Magic120Cell currently exposes 4 selector options alongside its symmetry, focus, and visibility owners.',
|
||||
'MagicCube5D currently exposes 4 selector options alongside its projection-distance, stereo, focus, and visibility owners.',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Persistence and boundary truth',
|
||||
description: 'Current continuity is real, but it is still narrower than a finished global preferences and controller-rebinding suite.',
|
||||
bullets: [
|
||||
'The native operator and training surfaces can recall the latest persisted generated-mode selector posture when a structurally valid launch request exists.',
|
||||
'Viewer camera settings and immersive-presence settings are already first-party owned in the desktop runtime.',
|
||||
'Finished headset-specific controller rebinding and broad VR onboarding remain a later native completion packet.',
|
||||
],
|
||||
},
|
||||
] as const
|
||||
|
||||
export const deploymentReadinessTracks = [
|
||||
{
|
||||
title: '1. Identity and access posture',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue