From 8870fa838eb6943659b0a8291b48a79ba1974e7b Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Tue, 30 Jun 2026 05:56:13 +0000 Subject: [PATCH] Harden HyperTwist control settings degraded-state truth --- ...perTwistTrainingControlSurfaceFormatting.h | 112 ++++++++++++- .../HyperTwistTrainingPanelWidget.cpp | 156 +++++++----------- ...wistControlProfileContinuityParityTest.cpp | 114 +++++++++++++ .../HyperTwist/DEVELOPMENT.md | 20 +++ .../HyperTwist/FEATURE_REGISTRY.md | 2 +- website/src/site-data.ts | 5 + 6 files changed, 304 insertions(+), 105 deletions(-) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingControlSurfaceFormatting.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingControlSurfaceFormatting.h index e8a497a..6e37f0e 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingControlSurfaceFormatting.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingControlSurfaceFormatting.h @@ -180,9 +180,12 @@ namespace HyperTwistTrainingControlSurfaceFormatting const bool bCameraSettingsContinuityReady, const bool bImmersivePresenceSettingsReady, const bool bImmersiveSessionRecallReady, - const bool bMagic120CellOwnedSettingsReady, - const bool bMagicCube5DOwnedSettingsReady, - const bool bHigherDimensionalSelectorSettingsReady, + const bool bMagic120CellViewSettingsReady, + const bool bMagic120CellPersistenceSettingsReady, + const bool bMagicCube5DViewSettingsReady, + const bool bMagicCube5DPersistenceSettingsReady, + const bool bMagic120CellSelectorSettingsReady, + const bool bMagicCube5DSelectorSettingsReady, const bool bRepositoryBackedSelectorRecallReady ) { @@ -194,13 +197,110 @@ namespace HyperTwistTrainingControlSurfaceFormatting *DescribeOwnedContinuityState( bImmersivePresenceSettingsReady, bImmersiveSessionRecallReady), - bMagic120CellOwnedSettingsReady ? TEXT("ready") : TEXT("partial"), - bMagicCube5DOwnedSettingsReady ? TEXT("ready") : TEXT("partial"), - bHigherDimensionalSelectorSettingsReady ? TEXT("ready") : TEXT("partial"), + *DescribeAggregateReadyState( + bMagic120CellViewSettingsReady, + bMagic120CellPersistenceSettingsReady), + *DescribeAggregateReadyState( + bMagicCube5DViewSettingsReady, + bMagicCube5DPersistenceSettingsReady), + *DescribeAggregateReadyState( + bMagic120CellSelectorSettingsReady, + bMagicCube5DSelectorSettingsReady), bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable") ); } + inline FString BuildControlSettingsFamilyOwnedLine( + const TCHAR* FamilyLabel, + const bool bViewSettingsReady, + const bool bPersistenceSettingsReady, + const FString& ViewProfileContractId, + const FString& SessionSurfaceId, + const FString& SceneSurfaceId, + const FString& PersistenceBoundaryId, + const FString& StateSemanticsId, + const int32 SelectorCount, + const TCHAR* SecondMetricLabel, + const int32 ProjectionSurfaceTagCount, + const int32 SecondMetricCount, + const TCHAR* ThirdMetricLabel, + const int32 ThirdMetricCount, + const TCHAR* FourthMetricLabel, + const int32 FourthMetricCount + ) + { + return FString::Printf( + TEXT("%s owned settings: %s | profile %s | session %s | scene %s | persistence %s | semantics %s | selectors %d | projection tags %d | %s %d | %s %d | %s %d."), + FamilyLabel, + *DescribeAggregateReadyState( + bViewSettingsReady, + bPersistenceSettingsReady), + *DescribeIdIfReady( + bViewSettingsReady, + ViewProfileContractId), + *DescribeIdIfReady( + bPersistenceSettingsReady, + SessionSurfaceId), + *DescribeIdIfReady( + bPersistenceSettingsReady, + SceneSurfaceId), + *DescribeIdIfReady( + bPersistenceSettingsReady, + PersistenceBoundaryId), + *DescribeIdIfReady( + bPersistenceSettingsReady, + StateSemanticsId), + DescribeCountIfReady( + bViewSettingsReady, + SelectorCount), + DescribeCountIfReady( + bViewSettingsReady, + ProjectionSurfaceTagCount), + SecondMetricLabel, + DescribeCountIfReady( + bViewSettingsReady, + SecondMetricCount), + ThirdMetricLabel, + DescribeCountIfReady( + bViewSettingsReady, + ThirdMetricCount), + FourthMetricLabel, + DescribeCountIfReady( + bViewSettingsReady, + FourthMetricCount) + ); + } + + inline FString BuildControlSettingsSelectorOwnershipLine( + const bool bMagic120CellSelectorSettingsReady, + const bool bMagicCube5DSelectorSettingsReady, + const bool bActiveHigherDimensionalSettingsVisible, + const FString& ActiveHigherDimensionalViewContextId, + const FString& ActiveHigherDimensionalSessionSurfaceId, + const FString& ActiveHigherDimensionalInteractiveSceneSurfaceId, + const int32 ActiveHigherDimensionalSelectorCount + ) + { + return FString::Printf( + TEXT("Higher-dimensional selector ownership: %s | active context %s | active session %s | active scene %s | active selectors %d."), + *DescribeAggregateReadyState( + bMagic120CellSelectorSettingsReady, + bMagicCube5DSelectorSettingsReady), + *DescribeIdIfReady( + bActiveHigherDimensionalSettingsVisible, + ActiveHigherDimensionalViewContextId), + *DescribeIdIfReady( + bActiveHigherDimensionalSettingsVisible, + ActiveHigherDimensionalSessionSurfaceId), + *DescribeIdIfReady( + bActiveHigherDimensionalSettingsVisible, + ActiveHigherDimensionalInteractiveSceneSurfaceId), + DescribeCountIfReady( + bActiveHigherDimensionalSettingsVisible, + ActiveHigherDimensionalSelectorCount) + ); + } + inline FString BuildControlProfilePreferencesContinuityLine( const bool bCameraSettingsContinuityReady, const FString& CameraSettingsExportArtifactId, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp index 583cc11..e1c6f46 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp @@ -1627,64 +1627,12 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa Surface.bRequiresWindowsPackagedControllerValidationForReopen = XrBoundaryFacts.bRequiresWindowsPackagedControllerValidationForReopen; - const FString ActiveViewContextId = - !Surface.ActiveHigherDimensionalViewContextId.IsEmpty() - ? Surface.ActiveHigherDimensionalViewContextId - : TEXT("none"); - const FString ActiveSessionSurfaceId = - !Surface.ActiveHigherDimensionalSessionSurfaceId.IsEmpty() - ? Surface.ActiveHigherDimensionalSessionSurfaceId - : TEXT("none"); - const FString ActiveSceneSurfaceId = - !Surface.ActiveHigherDimensionalInteractiveSceneSurfaceId.IsEmpty() - ? Surface.ActiveHigherDimensionalInteractiveSceneSurfaceId - : TEXT("none"); - const FString Magic120CellProfileId = - !Surface.Magic120CellViewProfileContractId.IsEmpty() - ? Surface.Magic120CellViewProfileContractId - : TEXT("n/a"); - const FString Magic120CellSessionSurfaceId = - !Surface.Magic120CellSessionSurfaceId.IsEmpty() - ? Surface.Magic120CellSessionSurfaceId - : TEXT("n/a"); - const FString Magic120CellSceneSurfaceId = - !Surface.Magic120CellSceneSurfaceId.IsEmpty() - ? Surface.Magic120CellSceneSurfaceId - : TEXT("n/a"); - const FString Magic120CellPersistenceBoundaryId = - !Surface.Magic120CellPersistenceBoundaryId.IsEmpty() - ? Surface.Magic120CellPersistenceBoundaryId - : TEXT("n/a"); - const FString Magic120CellStateSemanticsId = - !Surface.Magic120CellStateSemanticsId.IsEmpty() - ? Surface.Magic120CellStateSemanticsId - : TEXT("n/a"); - const FString MagicCube5DProfileId = - !Surface.MagicCube5DViewProfileContractId.IsEmpty() - ? Surface.MagicCube5DViewProfileContractId - : TEXT("n/a"); - const FString MagicCube5DSessionSurfaceId = - !Surface.MagicCube5DSessionSurfaceId.IsEmpty() - ? Surface.MagicCube5DSessionSurfaceId - : TEXT("n/a"); - const FString MagicCube5DSceneSurfaceId = - !Surface.MagicCube5DSceneSurfaceId.IsEmpty() - ? Surface.MagicCube5DSceneSurfaceId - : TEXT("n/a"); - const FString MagicCube5DPersistenceBoundaryId = - !Surface.MagicCube5DPersistenceBoundaryId.IsEmpty() - ? Surface.MagicCube5DPersistenceBoundaryId - : TEXT("n/a"); - const FString MagicCube5DStateSemanticsId = - !Surface.MagicCube5DStateSemanticsId.IsEmpty() - ? Surface.MagicCube5DStateSemanticsId - : TEXT("n/a"); - const bool bMagic120CellOwnedSettingsReady = + const bool bMagic120CellSelectorSettingsReady = Surface.bMagic120CellViewSettingsReady - && Surface.bMagic120CellPersistenceSettingsReady; - const bool bMagicCube5DOwnedSettingsReady = + && Surface.Magic120CellSelectorCount > 0; + const bool bMagicCube5DSelectorSettingsReady = Surface.bMagicCube5DViewSettingsReady - && Surface.bMagicCube5DPersistenceSettingsReady; + && Surface.MagicCube5DSelectorCount > 0; Surface.SummaryLine = TEXT("Camera, immersive, and dedicated-family projection, selector, continuity, and persistence settings are already first-party owned, while XR/controller rebinding still remains unfinished."); @@ -1711,45 +1659,54 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa Surface.ImmersiveSessionRecallPreferenceFieldTagCount, Surface.ImmersiveSessionRecallResetSurfaceTagCount ); - Surface.Magic120CellSettingsLine = FString::Printf( - TEXT("Magic120Cell owned settings: %s | profile %s | session %s | scene %s | persistence %s | semantics %s | selectors %d | projection tags %d | symmetry presets %d | visibility presets %d | focus surfaces %d."), - *HyperTwistTrainingPanelWidgetInternal::DescribeReadyState( - bMagic120CellOwnedSettingsReady), - *Magic120CellProfileId, - *Magic120CellSessionSurfaceId, - *Magic120CellSceneSurfaceId, - *Magic120CellPersistenceBoundaryId, - *Magic120CellStateSemanticsId, - Surface.Magic120CellSelectorCount, - Surface.Magic120CellProjectionSurfaceTagCount, - Surface.Magic120CellSymmetryPresetTagCount, - Surface.Magic120CellVisibilityPresetTagCount, - Surface.Magic120CellFocusSurfaceTagCount - ); - Surface.MagicCube5DSettingsLine = FString::Printf( - TEXT("MagicCube5D owned settings: %s | profile %s | session %s | scene %s | persistence %s | semantics %s | selectors %d | projection tags %d | stereo tags %d | visibility tags %d | focus surfaces %d."), - *HyperTwistTrainingPanelWidgetInternal::DescribeReadyState( - bMagicCube5DOwnedSettingsReady), - *MagicCube5DProfileId, - *MagicCube5DSessionSurfaceId, - *MagicCube5DSceneSurfaceId, - *MagicCube5DPersistenceBoundaryId, - *MagicCube5DStateSemanticsId, - Surface.MagicCube5DSelectorCount, - Surface.MagicCube5DProjectionSurfaceTagCount, - Surface.MagicCube5DStereoSurfaceTagCount, - Surface.MagicCube5DVisibilitySurfaceTagCount, - Surface.MagicCube5DFocusSurfaceTagCount - ); - Surface.SelectorSettingsLine = FString::Printf( - TEXT("Higher-dimensional selector ownership: %s | active context %s | active session %s | active scene %s | active selectors %d."), - *HyperTwistTrainingPanelWidgetInternal::DescribeReadyState( - Surface.bHigherDimensionalSelectorSettingsReady), - *ActiveViewContextId, - *ActiveSessionSurfaceId, - *ActiveSceneSurfaceId, - Surface.ActiveHigherDimensionalSelectorCount - ); + Surface.Magic120CellSettingsLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsFamilyOwnedLine( + TEXT("Magic120Cell"), + Surface.bMagic120CellViewSettingsReady, + Surface.bMagic120CellPersistenceSettingsReady, + Surface.Magic120CellViewProfileContractId, + Surface.Magic120CellSessionSurfaceId, + Surface.Magic120CellSceneSurfaceId, + Surface.Magic120CellPersistenceBoundaryId, + Surface.Magic120CellStateSemanticsId, + Surface.Magic120CellSelectorCount, + TEXT("symmetry presets"), + Surface.Magic120CellProjectionSurfaceTagCount, + Surface.Magic120CellSymmetryPresetTagCount, + TEXT("visibility presets"), + Surface.Magic120CellVisibilityPresetTagCount, + TEXT("focus surfaces"), + Surface.Magic120CellFocusSurfaceTagCount + ); + Surface.MagicCube5DSettingsLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsFamilyOwnedLine( + TEXT("MagicCube5D"), + Surface.bMagicCube5DViewSettingsReady, + Surface.bMagicCube5DPersistenceSettingsReady, + Surface.MagicCube5DViewProfileContractId, + Surface.MagicCube5DSessionSurfaceId, + Surface.MagicCube5DSceneSurfaceId, + Surface.MagicCube5DPersistenceBoundaryId, + Surface.MagicCube5DStateSemanticsId, + Surface.MagicCube5DSelectorCount, + TEXT("stereo tags"), + Surface.MagicCube5DProjectionSurfaceTagCount, + Surface.MagicCube5DStereoSurfaceTagCount, + TEXT("visibility tags"), + Surface.MagicCube5DVisibilitySurfaceTagCount, + TEXT("focus surfaces"), + Surface.MagicCube5DFocusSurfaceTagCount + ); + Surface.SelectorSettingsLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsSelectorOwnershipLine( + bMagic120CellSelectorSettingsReady, + bMagicCube5DSelectorSettingsReady, + Surface.bActiveHigherDimensionalSettingsVisible, + Surface.ActiveHigherDimensionalViewContextId, + Surface.ActiveHigherDimensionalSessionSurfaceId, + Surface.ActiveHigherDimensionalInteractiveSceneSurfaceId, + Surface.ActiveHigherDimensionalSelectorCount + ); Surface.SelectorRecallLine = HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallLine( SelectorRecallFacts @@ -1764,9 +1721,12 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa Surface.bCameraSettingsContinuityReady, Surface.bImmersivePresenceSettingsReady, Surface.bImmersiveSessionRecallReady, - bMagic120CellOwnedSettingsReady, - bMagicCube5DOwnedSettingsReady, - Surface.bHigherDimensionalSelectorSettingsReady, + Surface.bMagic120CellViewSettingsReady, + Surface.bMagic120CellPersistenceSettingsReady, + Surface.bMagicCube5DViewSettingsReady, + Surface.bMagicCube5DPersistenceSettingsReady, + bMagic120CellSelectorSettingsReady, + bMagicCube5DSelectorSettingsReady, Surface.bRepositoryBackedSelectorRecallReady ); Surface.DetailLine = FString::Printf( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistControlProfileContinuityParityTest.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistControlProfileContinuityParityTest.cpp index e827bb4..bc0d930 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistControlProfileContinuityParityTest.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistControlProfileContinuityParityTest.cpp @@ -235,6 +235,117 @@ bool FHyperTwistControlSettingsContinuityStateFormattingTest::RunTest( && ReadyImmersiveLine.Contains(TEXT("preference fields 5")) ); + const FString MissingFamilyOwnedLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsFamilyOwnedLine( + TEXT("Magic120Cell"), + false, + false, + TEXT("magic120cell-focus-view-profile"), + TEXT("phase6c/magic120cell/dedicated-training-session-surface"), + TEXT("phase6c/magic120cell/interactive-scene-surface"), + TEXT("magic120cell-persistence-boundary"), + TEXT("phase6c/magic120cell/family-owned-scene-state"), + 4, + TEXT("symmetry presets"), + 5, + 5, + TEXT("visibility presets"), + 5, + TEXT("focus surfaces"), + 5 + ); + TestTrue( + TEXT("The control/settings family-owned formatter must render a fully absent higher-dimensional ownership lane as missing and mask stale ids and counts."), + MissingFamilyOwnedLine.Contains(TEXT("Magic120Cell owned settings: missing")) + && MissingFamilyOwnedLine.Contains(TEXT("profile n/a")) + && MissingFamilyOwnedLine.Contains(TEXT("session n/a")) + && MissingFamilyOwnedLine.Contains(TEXT("scene n/a")) + && MissingFamilyOwnedLine.Contains(TEXT("persistence n/a")) + && MissingFamilyOwnedLine.Contains(TEXT("semantics n/a")) + && MissingFamilyOwnedLine.Contains(TEXT("selectors 0")) + && MissingFamilyOwnedLine.Contains(TEXT("projection tags 0")) + && MissingFamilyOwnedLine.Contains(TEXT("symmetry presets 0")) + && MissingFamilyOwnedLine.Contains(TEXT("visibility presets 0")) + && MissingFamilyOwnedLine.Contains(TEXT("focus surfaces 0")) + ); + + const FString PartialFamilyOwnedLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsFamilyOwnedLine( + TEXT("MagicCube5D"), + true, + false, + TEXT("magiccube5d-projection-view-profile"), + TEXT("phase6c/magiccube5d/dedicated-training-session-surface"), + TEXT("phase6c/magiccube5d/interactive-scene-surface"), + TEXT("magiccube5d-persistence-boundary"), + TEXT("phase6c/magiccube5d/family-owned-scene-state"), + 4, + TEXT("stereo tags"), + 5, + 5, + TEXT("visibility tags"), + 5, + TEXT("focus surfaces"), + 5 + ); + TestTrue( + TEXT("The control/settings family-owned formatter must render one-sided higher-dimensional ownership as partial while preserving the ready-side view ids and counts."), + PartialFamilyOwnedLine.Contains(TEXT("MagicCube5D owned settings: partial")) + && PartialFamilyOwnedLine.Contains(TEXT("profile magiccube5d-projection-view-profile")) + && PartialFamilyOwnedLine.Contains(TEXT("session n/a")) + && PartialFamilyOwnedLine.Contains(TEXT("scene n/a")) + && PartialFamilyOwnedLine.Contains(TEXT("persistence n/a")) + && PartialFamilyOwnedLine.Contains(TEXT("semantics n/a")) + && PartialFamilyOwnedLine.Contains(TEXT("selectors 4")) + && PartialFamilyOwnedLine.Contains(TEXT("projection tags 5")) + && PartialFamilyOwnedLine.Contains(TEXT("stereo tags 5")) + && PartialFamilyOwnedLine.Contains(TEXT("visibility tags 5")) + && PartialFamilyOwnedLine.Contains(TEXT("focus surfaces 5")) + ); + + const FString MissingSelectorOwnershipLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsSelectorOwnershipLine( + false, + false, + false, + TEXT("phase6c/magic120cell/runtime-view-context-surface"), + TEXT("phase6c/magic120cell/dedicated-training-session-surface"), + TEXT("phase6c/magic120cell/interactive-scene-surface"), + 4 + ); + TestTrue( + TEXT("The control/settings selector formatter must render a fully absent selector lane as missing and mask stale active-surface ids."), + MissingSelectorOwnershipLine.Contains(TEXT("Higher-dimensional selector ownership: missing")) + && MissingSelectorOwnershipLine.Contains(TEXT("active context n/a")) + && MissingSelectorOwnershipLine.Contains(TEXT("active session n/a")) + && MissingSelectorOwnershipLine.Contains(TEXT("active scene n/a")) + && MissingSelectorOwnershipLine.Contains(TEXT("active selectors 0")) + ); + + const FString MissingStatusLine = + HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine( + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ); + TestTrue( + TEXT("The control/settings status formatter must render fully absent dedicated-family ownership as missing instead of overstating it as partial."), + MissingStatusLine.Contains(TEXT("camera missing")) + && MissingStatusLine.Contains(TEXT("immersive missing")) + && MissingStatusLine.Contains(TEXT("120-cell owned settings missing")) + && MissingStatusLine.Contains(TEXT("5D owned settings missing")) + && MissingStatusLine.Contains(TEXT("selectors missing")) + && MissingStatusLine.Contains(TEXT("selector recall unavailable")) + ); + const FString MixedStatusLine = HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine( false, @@ -242,7 +353,10 @@ bool FHyperTwistControlSettingsContinuityStateFormattingTest::RunTest( true, false, true, + true, + true, false, + true, false, false ); diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md index 284b3ea..e907db3 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/DEVELOPMENT.md @@ -225,6 +225,26 @@ Latest same-day follow-up later on `2026-06-24`: - `scripts/run-hypertwist-gitnexus-status.sh` then again reported the bounded mirror `Status: up-to-date` +Latest same-family native control-surface hardening follow-up on `2026-06-30`: + +- the native control-settings formatter no longer overstates absent dedicated + family ownership as merely `partial` +- `HyperTwistTrainingControlSurfaceFormatting.h` now keeps: + - `missing` when neither side of a higher-dimensional ownership lane exists + - `partial` when only the view or persistence half exists + - `ready` only when the full owned lane is present +- the same helper layer now also owns explicit family-owned line rendering for + dedicated `Magic120Cell` and `MagicCube5D` settings plus selector-ownership + rendering, masking stale ids/counts while preserving the ready side of a + degraded lane +- focused native formatter coverage widened in + `UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistControlProfileContinuityParityTest.cpp` + to prove: + - fully missing family-owned settings truth + - partial family-owned settings truth + - fully missing selector-ownership truth + - fully missing versus mixed-partial aggregate status truth + Latest same-family website hardening follow-up on `2026-06-30`: - public search assets now come from one shared authority: diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md index 7901742..34bb3a7 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md @@ -146,7 +146,7 @@ Do not collapse those three tiers into one undifferentiated "features" voice. | Rewritten training analytics and report reference grounding | Implemented now | `apache/echarts` retained permissive lane + first-party current code | Current live `Training Analytics` reference side includes four rewritten first-party targets grounded in retained `apache/echarts`: session outcome and progress reporting, analytics data-view and export, timing-trend history and overview interaction, and the optional richer explainer or sidecar boundary. This does not displace the landed `Phase 3R-C` first-party analytics/reporting owner or elevate `ecomfe/echarts-gl` and `ecomfe/zrender` beyond support-only sidecars. | | Browser/spatial/media adjunct surfaces | Implemented now | landed `three.js`, `react-three-fiber`, `xr`, `model-viewer`, `remotion` packets | These are implemented bounded families, and the current Phase 1 browser-runtime landing now includes a first-party authoritative `Content/Browser/index.html` shell, bundled-runtime upgrade path, committed clean-checkout plain-JS fallback runtime, embedded `UHyperTwistBrowserWidget` bridge, the `2026-06-19` runtime-ready queue hardening that retains outbound Unreal shell traffic until the browser runtime is ready, a same-day first-party `Browser Runtime Status` surface with shared boot-state ownership across bundled and fallback shells, a follow-on typed Unreal-side `browser-runtime-status` capture seam that retains the last valid runtime snapshot across unrelated later envelope traffic until explicit reset, a second follow-on typed Unreal-side `hypertwist-runtime-ready` capture seam that raises the original handshake payload out of raw JSON-only handling without changing queue flush behavior, a third same-day native/operator-facing status surface that consumes those typed seams inside Unreal while clearing retained runtime ownership on shell-authority change, a fourth same-day native training/operator diagnostics-panel continuation that wires that typed status ownership into `UHyperTwistTrainingPanelWidget` and the coach dashboard without making the dashboard inspect seam depend on stale rendered strings, a fifth same-day diagnostics-fidelity continuation that now carries bootstrap/runtime-ready timestamps, last command/shell-state receipt timestamps, and fallback reason through the same native operator/training seams, and a later `2026-06-23` control/input readiness continuation that projects shipped keyboard/input truth and unfinished XR/preferences truth through the same native training/operator surfaces. This still is not proof of unlimited browser-shell parity. | | Native control/input readiness inspect surface | Implemented now | landed first-party `2026-06-23` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlInputReadinessInspectSurface`, including the shipped `classic-wca-keyboard/v1` mapping, exact classic-cube pointer, orbit, zoom, and action-shortcut truth, higher-dimensional dedicated-family runtime ownership truth, project-level `EnhancedInput` plus motion-controller groundwork facts, immersive-presence contract presence, and explicit unfinished XR/runtime plus preferences truth. The rendered detail line now also carries the fixed desktop-hosted `No-Go` decision on native OpenXR/controller widening instead of leaving that truth stranded in a non-rendered follow-up field. A later same-day structured-boundary hardening follow-up then promoted that same XR/controller boundary into stable inspect-surface fields as well, including decision id `desktop-hosted-openxr-controller-widening-no-go` plus explicit reopen requirements for dedicated runtime owners, user-facing settings or rebinding ownership, and Windows packaged controller validation, so native operator automation no longer depends only on rendered prose to verify the boundary. The recovered primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-23` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 1563.53 seconds`, and exported `Saved\AutomationReports\Browser-ControlInputReadiness-Verify\index.json` with all `16` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlInputReadinessInspectSurface` and `TrainingPanel.ControlInputReadinessInspectSurface`. A later same-day quality follow-up then moved the project-input-groundwork inspection behind that surface from raw text scanning into structured Unreal config reads, rebuilt the same maintained validation worktree again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 158.13 seconds`, and re-exported focused browser proof to `Saved\AutomationReports\Browser-ControlInputReadiness-StructuredConfig-Verify` with all `16` `HyperTwist.Browser.*` tests green again. The latest same-family truth-render follow-up on `2026-06-24` then rebuilt that same maintained validation root with `Result: Succeeded`, UnrealBuildTool `Total execution time: 172.52 seconds`, and exported `Saved\AutomationReports\Browser-XrNoGoRendered-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, explicitly covering both training-panel and coach-dashboard control-input detail-line visibility for the `No-Go` host decision. A later same-day post-build structured-boundary follow-up then rebuilt that same maintained validation root once more with `Result: Succeeded`, UnrealBuildTool `Total execution time: 2323.18 seconds`, and exported `Saved\AutomationReports\Browser-XrBoundaryStructured-PostBuild-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, now explicitly covering the stable decision-id and reopen-requirement fields on both control-input inspect surfaces alongside the sibling control/settings and control/profile seams. A later same-day `2026-06-25` parity follow-up then widened the same surface from general readiness truth into literal roster truth by rendering dedicated classic-cube pointer and action-shortcut lines, rebuilding the maintained validation root with `Result: Succeeded` at `5278.57 seconds` and exact-source rerun `70.76 seconds`, and exporting `Saved\AutomationReports\Browser-ControlRosterParity-Verify\index.json` with all `21` `HyperTwist.Browser.*` tests green, including both training-panel and coach-dashboard control-input surfaces plus the structured dashboard artifact seam. The latest same-family `2026-06-28` ownership-truth follow-up then tightened higher-dimensional readiness again by resolving the shipped `Magic120Cell` and `MagicCube5D` dedicated-family host, view-context, session, and interactive-scene surfaces explicitly by activation profile id instead of treating broad catalog validity as equivalent proof. That exact-source-state follow-up rebuilt maintained validation root `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 109.14 seconds`, then passed all three focused browser filters `TrainingPanel.ControlInputReadinessInspectSurface`, `CoachDashboard.ControlInputReadinessInspectSurface`, and `CoachDashboard.ControlSurfaceStructuredTextArtifacts`, so both the inspect surfaces and the rendered structured dashboard row now keep concrete family ownership ids such as `phase6c/magic120cell/runtime-host-surface` and `phase6c/magiccube5d/interactive-scene-surface` visible to operators. A later same-day bounded preferences-continuity follow-up then tightened the non-`XR` seam again without reopening the controller lane: the preferences line now resolves the first valid viewer camera-export artifact instead of trusting only the first listed id, keeps `artifact/camera-export-json` plus `immersive-training-session-recall-boundary` visible with recall-scope and preference-field counts, and preserves the honest boundary that broader polished rebinding and control-settings UI are still not shipped. That exact-source continuity follow-up then rebuilt maintained validation root `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3372.27 seconds`, and exported `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.TrainingPanel.ControlInputReadinessInspectSurface`, `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlInputReadinessInspectSurface`, and `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts`, each with `index.json` `State=Success`, while the accepted unattended `Failed to create the web browser window.` dialog remained a non-blocking Windows editor lane artifact. | -| Native control/settings ownership inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlSettingsOwnershipInspectSurface`, including the shipped viewer camera-settings owner `tool/camera-settings`, the immersive-presence control contract, dedicated-family `magic120cell-focus-view-profile` and `magiccube5d-projection-view-profile` view ownership, higher-dimensional selector ownership, persisted generated-mode selector recall when a structurally valid launch request is present, and explicit unfinished XR/controller rebinding truth. A later same-day structured-boundary hardening follow-up then carried the same `desktop-hosted-openxr-controller-widening-no-go` decision id plus the explicit reopen requirements for dedicated runtime owners, polished user-facing settings or rebinding ownership, and Windows packaged controller validation into this surface’s structured state as well, so control-settings diagnostics no longer have to prove the boundary only by substring matching their rendered detail line. The same primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4331.11 seconds`, and then exported `Saved\AutomationReports\Browser-ControlSettingsOwnership-Verify\index.json` with all `18` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlSettingsOwnershipInspectSurface`, `TrainingPanel.ControlSettingsOwnershipInspectSurface`, and the previously landed runtime plus control/input inspect seams. A later same-day selector-recall hardening follow-up then rebuilt that same maintained validation root again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4084.77 seconds`, and exported `Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, keeping the current control/settings proof aligned with the latest repository-backed selector-recall behavior. A later same-day post-build structured-boundary follow-up then rebuilt that same maintained validation root once more with `Result: Succeeded`, UnrealBuildTool `Total execution time: 2323.18 seconds`, and exported `Saved\AutomationReports\Browser-XrBoundaryStructured-PostBuild-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, now explicitly covering the stable decision-id and reopen-requirement fields on both control/settings inspect surfaces alongside the sibling control/input and control/profile seams. The latest same-family `2026-06-28` ownership-proof follow-up then tightened this settings seam again by resolving the active higher-dimensional session surface, active interactive-scene surface, dedicated-family session surface, dedicated-family interactive-scene surface, persistence-boundary id, and state-semantics id explicitly for both `Magic120Cell` and `MagicCube5D`, while also carrying concrete projection, symmetry, stereo, visibility, and focus tag counts plus persistence-readiness booleans in structured state instead of leaving that ownership implied by broad view-profile validity. That exact-source proof-hardening follow-up synced the tightened browser test source into the already-current maintained validation root, rebuilt it with `Result: Succeeded` and UnrealBuildTool `Total execution time: 168.35 seconds`, then passed focused browser proof for `HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface`, `HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface`, and `HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts`, so both the inspect surfaces and the rendered structured dashboard row now keep exact family-owned ids such as `phase6c/magic120cell/dedicated-training-session-surface`, `phase6c/magic120cell/interactive-scene-surface`, `magic120cell-persistence-boundary`, `phase6c/magiccube5d/dedicated-training-session-surface`, and `phase6c/magiccube5d/family-owned-scene-state` visible to operators. A later same-day bounded preferences-continuity follow-up then tightened the same settings seam again without reopening native controller widening: the structured state now carries camera workflow, preview-state, export-artifact, immersive presence-surface, recall-scope, preference-field, and reset-surface counts together with explicit camera-continuity and immersive-session-recall readiness booleans; the rendered status text now distinguishes `missing`, `partial`, and `ready` ownership truth instead of collapsing those states; and the shipped `artifact/camera-export-json` plus `immersive-training-session-recall-boundary` ids now stay visible in both the training-panel and coach-dashboard settings detail lines. That exact-source continuity follow-up then rebuilt maintained validation root `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3372.27 seconds`, and exported `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface`, `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface`, and `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts`, each with `index.json` `State=Success`, while the same accepted unattended `Failed to create the web browser window.` dialog remained non-blocking on the Windows editor lane. | +| Native control/settings ownership inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlSettingsOwnershipInspectSurface`, including the shipped viewer camera-settings owner `tool/camera-settings`, the immersive-presence control contract, dedicated-family `magic120cell-focus-view-profile` and `magiccube5d-projection-view-profile` view ownership, higher-dimensional selector ownership, persisted generated-mode selector recall when a structurally valid launch request is present, and explicit unfinished XR/controller rebinding truth. A later same-day structured-boundary hardening follow-up then carried the same `desktop-hosted-openxr-controller-widening-no-go` decision id plus the explicit reopen requirements for dedicated runtime owners, polished user-facing settings or rebinding ownership, and Windows packaged controller validation into this surface’s structured state as well, so control-settings diagnostics no longer have to prove the boundary only by substring matching their rendered detail line. The same primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4331.11 seconds`, and then exported `Saved\AutomationReports\Browser-ControlSettingsOwnership-Verify\index.json` with all `18` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlSettingsOwnershipInspectSurface`, `TrainingPanel.ControlSettingsOwnershipInspectSurface`, and the previously landed runtime plus control/input inspect seams. A later same-day selector-recall hardening follow-up then rebuilt that same maintained validation root again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4084.77 seconds`, and exported `Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, keeping the current control/settings proof aligned with the latest repository-backed selector-recall behavior. A later same-day post-build structured-boundary follow-up then rebuilt that same maintained validation root once more with `Result: Succeeded`, UnrealBuildTool `Total execution time: 2323.18 seconds`, and exported `Saved\AutomationReports\Browser-XrBoundaryStructured-PostBuild-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, now explicitly covering the stable decision-id and reopen-requirement fields on both control/settings inspect surfaces alongside the sibling control/input and control/profile seams. The latest same-family `2026-06-28` ownership-proof follow-up then tightened this settings seam again by resolving the active higher-dimensional session surface, active interactive-scene surface, dedicated-family session surface, dedicated-family interactive-scene surface, persistence-boundary id, and state-semantics id explicitly for both `Magic120Cell` and `MagicCube5D`, while also carrying concrete projection, symmetry, stereo, visibility, and focus tag counts plus persistence-readiness booleans in structured state instead of leaving that ownership implied by broad view-profile validity. That exact-source proof-hardening follow-up synced the tightened browser test source into the already-current maintained validation root, rebuilt it with `Result: Succeeded` and UnrealBuildTool `Total execution time: 168.35 seconds`, then passed focused browser proof for `HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface`, `HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface`, and `HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts`, so both the inspect surfaces and the rendered structured dashboard row now keep exact family-owned ids such as `phase6c/magic120cell/dedicated-training-session-surface`, `phase6c/magic120cell/interactive-scene-surface`, `magic120cell-persistence-boundary`, `phase6c/magiccube5d/dedicated-training-session-surface`, and `phase6c/magiccube5d/family-owned-scene-state` visible to operators. A later same-day bounded preferences-continuity follow-up then tightened the same settings seam again without reopening native controller widening: the structured state now carries camera workflow, preview-state, export-artifact, immersive presence-surface, recall-scope, preference-field, and reset-surface counts together with explicit camera-continuity and immersive-session-recall readiness booleans; the rendered status text now distinguishes `missing`, `partial`, and `ready` ownership truth instead of collapsing those states; and the shipped `artifact/camera-export-json` plus `immersive-training-session-recall-boundary` ids now stay visible in both the training-panel and coach-dashboard settings detail lines. That exact-source continuity follow-up then rebuilt maintained validation root `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3372.27 seconds`, and exported `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.TrainingPanel.ControlSettingsOwnershipInspectSurface`, `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlSettingsOwnershipInspectSurface`, and `Browser-PreferencesContinuity-20260628-HyperTwist.Browser.CoachDashboard.ControlSurfaceStructuredTextArtifacts`, each with `index.json` `State=Success`, while the same accepted unattended `Failed to create the web browser window.` dialog remained non-blocking on the Windows editor lane. A later same-family `2026-06-30` degraded-state hardening follow-up then pulled that same readiness doctrine fully into the shared formatter layer itself, so absent higher-dimensional family ownership now renders as `missing` instead of being overstated as generic `partial`, one-sided view-versus-persistence lanes still render as `partial`, and both the dedicated family lines and the selector-ownership line now mask stale ids/counts while preserving the side of the lane that is actually ready. | | Native control/profile roster inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlProfileRosterInspectSurface`, keeping the actually shipped selectable native roster visible: classic keyboard profile `classic-wca-keyboard/v1` with `18` bindings plus the exact classic move roster, immersive-presence contract `immersive-training-presence-control-contract` with `3` intensity plus `3` reduced-distraction presets, dedicated-family `Magic120Cell` runtime/view ids `magic120cell-runtime-profile` and `magic120cell-focus-view-profile`, dedicated-family `MagicCube5D` runtime/view ids `magiccube5d-runtime-profile` and `magiccube5d-projection-view-profile`, the current `4` selectors in each dedicated-family roster, persisted generated-mode selector recall when a structurally valid launch request is present, and explicit unfinished controller rebinding truth. The rendered roster boundary now also states the fixed desktop-hosted `No-Go` decision on native OpenXR/controller widening instead of sounding like a merely pending generic settings packet. A later same-day structured-boundary hardening follow-up then carried the same `desktop-hosted-openxr-controller-widening-no-go` decision id plus its explicit reopen requirements into the roster surface’s structured state too, so native operator automation can prove the shipped roster boundary without depending only on rendered text. After hash-syncing the touched type/training/dashboard/test files into maintained validation worktree `C:\HyperTwist_worktrees\phase10validate`, the same primary reverse-SSH `localhost:22022` lane rebuilt the widened slice on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3606.23 seconds`, then exported `Saved\AutomationReports\Browser-ControlProfileRoster-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlProfileRosterInspectSurface` and `TrainingPanel.ControlProfileRosterInspectSurface`. A later same-day selector-recall hardening follow-up then rebuilt that same maintained validation root again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4084.77 seconds`, and exported `Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing again, now explicitly covering imported-request fallback plus active-deck precedence for repository-backed selector recall inside the training-panel and coach-dashboard roster surface. The latest same-family truth-render follow-up on `2026-06-24` then rebuilt that same maintained validation root with `Result: Succeeded`, UnrealBuildTool `Total execution time: 172.52 seconds`, and exported `Saved\AutomationReports\Browser-XrNoGoRendered-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, explicitly covering the roster detail-line visibility of the same fixed `No-Go` boundary. A later same-day post-build structured-boundary follow-up then rebuilt that same maintained validation root once more with `Result: Succeeded`, UnrealBuildTool `Total execution time: 2323.18 seconds`, and exported `Saved\AutomationReports\Browser-XrBoundaryStructured-PostBuild-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green again, now explicitly covering the stable decision-id and reopen-requirement fields on both control/profile inspect surfaces alongside the sibling control/input and control/settings seams. A later same-day `2026-06-25` parity follow-up then added the literal shipped classic move-roster line to that surface, mirrored it into dedicated coach-dashboard structured rows, rebuilt the maintained validation root with `Result: Succeeded` at `5278.57 seconds` and exact-source rerun `70.76 seconds`, and exported `Saved\AutomationReports\Browser-ControlRosterParity-Verify\index.json` with all `21` `HyperTwist.Browser.*` tests green, including both training-panel and coach-dashboard control/profile surfaces plus the structured dashboard artifact seam. The later same-family `2026-06-28` continuity follow-up then widened that roster seam again by carrying the active higher-dimensional scene id alongside the active activation, view-context, and session ids, while also resolving the first valid viewer camera-export artifact and keeping `artifact/camera-export-json` plus `immersive-training-session-recall-boundary` visible with recall-scope and preference-field counts through both the native detail line and a dedicated coach-dashboard structured row. The authoritative short-root recovery lane on `C:\HTpp` then re-synced the exact touched Unreal files, rebuilt the exact-source state with `Result: Succeeded` and UnrealBuildTool `Total execution time: 2374.44 seconds`, and exported both `Browser-ControlProfileContinuityParity-20260628-HyperTwist.Browser.TrainingPanel.ControlProfileContinuityParity` and `Browser-ControlProfileContinuityParity-20260628-HyperTwist.Browser.CoachDashboard.ControlProfileContinuityArtifacts` with `Result={Success}`, while the repeated `Failed to create the web browser window.` dialog remained a non-blocking unattended editor artifact. A later exact-source short-root recovery proof on `2026-06-29` then rebuilt the same touched state again with `Result: Succeeded` and UnrealBuildTool `Total execution time: 78.51 seconds`, re-exported `Saved\AutomationReports\ControlProfileContinuity-Rerun` with `HyperTwist.Browser.CoachDashboard.ControlProfileContinuityArtifacts`, `HyperTwist.Browser.TrainingPanel.ControlProfileContinuityParity`, and `HyperTwist.Browser.ControlProfileContinuityStateFormatting` all `Result={Success}`, and also re-exported `Saved\AutomationReports\ContinuityStateFormatting-Rerun` with the wider shared continuity-formatting trio green, so the roster-parity and shared continuity-helper seams are both grounded in current exact-source Windows proof rather than only the earlier broader maintained-root evidence. A final maintained-root exact-source hardening follow-up later that same day then tightened the shared continuity formatter so absent readiness masks stale ids and counts instead of leaking carried-over values, rebuilt `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 3325.07 seconds`, and exported `Continuity-CountMasking-20260629-*` with `HyperTwist.Browser.ControlProfileContinuityStateFormatting`, `HyperTwist.Browser.TrainingPanel.ControlProfileContinuityParity`, and `HyperTwist.Browser.CoachDashboard.ControlProfileContinuityArtifacts` all `Result={Success}`, keeping the shipped roster-continuity truth grounded in current maintained-root degraded-state proof as well. | | Native XR project-plugin posture inspect truth | Implemented now | landed first-party `2026-06-25` browser/native operator continuation | All three native control/input, control/settings, and control/profile inspect surfaces now expose the current project `OpenXR` plugin enabled/disabled fact in both structured state and rendered operator lines, so project-level motion-controller groundwork no longer masquerades as an enabled `OpenXR` shipping posture. The same primary reverse-SSH `localhost:22022` lane rebuilt the exact-source state on maintained validation root `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 99.38 seconds`, then exported `Saved\AutomationReports\Browser-XrPluginProjectPosture-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests green across the training-panel and coach-dashboard input/settings/profile seams. | | Optional full-browser client path above Unreal backend authority | Deep-source grounded retained | landed first-party `Phase 8B` preparation packet + spec/evidence continuation + backend-contract continuation | This branch remains a spec-only first-party option: a browser-owned rendering and input shell may sit above explicit Unreal backend seams while Unreal remains authoritative for puzzle, training, timer, replay, and persistence state. The current continuation now fixes the allowed seam families to catalog, session, action, state, continuity push, replay, persistence status, and runtime health, then further fixes transport-neutral operation labels, minimum identity or freshness requirements, and the owned state/runtime payload anchors that any later browser-client backend implementation must preserve. The landed embedded browser/CEF shell remains the current shipping posture, and this branch stays separate from any native `MagicTile` behavior or renderer widening. | diff --git a/website/src/site-data.ts b/website/src/site-data.ts index 712821a..0ebe2fd 100644 --- a/website/src/site-data.ts +++ b/website/src/site-data.ts @@ -1143,6 +1143,11 @@ export const publicManualRouteAtlasCards = [ ] as const export const changelogEntries = [ + { + date: 'June 30, 2026', + title: 'Native control-settings diagnostics now distinguish missing versus partial higher-dimensional ownership', + details: 'The desktop training-panel and coach-dashboard settings diagnostics no longer flatten every degraded 120-cell, 5D, or selector lane into one vague partial label. The current operator-facing formatter now keeps missing versus partial versus ready ownership explicit while still preserving the ready-side profile, selector, and continuity facts that actually exist.', + }, { date: 'June 30, 2026', title: 'Login and registration now preview the real desktop workflows too',