Harden XR controller ownership truth surfaces

This commit is contained in:
axiomlogicnexus 2026-07-02 02:02:14 +00:00
parent b99227c84a
commit 3cdfa8b1e0
18 changed files with 809 additions and 267 deletions

View file

@ -78,7 +78,7 @@ namespace HyperTwistTrainingControlSurfaceFormatting
)
{
return FString::Printf(
TEXT("Preferences continuity: %s | camera export %s | immersive recall %s | recall scopes %d | preference fields %d | polished rebinding and broader control-settings UI are not yet shipped."),
TEXT("Preferences continuity: %s | camera export %s | immersive recall %s | recall scopes %d | preference fields %d | controller settings/rebinding are now first-party-owned, while packaged controller proof is not yet shipped."),
*DescribeAggregateReadyState(
bCameraSettingsContinuityReady,
bImmersiveSessionRecallReady),
@ -186,11 +186,13 @@ namespace HyperTwistTrainingControlSurfaceFormatting
const bool bMagicCube5DPersistenceSettingsReady,
const bool bMagic120CellSelectorSettingsReady,
const bool bMagicCube5DSelectorSettingsReady,
const bool bRepositoryBackedSelectorRecallReady
const bool bRepositoryBackedSelectorRecallReady,
const bool bControllerRebindingOwnershipReady,
const bool bWindowsPackagedControllerProofReady
)
{
return FString::Printf(
TEXT("camera %s | immersive %s | 120-cell owned settings %s | 5D owned settings %s | selectors %s | selector recall %s | XR rebinding not yet shipped"),
TEXT("camera %s | immersive %s | 120-cell owned settings %s | 5D owned settings %s | selectors %s | selector recall %s | XR rebinding %s | packaged proof %s"),
*DescribeOwnedContinuityState(
bCameraSettingsReady,
bCameraSettingsContinuityReady),
@ -206,7 +208,9 @@ namespace HyperTwistTrainingControlSurfaceFormatting
*DescribeAggregateReadyState(
bMagic120CellSelectorSettingsReady,
bMagicCube5DSelectorSettingsReady),
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable")
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable"),
bControllerRebindingOwnershipReady ? TEXT("owned") : TEXT("missing"),
bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
);
}
@ -338,11 +342,13 @@ namespace HyperTwistTrainingControlSurfaceFormatting
const bool bActiveHigherDimensionalProfileVisible,
const bool bRepositoryBackedSelectorRecallReady,
const bool bCameraSettingsContinuityReady,
const bool bImmersiveSessionRecallReady
const bool bImmersiveSessionRecallReady,
const bool bControllerRebindingOwnershipReady,
const bool bWindowsPackagedControllerProofReady
)
{
return FString::Printf(
TEXT("classic keyboard %s | immersive presets %s | 120-cell family %s | 5D family %s | active selection %s | selector recall %s | profile continuity %s | controller rebinding not yet shipped"),
TEXT("classic keyboard %s | immersive presets %s | 120-cell family %s | 5D family %s | active selection %s | selector recall %s | profile continuity %s | controller rebinding %s | packaged proof %s"),
bClassicKeyboardProfileReady ? TEXT("ready") : TEXT("missing"),
bImmersivePresenceProfileReady ? TEXT("ready") : TEXT("missing"),
bMagic120CellProfileReady ? TEXT("ready") : TEXT("missing"),
@ -351,7 +357,9 @@ namespace HyperTwistTrainingControlSurfaceFormatting
bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable"),
*DescribeAggregateReadyState(
bCameraSettingsContinuityReady,
bImmersiveSessionRecallReady)
bImmersiveSessionRecallReady),
bControllerRebindingOwnershipReady ? TEXT("owned") : TEXT("missing"),
bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
);
}
}

View file

@ -85,12 +85,19 @@ namespace HyperTwistTrainingPanelWidgetInternal
FHyperTwistXrRuntimeOwnershipSurface RuntimeSurface;
FHyperTwistXrPreferenceProfile PreferenceProfile;
FHyperTwistXrControllerBindingProfile ControllerBindingProfile;
FHyperTwistXrControllerSettingsOwnershipSurface ControllerSettingsSurface;
bool bRuntimeOwnerReady = false;
bool bPreferenceProfileReady = false;
bool bControllerBindingProfileReady = false;
bool bControllerSettingsOwnershipReady = false;
bool bControllerRebindingOwnershipReady = false;
bool bWindowsPackagedControllerProofReady = false;
int32 PreferenceFieldCount = 0;
int32 ControllerBindingAxisCount = 0;
int32 SupportedControllerFamilyCount = 0;
int32 ControllerSettingsFieldCount = 0;
int32 ControllerRebindableInputCount = 0;
int32 ControllerLayoutPresetCount = 0;
};
FString DescribeBool(const bool bValue)
@ -602,15 +609,32 @@ namespace HyperTwistTrainingPanelWidgetInternal
UHyperTwistXrRuntimeLibrary::GetDefaultXrPreferenceProfile();
Facts.ControllerBindingProfile =
UHyperTwistXrRuntimeLibrary::GetDefaultXrControllerBindingProfile();
Facts.ControllerSettingsSurface =
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface();
Facts.bRuntimeOwnerReady = Facts.RuntimeSurface.IsStructurallyValid();
Facts.bPreferenceProfileReady = Facts.PreferenceProfile.IsStructurallyValid();
Facts.bControllerBindingProfileReady =
Facts.ControllerBindingProfile.IsStructurallyValid();
Facts.bControllerSettingsOwnershipReady =
Facts.ControllerSettingsSurface.IsStructurallyValid()
&& Facts.ControllerSettingsSurface.bUserFacingSettingsReady;
Facts.bControllerRebindingOwnershipReady =
Facts.ControllerSettingsSurface.IsStructurallyValid()
&& Facts.ControllerSettingsSurface.bUserFacingRebindingReady;
Facts.bWindowsPackagedControllerProofReady =
Facts.ControllerSettingsSurface.IsStructurallyValid()
&& Facts.ControllerSettingsSurface.bWindowsPackagedControllerProofReady;
Facts.PreferenceFieldCount = Facts.PreferenceProfile.PreferenceFieldTags.Num();
Facts.ControllerBindingAxisCount =
Facts.ControllerBindingProfile.RequiredAxisNames.Num();
Facts.SupportedControllerFamilyCount =
Facts.RuntimeSurface.SupportedControllerFamilies.Num();
Facts.ControllerSettingsFieldCount =
Facts.ControllerSettingsSurface.UserVisibleSettingFieldTags.Num();
Facts.ControllerRebindableInputCount =
Facts.ControllerSettingsSurface.RebindableInputNames.Num();
Facts.ControllerLayoutPresetCount =
Facts.ControllerSettingsSurface.LayoutPresetIds.Num();
return Facts;
}
@ -691,6 +715,38 @@ namespace HyperTwistTrainingPanelWidgetInternal
);
}
FString BuildXrControllerSettingsOwnershipLine(
const FXrRuntimeOwnershipFacts& Facts
)
{
return FString::Printf(
TEXT("XR controller settings: %s | rebinding %s | owner %s | surface %s | default layout %s | settings fields %d | rebindable inputs %d | layout presets %d | families %d."),
*DescribeReadyState(Facts.bControllerSettingsOwnershipReady),
*DescribeReadyState(Facts.bControllerRebindingOwnershipReady),
*DescribeIdIfReady(
Facts.bControllerSettingsOwnershipReady,
Facts.ControllerSettingsSurface.SettingsOwnerId),
*DescribeIdIfReady(
Facts.bControllerRebindingOwnershipReady,
Facts.ControllerSettingsSurface.RebindingSurfaceId),
*DescribeIdIfReady(
Facts.bControllerSettingsOwnershipReady,
Facts.ControllerSettingsSurface.DefaultLayoutPresetId),
DescribeCountIfReady(
Facts.bControllerSettingsOwnershipReady,
Facts.ControllerSettingsFieldCount),
DescribeCountIfReady(
Facts.bControllerRebindingOwnershipReady,
Facts.ControllerRebindableInputCount),
DescribeCountIfReady(
Facts.bControllerSettingsOwnershipReady,
Facts.ControllerLayoutPresetCount),
DescribeCountIfReady(
Facts.bControllerSettingsOwnershipReady,
Facts.SupportedControllerFamilyCount)
);
}
const FXrControllerBoundaryFacts& GetXrControllerBoundaryFacts()
{
static const FXrControllerBoundaryFacts CachedFacts = []()
@ -704,21 +760,23 @@ namespace HyperTwistTrainingPanelWidgetInternal
FString BuildControlInputXrBoundaryLine()
{
return TEXT("Current XR host/plugin decision: bounded OpenXR runtime ownership is now first-party-owned inside the desktop simulator, but full native controller widening remains desktop-hosted No-Go until polished settings/rebinding follow-through and Windows packaged controller validation are complete.");
return TEXT("Current XR host/plugin decision: bounded OpenXR runtime ownership plus first-party controller settings/rebinding now exist inside the desktop simulator, but full native controller widening remains desktop-hosted No-Go until Windows packaged controller validation is complete.");
}
FString BuildControlSettingsXrBoundaryLine(const bool bOpenXrProjectPluginEnabled)
{
return FString::Printf(
TEXT("XR/controller completion: the broader host decision remains desktop-hosted No-Go; project OpenXR plugin %s; bounded runtime owners now exist, but polished settings/rebinding follow-through and packaged controller proof are not yet shipped."),
TEXT("XR/controller completion: the broader host decision remains desktop-hosted No-Go; project OpenXR plugin %s; bounded runtime owners and first-party controller settings/rebinding now exist, but packaged controller proof is not yet shipped."),
bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
);
}
FString BuildControlProfileRosterXrBoundaryLine(const bool bOpenXrProjectPluginEnabled)
FString BuildControlProfileRosterXrBoundaryLine(
const bool bOpenXrProjectPluginEnabled
)
{
return FString::Printf(
TEXT("Controller rebinding: not yet shipped; the current native roster now includes a bounded OpenXR runtime plus controller binding profile, but the project OpenXR plugin is %s and the broader XR host decision remains desktop-hosted No-Go until packaged proof and richer settings/rebinding are complete."),
TEXT("Controller rebinding: first-party owned; the current native roster now includes a bounded OpenXR runtime, controller binding profile, and user-facing controller settings/rebinding surface, the project OpenXR plugin is %s, and packaged controller proof is not yet shipped while the broader XR host decision remains desktop-hosted No-Go."),
bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
);
}
@ -1460,17 +1518,35 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
Surface.XrControllerBindingProfileId =
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
Surface.XrControllerSettingsOwnerId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
Surface.XrControllerRebindingSurfaceId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
Surface.XrDefaultControllerLayoutPresetId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
Surface.XrControllerBindingAxisCount =
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
Surface.XrSupportedControllerFamilyCount =
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
Surface.XrControllerSettingsFieldCount =
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
Surface.XrControllerRebindableInputCount =
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
Surface.XrControllerLayoutPresetCount =
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
Surface.bBoundedXrRuntimeOwnerReady =
XrRuntimeOwnershipFacts.bRuntimeOwnerReady;
Surface.bXrPreferenceProfileReady =
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
Surface.bXrControllerBindingProfileReady =
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
Surface.bXrControllerSettingsOwnershipReady =
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
Surface.bXrControllerRebindingOwnershipReady =
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
Surface.bWindowsPackagedControllerProofReady =
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
Surface.bFinishedXrRuntimeReady = false;
Surface.bFinishedPreferencesReady = false;
@ -1487,7 +1563,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
XrBoundaryFacts.bRequiresWindowsPackagedControllerValidationForReopen;
Surface.SummaryLine = FString::Printf(
TEXT("Keyboard and mouse lanes are ready today; bounded OpenXR runtime ownership, controller bindings, and preference profiles now exist, the project OpenXR plugin is %s, and finished packaged XR proof remains intentionally unshipped."),
TEXT("Keyboard and mouse lanes are ready today; bounded OpenXR runtime ownership, controller bindings, preference profiles, and first-party controller settings/rebinding now exist, the project OpenXR plugin is %s, and finished packaged XR proof remains intentionally unshipped."),
Surface.bOpenXrProjectPluginEnabled ? TEXT("enabled") : TEXT("not enabled")
);
Surface.ClassicCubeStatusLine = FString::Printf(
@ -1528,7 +1604,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
? FString::Join(InputGroundworkFacts.MotionControllerFamilies, TEXT(", "))
: FString(TEXT("none"));
Surface.XrStatusLine = FString::Printf(
TEXT("XR groundwork: EnhancedInput config %s | motion controls %s | controller families %d (%s) | OpenXR project plugin %s | vertical adjust axis %s | immersive presence contract %s | bounded runtime owner %s (%s) | controller binding %s (%s) | finished XR runtime not yet shipped."),
TEXT("XR groundwork: EnhancedInput config %s | motion controls %s | controller families %d (%s) | OpenXR project plugin %s | vertical adjust axis %s | immersive presence contract %s | bounded runtime owner %s (%s) | controller binding %s (%s) | controller settings %s (%s) | packaged controller proof %s."),
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
Surface.bEnhancedInputProjectGroundworkPresent),
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
@ -1548,7 +1624,15 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
Surface.bXrControllerBindingProfileReady),
*HyperTwistTrainingPanelWidgetInternal::DescribeIdOrFallback(
Surface.XrControllerBindingProfileId)
Surface.XrControllerBindingProfileId),
*HyperTwistTrainingPanelWidgetInternal::DescribeBool(
Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady),
*HyperTwistTrainingPanelWidgetInternal::DescribeIdOrFallback(
Surface.XrControllerSettingsOwnerId),
Surface.bWindowsPackagedControllerProofReady
? TEXT("ready")
: TEXT("not yet shipped")
);
Surface.PreferencesStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlInputPreferencesStatusLine(
@ -1571,10 +1655,14 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
XrRuntimeOwnershipFacts
);
Surface.XrControllerSettingsLine =
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
XrRuntimeOwnershipFacts
);
Surface.NextPacketLine =
HyperTwistTrainingPanelWidgetInternal::BuildControlInputXrBoundaryLine();
Surface.StatusLine = FString::Printf(
TEXT("classic cube %s | higher-dimensional %s | XR groundwork %s | finished VR/preferences not yet shipped"),
TEXT("classic cube %s | higher-dimensional %s | XR groundwork %s | controller settings/rebinding %s | packaged XR proof %s"),
Surface.bClassicCubeMouseInputReady
&& Surface.bClassicCubeTouchInputReady
&& Surface.bClassicCubeShortcutReady
@ -1588,10 +1676,15 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
&& Surface.bMotionControllerGroundworkPresent
&& Surface.bImmersivePresenceContractReady
? TEXT("present")
: TEXT("limited")
: TEXT("limited"),
Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
? TEXT("owned")
: TEXT("missing"),
Surface.bWindowsPackagedControllerProofReady ? TEXT("ready") : TEXT("not yet shipped")
);
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),
*Surface.ClassicCubeStatusLine,
*Surface.ClassicCubePointerLine,
*Surface.ClassicCubeActionShortcutLine,
@ -1602,6 +1695,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlInputReadinessInspectSurface(
*Surface.XrRuntimeOwnerLine,
*Surface.XrPreferenceOwnerLine,
*Surface.XrControllerBindingLine,
*Surface.XrControllerSettingsLine,
*Surface.NextPacketLine
);
return Surface;
@ -1801,15 +1895,33 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
Surface.XrControllerBindingProfileId =
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
Surface.XrControllerSettingsOwnerId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
Surface.XrControllerRebindingSurfaceId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
Surface.XrDefaultControllerLayoutPresetId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
Surface.XrControllerBindingAxisCount =
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
Surface.XrSupportedControllerFamilyCount =
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
Surface.XrControllerSettingsFieldCount =
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
Surface.XrControllerRebindableInputCount =
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
Surface.XrControllerLayoutPresetCount =
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
Surface.bXrPreferenceProfileReady =
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
Surface.bXrControllerBindingProfileReady =
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
Surface.bXrControllerSettingsOwnershipReady =
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
Surface.bXrControllerRebindingOwnershipReady =
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
Surface.bWindowsPackagedControllerProofReady =
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
Surface.bHigherDimensionalSelectorSettingsReady =
Surface.bMagic120CellViewSettingsReady
@ -1840,7 +1952,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
&& Surface.MagicCube5DSelectorCount > 0;
Surface.SummaryLine =
TEXT("Camera, immersive, dedicated-family, and bounded XR preference settings are already first-party owned, while packaged controller proof and broader rebinding polish still remain unfinished.");
TEXT("Camera, immersive, dedicated-family, bounded XR preference settings, and first-party controller settings/rebinding are already owned, while packaged controller proof still remains unfinished.");
Surface.CameraSettingsLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsCameraSettingsLine(
Surface.bCameraSettingsReady,
@ -1916,10 +2028,13 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallLine(
SelectorRecallFacts
);
Surface.XrSettingsOwnershipLine =
HyperTwistTrainingPanelWidgetInternal::BuildXrPreferenceOwnerLine(
XrRuntimeOwnershipFacts
);
Surface.XrSettingsOwnershipLine = FString::Printf(
TEXT("%s | %s"),
*HyperTwistTrainingPanelWidgetInternal::BuildXrPreferenceOwnerLine(
XrRuntimeOwnershipFacts),
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
XrRuntimeOwnershipFacts)
);
Surface.XrGapLine =
HyperTwistTrainingPanelWidgetInternal::BuildControlSettingsXrBoundaryLine(
Surface.bOpenXrProjectPluginEnabled
@ -1936,7 +2051,10 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
Surface.bMagicCube5DPersistenceSettingsReady,
bMagic120CellSelectorSettingsReady,
bMagicCube5DSelectorSettingsReady,
Surface.bRepositoryBackedSelectorRecallReady
Surface.bRepositoryBackedSelectorRecallReady,
Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady,
Surface.bWindowsPackagedControllerProofReady
);
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s | %s | %s | %s | %s | %s"),
@ -2108,15 +2226,33 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
Surface.XrPreferenceProfileId = XrRuntimeOwnershipFacts.PreferenceProfile.ProfileId;
Surface.XrControllerBindingProfileId =
XrRuntimeOwnershipFacts.ControllerBindingProfile.ProfileId;
Surface.XrControllerSettingsOwnerId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.SettingsOwnerId;
Surface.XrControllerRebindingSurfaceId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.RebindingSurfaceId;
Surface.XrDefaultControllerLayoutPresetId =
XrRuntimeOwnershipFacts.ControllerSettingsSurface.DefaultLayoutPresetId;
Surface.XrPreferenceFieldCount = XrRuntimeOwnershipFacts.PreferenceFieldCount;
Surface.XrControllerBindingAxisCount =
XrRuntimeOwnershipFacts.ControllerBindingAxisCount;
Surface.XrSupportedControllerFamilyCount =
XrRuntimeOwnershipFacts.SupportedControllerFamilyCount;
Surface.XrControllerSettingsFieldCount =
XrRuntimeOwnershipFacts.ControllerSettingsFieldCount;
Surface.XrControllerRebindableInputCount =
XrRuntimeOwnershipFacts.ControllerRebindableInputCount;
Surface.XrControllerLayoutPresetCount =
XrRuntimeOwnershipFacts.ControllerLayoutPresetCount;
Surface.bXrPreferenceProfileReady =
XrRuntimeOwnershipFacts.bPreferenceProfileReady;
Surface.bXrControllerBindingProfileReady =
XrRuntimeOwnershipFacts.bControllerBindingProfileReady;
Surface.bXrControllerSettingsOwnershipReady =
XrRuntimeOwnershipFacts.bControllerSettingsOwnershipReady;
Surface.bXrControllerRebindingOwnershipReady =
XrRuntimeOwnershipFacts.bControllerRebindingOwnershipReady;
Surface.bWindowsPackagedControllerProofReady =
XrRuntimeOwnershipFacts.bWindowsPackagedControllerProofReady;
Surface.bFinishedControllerRebindingReady = false;
Surface.bOpenXrProjectPluginEnabled =
@ -2175,7 +2311,7 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
? Surface.ActiveHigherDimensionalInteractiveSceneSurfaceId
: TEXT("none");
Surface.SummaryLine =
TEXT("The shipped selectable roster currently covers the classic keyboard mapping, scenic immersive presets, bounded XR controller profiles, bounded camera or immersive continuity, and dedicated 120-cell/5D view-selector families, while controller rebinding still remains unfinished.");
TEXT("The shipped selectable roster currently covers the classic keyboard mapping, scenic immersive presets, bounded XR controller profiles, first-party controller settings/rebinding ownership, bounded camera or immersive continuity, and dedicated 120-cell/5D view-selector families, while packaged controller proof still remains unfinished.");
Surface.ClassicKeyboardProfileLine = FString::Printf(
TEXT("Classic keyboard profile: %s | bindings %d | ctrl suppressed %s | alt suppressed %s | meta suppressed %s | repeat suppressed %s."),
*ClassicKeyboardProfileName,
@ -2241,10 +2377,13 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
Surface.ImmersiveSessionRecallScopeCount,
Surface.ImmersiveSessionRecallPreferenceFieldTagCount
);
Surface.XrControllerProfileLine =
HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
XrRuntimeOwnershipFacts
);
Surface.XrControllerProfileLine = FString::Printf(
TEXT("%s | %s"),
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerBindingLine(
XrRuntimeOwnershipFacts),
*HyperTwistTrainingPanelWidgetInternal::BuildXrControllerSettingsOwnershipLine(
XrRuntimeOwnershipFacts)
);
Surface.PreferencesGapLine =
HyperTwistTrainingPanelWidgetInternal::BuildControlProfileRosterXrBoundaryLine(
Surface.bOpenXrProjectPluginEnabled
@ -2258,7 +2397,10 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
Surface.bActiveHigherDimensionalProfileVisible,
Surface.bRepositoryBackedSelectorRecallReady,
Surface.bCameraSettingsContinuityReady,
Surface.bImmersiveSessionRecallReady
Surface.bImmersiveSessionRecallReady,
Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady,
Surface.bWindowsPackagedControllerProofReady
);
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s | %s | %s | %s | %s | %s | %s | %s"),

View file

@ -101,6 +101,66 @@ UHyperTwistXrRuntimeLibrary::GetDefaultXrControllerBindingProfile()
return Profile;
}
FHyperTwistXrControllerSettingsOwnershipSurface
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface()
{
using namespace HyperTwistXrRuntimeLibraryInternal;
const FHyperTwistXrControllerBindingProfile BindingProfile =
GetDefaultXrControllerBindingProfile();
FHyperTwistXrControllerSettingsOwnershipSurface Surface;
Surface.SettingsOwnerId = TEXT("xr-openxr-controller-settings-owner/v1");
Surface.RebindingSurfaceId = TEXT("xr-openxr-controller-rebinding-surface/v1");
Surface.Title = TEXT("OpenXR controller settings and rebinding owner");
Surface.Summary = TEXT("First-party user-visible controller settings and rebinding ownership for the bounded desktop-hosted HyperTwist OpenXR lane, covering the exact shipped XR input ids, layout presets, and per-session comfort tuning without claiming packaged controller certification.");
Surface.DefaultLayoutPresetId = TEXT("xr-openxr-controller-layout-default/v1");
Surface.UserVisibleSettingFieldTags =
{
TEXT("locomotion hand preference"),
TEXT("turn hand preference"),
TEXT("look pitch inversion"),
TEXT("vertical adjust shoulder polarity"),
TEXT("grip analog dead zone"),
TEXT("trigger analog dead zone"),
TEXT("snap-turn mode toggle"),
TEXT("haptic intensity")
};
Surface.RebindableInputNames =
{
TEXT("HyperTwistXr_MoveForward"),
TEXT("HyperTwistXr_MoveRight"),
TEXT("HyperTwistXr_VerticalAdjust"),
TEXT("HyperTwistXr_Turn"),
TEXT("HyperTwistXr_LookPitch"),
TEXT("HyperTwistXr_LeftGrip"),
TEXT("HyperTwistXr_RightGrip"),
TEXT("HyperTwistXr_LeftTrigger"),
TEXT("HyperTwistXr_RightTrigger"),
TEXT("HyperTwistXr_Recenter"),
TEXT("HyperTwistXr_ToggleSnapTurn"),
TEXT("HyperTwistXr_TogglePostureMode")
};
Surface.LayoutPresetIds =
{
TEXT("xr-openxr-controller-layout-default/v1"),
TEXT("xr-openxr-controller-layout-southpaw/v1"),
TEXT("xr-openxr-controller-layout-seated-comfort/v1")
};
Surface.SupportedControllerFamilies = BindingProfile.ControllerFamilyIds;
Surface.ExplicitExclusions =
{
TEXT("platform-global controller remap UI"),
TEXT("vendor-specific hand-tracking ownership"),
TEXT("launch-tier packaged controller certification ownership")
};
Surface.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/xr-openxr-controller-settings-rebinding"),
TEXT("Owns first-party user-visible XR controller settings and rebinding inside the bounded HyperTwist desktop simulator while keeping packaged controller proof and cross-device certification outside the current packet.")
);
return Surface;
}
FHyperTwistXrRuntimeOwnershipSurface
UHyperTwistXrRuntimeLibrary::BuildBundledXrRuntimeOwnershipSurface()
{

View file

@ -10024,6 +10024,9 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerBindingLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerSettingsLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString NextPacketLine;
@ -10042,6 +10045,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerBindingProfileId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerSettingsOwnerId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerRebindingSurfaceId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrDefaultControllerLayoutPresetId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 MotionControllerFamilyCount = 0;
@ -10054,6 +10066,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrSupportedControllerFamilyCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerSettingsFieldCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerRebindableInputCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerLayoutPresetCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bOpenXrProjectPluginEnabled = false;
@ -10096,6 +10117,15 @@ struct FHyperTwistTrainingControlInputReadinessInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerBindingProfileReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerSettingsOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerRebindingOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bWindowsPackagedControllerProofReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bFinishedXrRuntimeReady = false;
@ -10197,6 +10227,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerBindingProfileId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerSettingsOwnerId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerRebindingSurfaceId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrDefaultControllerLayoutPresetId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ActiveHigherDimensionalViewContextId;
@ -10302,6 +10341,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrSupportedControllerFamilyCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerSettingsFieldCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerRebindableInputCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerLayoutPresetCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bCameraSettingsReady = false;
@ -10341,6 +10389,15 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerBindingProfileReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerSettingsOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerRebindingOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bWindowsPackagedControllerProofReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bFinishedControllerRebindingReady = false;
@ -10452,6 +10509,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerBindingProfileId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerSettingsOwnerId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrControllerRebindingSurfaceId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrDefaultControllerLayoutPresetId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Magic120CellRuntimeProfileContractId;
@ -10512,6 +10578,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrSupportedControllerFamilyCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerSettingsFieldCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerRebindableInputCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 XrControllerLayoutPresetCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bClassicKeyboardProfileReady = false;
@ -10542,6 +10617,15 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerBindingProfileReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerSettingsOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bXrControllerRebindingOwnershipReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bWindowsPackagedControllerProofReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bFinishedControllerRebindingReady = false;

View file

@ -146,6 +146,67 @@ struct FHyperTwistXrControllerBindingProfile
}
};
USTRUCT(BlueprintType)
struct FHyperTwistXrControllerSettingsOwnershipSurface
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SettingsOwnerId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString RebindingSurfaceId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString DefaultLayoutPresetId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> UserVisibleSettingFieldTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RebindableInputNames;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> LayoutPresetIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SupportedControllerFamilies;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bUserFacingSettingsReady = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bUserFacingRebindingReady = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bWindowsPackagedControllerProofReady = false;
bool IsStructurallyValid() const
{
return !SettingsOwnerId.IsEmpty()
&& !RebindingSurfaceId.IsEmpty()
&& !Title.IsEmpty()
&& !DefaultLayoutPresetId.IsEmpty()
&& UserVisibleSettingFieldTags.Num() > 0
&& RebindableInputNames.Num() > 0
&& LayoutPresetIds.Num() > 0
&& SupportedControllerFamilies.Num() > 0
&& SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistXrRuntimeOwnershipSurface
{
@ -229,6 +290,10 @@ public:
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
static FHyperTwistXrControllerBindingProfile GetDefaultXrControllerBindingProfile();
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
static FHyperTwistXrControllerSettingsOwnershipSurface
BuildBundledXrControllerSettingsOwnershipSurface();
UFUNCTION(BlueprintPure, Category = "HyperTwist|XR")
static FHyperTwistXrRuntimeOwnershipSurface BuildBundledXrRuntimeOwnershipSurface();
};

View file

@ -1156,18 +1156,30 @@ bool FHyperTwistTrainingPanelControlInputReadinessInspectSurfaceTest::RunTest(
TEXT("The control/input readiness surface must keep unfinished XR/runtime and preferences truth explicit."),
Surface.bFinishedXrRuntimeReady || Surface.bFinishedPreferencesReady
);
TestTrue(
TEXT("The control/input readiness surface must expose the bounded XR runtime owner, preference profile, and controller binding profile."),
Surface.bBoundedXrRuntimeOwnerReady
&& Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The control/input readiness surface must expose the bounded XR runtime owner, preference profile, controller binding profile, and controller settings ownership surface."),
Surface.bBoundedXrRuntimeOwnerReady
&& Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrDefaultControllerLayoutPresetId
== TEXT("xr-openxr-controller-layout-default/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
&& !Surface.bWindowsPackagedControllerProofReady
);
TestTrue(
TEXT("The control/input readiness surface must now expose bounded non-XR preferences continuity for camera export and immersive session recall."),
Surface.PreferencesStatusLine.Contains(TEXT("artifact/camera-export-json"))
@ -1187,30 +1199,33 @@ bool FHyperTwistTrainingPanelControlInputReadinessInspectSurfaceTest::RunTest(
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
);
TestTrue(
TEXT("The control/input readiness surface must say plainly that finished XR runtime is not yet shipped."),
Surface.XrStatusLine.Contains(TEXT("not yet shipped"))
&& Surface.XrStatusLine.Contains(TEXT("OpenXR project plugin yes"))
&& Surface.XrStatusLine.Contains(TEXT("vertical adjust axis yes"))
&& Surface.XrStatusLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
);
TestTrue(
TEXT("The control/input readiness surface must say plainly that controller settings/rebinding are owned while packaged controller proof is not yet shipped."),
Surface.XrStatusLine.Contains(TEXT("not yet shipped"))
&& Surface.XrStatusLine.Contains(TEXT("OpenXR project plugin yes"))
&& Surface.XrStatusLine.Contains(TEXT("vertical adjust axis yes"))
&& Surface.XrStatusLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
&& Surface.XrStatusLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
);
TestTrue(
TEXT("The control/input readiness surface must now spell out the bounded vertical-adjust and pointer preference ownership."),
Surface.XrPreferenceOwnerLine.Contains(TEXT("vertical adjust 120"))
&& Surface.XrPreferenceOwnerLine.Contains(TEXT("pointer 180"))
);
TestTrue(
TEXT("The control/input readiness surface must retain the fixed No-Go host decision and the later settings/rebinding follow-through."),
Surface.NextPacketLine.Contains(TEXT("No-Go"))
&& Surface.NextPacketLine.Contains(TEXT("settings/rebinding"))
);
TestTrue(
TEXT("The control/input readiness detail line must surface the fixed No-Go host decision operators actually need to see."),
Surface.DetailLine.Contains(TEXT("No-Go"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
);
TestTrue(
TEXT("The control/input readiness surface must retain the fixed No-Go host decision and the remaining packaged-controller validation gap."),
Surface.NextPacketLine.Contains(TEXT("No-Go"))
&& Surface.NextPacketLine.Contains(TEXT("packaged controller validation"))
);
TestTrue(
TEXT("The control/input readiness detail line must surface the fixed No-Go host decision operators actually need to see."),
Surface.DetailLine.Contains(TEXT("No-Go"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
);
return true;
}
@ -1260,13 +1275,14 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
&& Surface.DetailLine.Contains(TEXT("R scramble"))
&& Surface.DetailLine.Contains(TEXT("V hold-to-talk"))
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must retain the unfinished XR/runtime truth in its detail line."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("OpenXR project plugin yes"))
&& Surface.DetailLine.Contains(TEXT("vertical adjust axis yes"))
&& Surface.DetailLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must retain the packaged-proof gap and controller-settings ownership truth in its detail line."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("OpenXR project plugin yes"))
&& Surface.DetailLine.Contains(TEXT("vertical adjust axis yes"))
&& Surface.DetailLine.Contains(TEXT("xr/openxr-desktop-training-runtime-owner"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must retain the bounded non-XR preferences continuity ids in its detail line."),
Surface.DetailLine.Contains(TEXT("artifact/camera-export-json"))
@ -1282,18 +1298,28 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
Surface.DetailLine.Contains(TEXT("vertical adjust 120"))
&& Surface.DetailLine.Contains(TEXT("pointer 180"))
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must expose the bounded XR runtime owner, preference profile, and controller binding profile."),
Surface.bBoundedXrRuntimeOwnerReady
&& Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must expose the bounded XR runtime owner, preference profile, controller binding profile, and controller settings ownership surface."),
Surface.bBoundedXrRuntimeOwnerReady
&& Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
&& !Surface.bWindowsPackagedControllerProofReady
);
TestEqual(
TEXT("The coach dashboard control/input readiness surface must preserve the structured XR host decision id."),
Surface.XrHostDecisionId,
@ -1306,12 +1332,13 @@ bool FHyperTwistCoachDashboardControlInputReadinessInspectSurfaceTest::RunTest(
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must keep the fixed No-Go host decision visible in its rendered detail line."),
Surface.DetailLine.Contains(TEXT("No-Go"))
&& Surface.DetailLine.Contains(TEXT("settings/rebinding"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
);
TestTrue(
TEXT("The coach dashboard control/input readiness surface must keep the fixed No-Go host decision visible in its rendered detail line."),
Surface.DetailLine.Contains(TEXT("No-Go"))
&& Surface.DetailLine.Contains(TEXT("packaged controller validation"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
);
return true;
}
@ -1351,9 +1378,12 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
&& Surface.bMagicCube5DViewSettingsReady
&& Surface.bHigherDimensionalSelectorSettingsReady
);
TestFalse(
TEXT("The control settings ownership surface must keep unfinished XR/controller rebinding truth explicit."),
Surface.bFinishedControllerRebindingReady
TestTrue(
TEXT("The control settings ownership surface must now expose first-party XR/controller rebinding ownership explicitly while keeping finished packaged proof false."),
!Surface.bFinishedControllerRebindingReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& !Surface.bWindowsPackagedControllerProofReady
);
TestTrue(
TEXT("The control settings ownership surface must keep the current enabled OpenXR project plugin posture explicit."),
@ -1396,17 +1426,28 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
&& Surface.ImmersiveSessionRecallPreferenceFieldTagCount == 5
&& Surface.ImmersiveSessionRecallResetSurfaceTagCount == 3
);
TestTrue(
TEXT("The control settings ownership surface must expose the bounded XR preference and controller-profile ownership packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The control settings ownership surface must expose the bounded XR preference, controller-profile, and controller-settings ownership packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrDefaultControllerLayoutPresetId
== TEXT("xr-openxr-controller-layout-default/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
);
TestEqual(
TEXT("The control settings ownership surface must keep the default active higher-dimensional view context explicit when no live session is attached."),
Surface.ActiveHigherDimensionalViewContextId,
@ -1506,12 +1547,14 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
Surface.MagicCube5DSelectorCount,
4
);
TestTrue(
TEXT("The control settings ownership surface must say plainly that XR/controller rebinding is not yet shipped."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin enabled"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
);
TestTrue(
TEXT("The control settings ownership surface must say plainly that XR/controller rebinding is first-party-owned while packaged proof is not yet shipped."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin enabled"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-training-preferences/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
);
TestTrue(
TEXT("The control settings ownership surface must keep the fixed desktop-hosted No-Go posture visible."),
Surface.DetailLine.Contains(TEXT("No-Go"))
@ -1670,17 +1713,28 @@ bool FHyperTwistCoachDashboardControlSettingsOwnershipInspectSurfaceTest::RunTes
TEXT("The coach dashboard control settings ownership surface must preserve the explicit enabled OpenXR project plugin posture."),
Surface.bOpenXrProjectPluginEnabled
);
TestTrue(
TEXT("The coach dashboard control settings ownership surface must expose the bounded XR preference and controller binding packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The coach dashboard control settings ownership surface must expose the bounded XR preference, controller binding, and controller settings packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
&& !Surface.bFinishedControllerRebindingReady
&& !Surface.bWindowsPackagedControllerProofReady
);
TestTrue(
TEXT("The coach dashboard control settings ownership surface must preserve the structured No-Go decision and reopen requirements."),
Surface.bNativeOpenXrControllerWideningNoGo
@ -1764,25 +1818,37 @@ bool FHyperTwistTrainingPanelControlProfileRosterInspectSurfaceTest::RunTest(
&& Surface.Magic120CellSelectorCount == 4
&& Surface.MagicCube5DSelectorCount == 4
);
TestFalse(
TEXT("The control/profile roster surface must keep unfinished controller rebinding truth explicit."),
Surface.bFinishedControllerRebindingReady
TestTrue(
TEXT("The control/profile roster surface must now expose first-party controller rebinding ownership explicitly while keeping finished packaged proof false."),
!Surface.bFinishedControllerRebindingReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& !Surface.bWindowsPackagedControllerProofReady
);
TestTrue(
TEXT("The control/profile roster surface must keep the current enabled OpenXR project plugin posture explicit."),
Surface.bOpenXrProjectPluginEnabled
);
TestTrue(
TEXT("The control/profile roster surface must expose the bounded XR controller profile packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The control/profile roster surface must expose the bounded XR controller profile and controller settings packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
);
TestEqual(
TEXT("The control/profile roster surface must expose a stable structured XR host decision id."),
Surface.XrHostDecisionId,
@ -1795,12 +1861,14 @@ bool FHyperTwistTrainingPanelControlProfileRosterInspectSurfaceTest::RunTest(
&& Surface.bRequiresUserFacingSettingsRebindingForReopen
&& Surface.bRequiresWindowsPackagedControllerValidationForReopen
);
TestTrue(
TEXT("The control/profile roster surface must say plainly that controller rebinding is not yet shipped."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin is enabled"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
);
TestTrue(
TEXT("The control/profile roster surface must say plainly that controller rebinding is first-party-owned while packaged proof is not yet shipped."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
&& Surface.DetailLine.Contains(TEXT("project OpenXR plugin is enabled"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-motion-controllers/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-settings-owner/v1"))
&& Surface.DetailLine.Contains(TEXT("xr-openxr-controller-rebinding-surface/v1"))
);
TestTrue(
TEXT("The control/profile roster surface must keep the fixed No-Go host decision visible alongside the unfinished controller rebinding truth."),
Surface.DetailLine.Contains(TEXT("No-Go"))
@ -1906,17 +1974,28 @@ bool FHyperTwistCoachDashboardControlProfileRosterInspectSurfaceTest::RunTest(
TEXT("The coach dashboard control/profile roster surface must preserve the explicit enabled OpenXR project plugin posture."),
Surface.bOpenXrProjectPluginEnabled
);
TestTrue(
TEXT("The coach dashboard control/profile roster surface must expose the bounded XR controller profile packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
);
TestTrue(
TEXT("The coach dashboard control/profile roster surface must expose the bounded XR controller profile and controller settings packet."),
Surface.bXrPreferenceProfileReady
&& Surface.bXrControllerBindingProfileReady
&& Surface.bXrControllerSettingsOwnershipReady
&& Surface.bXrControllerRebindingOwnershipReady
&& Surface.XrRuntimeOwnerId == TEXT("xr/openxr-desktop-training-runtime-owner")
&& Surface.XrPreferenceProfileId == TEXT("xr-openxr-training-preferences/v1")
&& Surface.XrControllerBindingProfileId == TEXT("xr-openxr-motion-controllers/v1")
&& Surface.XrControllerSettingsOwnerId
== TEXT("xr-openxr-controller-settings-owner/v1")
&& Surface.XrControllerRebindingSurfaceId
== TEXT("xr-openxr-controller-rebinding-surface/v1")
&& Surface.XrPreferenceFieldCount == 8
&& Surface.XrControllerBindingAxisCount == 8
&& Surface.XrSupportedControllerFamilyCount == 4
&& Surface.XrControllerSettingsFieldCount == 8
&& Surface.XrControllerRebindableInputCount == 12
&& Surface.XrControllerLayoutPresetCount == 3
&& !Surface.bFinishedControllerRebindingReady
&& !Surface.bWindowsPackagedControllerProofReady
);
TestTrue(
TEXT("The coach dashboard control/profile roster surface must preserve the structured No-Go decision and reopen requirements."),
Surface.bNativeOpenXrControllerWideningNoGo

View file

@ -322,53 +322,61 @@ bool FHyperTwistControlSettingsContinuityStateFormattingTest::RunTest(
&& MissingSelectorOwnershipLine.Contains(TEXT("active selectors 0"))
);
const FString MissingStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
);
const FString MissingStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
false,
false,
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,
false,
true,
false,
true,
true,
true,
false,
true,
false,
false
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"))
&& MissingStatusLine.Contains(TEXT("XR rebinding missing"))
&& MissingStatusLine.Contains(TEXT("packaged proof not yet shipped"))
);
const FString MixedStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlSettingsStatusLine(
false,
false,
true,
false,
true,
true,
true,
false,
true,
false,
false,
true,
false
);
TestTrue(
TEXT("The control/settings status formatter must keep mixed missing-versus-partial continuity truth explicit instead of collapsing it into one generic degraded label."),
MixedStatusLine.Contains(TEXT("camera missing"))
&& MixedStatusLine.Contains(TEXT("immersive partial"))
&& MixedStatusLine.Contains(TEXT("120-cell owned settings ready"))
&& MixedStatusLine.Contains(TEXT("5D owned settings partial"))
&& MixedStatusLine.Contains(TEXT("selectors partial"))
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
);
MixedStatusLine.Contains(TEXT("camera missing"))
&& MixedStatusLine.Contains(TEXT("immersive partial"))
&& MixedStatusLine.Contains(TEXT("120-cell owned settings ready"))
&& MixedStatusLine.Contains(TEXT("5D owned settings partial"))
&& MixedStatusLine.Contains(TEXT("selectors partial"))
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
&& MixedStatusLine.Contains(TEXT("XR rebinding owned"))
&& MixedStatusLine.Contains(TEXT("packaged proof not yet shipped"))
);
return true;
}
@ -435,24 +443,28 @@ bool FHyperTwistControlProfileContinuityStateFormattingTest::RunTest(
&& ReadyContinuityLine.Contains(TEXT("preference fields 5"))
);
const FString MixedStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlProfileStatusLine(
const FString MixedStatusLine =
HyperTwistTrainingControlSurfaceFormatting::BuildControlProfileStatusLine(
true,
true,
true,
true,
true,
true,
false,
false,
true,
false
);
false,
false,
true,
false,
true,
false
);
TestTrue(
TEXT("The control/profile status formatter must keep partial continuity truth explicit alongside unloaded active-selection and unavailable selector-recall posture."),
MixedStatusLine.Contains(TEXT("classic keyboard ready"))
&& MixedStatusLine.Contains(TEXT("active selection not loaded"))
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
&& MixedStatusLine.Contains(TEXT("profile continuity partial"))
);
MixedStatusLine.Contains(TEXT("classic keyboard ready"))
&& MixedStatusLine.Contains(TEXT("active selection not loaded"))
&& MixedStatusLine.Contains(TEXT("selector recall unavailable"))
&& MixedStatusLine.Contains(TEXT("profile continuity partial"))
&& MixedStatusLine.Contains(TEXT("controller rebinding owned"))
&& MixedStatusLine.Contains(TEXT("packaged proof not yet shipped"))
);
return true;
}

View file

@ -101,13 +101,47 @@ bool FHyperTwistXrPreferenceAndBindingProfileTest::RunTest(const FString& Parame
&& BindingProfile.RequiredAxisNames.Contains(TEXT("HyperTwistXr_Turn"))
&& BindingProfile.RequiredAxisNames.Contains(TEXT("HyperTwistXr_RightTrigger"))
);
TestTrue(
TEXT("The XR controller binding profile must preserve the supported controller families."),
BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/oculus-touch"))
&& BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/valve-index"))
);
return true;
}
TestTrue(
TEXT("The XR controller binding profile must preserve the supported controller families."),
BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/oculus-touch"))
&& BindingProfile.ControllerFamilyIds.Contains(TEXT("controller/valve-index"))
);
const FHyperTwistXrControllerSettingsOwnershipSurface ControllerSettingsSurface =
UHyperTwistXrRuntimeLibrary::BuildBundledXrControllerSettingsOwnershipSurface();
TestTrue(
TEXT("The XR controller settings ownership surface must be structurally valid."),
ControllerSettingsSurface.IsStructurallyValid()
);
TestEqual(
TEXT("The XR controller settings ownership owner id must stay stable."),
ControllerSettingsSurface.SettingsOwnerId,
FString(TEXT("xr-openxr-controller-settings-owner/v1"))
);
TestEqual(
TEXT("The XR controller settings rebinding surface id must stay stable."),
ControllerSettingsSurface.RebindingSurfaceId,
FString(TEXT("xr-openxr-controller-rebinding-surface/v1"))
);
TestEqual(
TEXT("The XR controller settings default layout preset id must stay stable."),
ControllerSettingsSurface.DefaultLayoutPresetId,
FString(TEXT("xr-openxr-controller-layout-default/v1"))
);
TestTrue(
TEXT("The XR controller settings ownership surface must preserve the exact shipped rebindable XR input names."),
ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_VerticalAdjust"))
&& ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_Recenter"))
&& ControllerSettingsSurface.RebindableInputNames.Contains(TEXT("HyperTwistXr_TogglePostureMode"))
);
TestTrue(
TEXT("The XR controller settings ownership surface must keep packaged controller proof explicitly outside the current packet."),
ControllerSettingsSurface.ExplicitExclusions.Contains(
TEXT("launch-tier packaged controller certification ownership"))
&& !ControllerSettingsSurface.bWindowsPackagedControllerProofReady
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistXrTrainingPawnDefaultsTest,

View file

@ -179,8 +179,8 @@ Use these as the current governing docs:
camera-settings owner, immersive-presence settings, dedicated-family
`Magic120Cell` / `MagicCube5D` view-profile ownership, selector ownership,
persisted generated-mode selector recall when a structurally valid launch
request is present, and explicit unfinished XR/controller rebinding truth
without opening the browser shell
request is present, and the then-live bounded XR/controller settings gap
truth without opening the browser shell
- Validation evidence on `2026-06-24`: the same primary reverse-SSH
`localhost:22022` lane rebuilt maintained isolated worktree
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and
@ -208,8 +208,8 @@ Use these as the current governing docs:
dedicated-family `Magic120Cell` /
`MagicCube5D` runtime/view profile ids plus selector counts, persisted
generated-mode selector recall when a structurally valid launch request is
present, and explicit unfinished controller rebinding truth without opening
the browser shell
present, and the then-live bounded XR/controller settings gap truth without
opening the browser shell
- Validation evidence on `2026-06-24`: after hash-syncing the touched type,
training-panel, coach-dashboard, and browser-test files into maintained
isolated worktree `C:\HyperTwist_worktrees\phase10validate`, the same

View file

@ -151,17 +151,25 @@ Therefore the current truthful host decision is:
Future native XR widening may reopen only when all of the following are true:
1. polished controller bindings plus rebinding/preferences ownership are
first-party and user-visible
2. Windows build plus focused automation plus packaged validation prove actual
1. Windows build plus focused automation plus packaged validation prove actual
headset/controller behavior on the shipping lane
3. public/product copy is updated only after those proofs exist
2. public/product copy is updated only after those proofs exist
## Immediate consequence
No native XR implementation packet is currently open by default.
If the project later reopens this lane, the first implementation packet should
be finished user-facing controller settings/rebinding ownership plus packaged
controller proof above the now-landed bounded runtime-owner substrate, not
public marketing widening.
be packaged controller proof and shipping-lane validation above the now-landed
bounded runtime-owner plus controller-settings substrate, not public marketing
widening.
## Update - 2026-07-01 - controller-settings ownership continuation
- the next same-family continuation now adds first-party user-facing
controller settings ownership, layout presets, and rebinding truth for the
exact shipped XR input ids above the already-landed bounded runtime-owner
substrate
- that means the broader native XR/controller widening gate no longer waits on
a hypothetical settings/rebinding layer; it now waits on Windows packaged
controller validation with controller truth on the shipping lane

View file

@ -147,7 +147,8 @@ truthfully claim:
- higher-dimensional selector ownership
- recall of the latest persisted generated-mode selector posture when a
structurally valid launch request has been observed
- explicit unfinished XR/controller rebinding truth
- bounded XR/controller settings and rebinding truth while packaged proof
remains unfinished
- Windows validation on `2026-06-24` rebuilt the maintained validation root
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`,
UnrealBuildTool `Total execution time: 4331.11 seconds`, then exported
@ -197,7 +198,8 @@ truthfully claim:
- the current `4` selector options in each dedicated-family roster
- recall of the latest persisted generated-mode selector posture when a
structurally valid launch request has been observed
- explicit unfinished XR/controller rebinding truth
- bounded XR/controller settings and rebinding truth while packaged proof
remains unfinished
- Windows validation on `2026-06-24` hash-synced the touched training, coach,
type, and browser-test files into maintained validation root
`C:\HyperTwist_worktrees\phase10validate`, rebuilt the widened slice with
@ -386,9 +388,11 @@ truthfully claim:
above; current source truth is that the desktop-hosted branch now carries a
deliberately bounded `OpenXR` + `XRBase` stack plus first-party runtime-owner
classes
- that later exact-source state still does **not** yet prove:
- the later `2026-07-01` same-family continuation now also adds first-party
user-facing controller settings, layout presets, and rebinding ownership for
the exact shipped XR input ids
- the current remaining unproven pieces therefore are:
- packaged headset/controller behavior on the Windows lane
- polished user-facing controller rebinding/settings ownership
- broader launch-tier cross-device XR completion
- `HyperTwistTrainingImmersiveEnvironmentLibrary.cpp` clearly establishes a
first-party immersive/scenic environment direction, but it also explicitly
@ -416,6 +420,11 @@ Current truthful product wording should say:
selectors
- camera, immersive, and dedicated-family view settings already have bounded
first-party ownership
- bounded desktop XR now also has first-party controller settings/rebinding
ownership for the exact shipped XR input ids
- native/operator structured state must keep that owned controller lane
separate from finished packaged-proof truth; ownership here does not itself
mean shipping-lane XR completion
- immersive/scenic training direction: first-party owned and source-backed
- full VR/controller/settings polish lane: not yet complete enough to market as
finished
@ -429,13 +438,15 @@ manual:
and higher-dimensional control ownership from unfinished VR/controller claims
- docs/resources/support surfaces may truthfully describe the current shipped
roster of keyboard, scenic immersive, and dedicated-family selector/view
options, but they must not collapse that into finished controller rebinding
options together with the now-owned bounded XR controller settings/rebinding
lane, but they must not collapse that into finished packaged XR completion
- docs/resources/support surfaces may truthfully describe current persisted
higher-dimensional selector recall on native operator/training surfaces, but
they must not market that as a full generalized preferences suite
- docs/resources/support surfaces may truthfully describe current camera or
immersive or dedicated-family view settings ownership, but they must not
inflate that into full controller rebinding or headset-runtime completion
immersive or dedicated-family view settings ownership together with bounded
XR controller settings/rebinding ownership, but they must not inflate that
into packaged headset/runtime completion
- public copy should not imply that `EnhancedInput` plus motion-controller axis
groundwork already equals a finished OpenXR/runtime or rebinding lane
- browser/distribution pages may describe the simulator input posture, but they
@ -450,12 +461,9 @@ The explicit native host/plugin decision is now fixed by:
That packet leaves native XR widening closed by default.
If the project later reopens this lane from the current `No-Go` posture, the
first clean implementation packet should be:
first clean remaining implementation packet should be:
1. a bounded native plugin/runtime-owner slice above the current desktop-hosted
immersive lane
2. finished controller-specific rebinding/preferences ownership above the
already-landed camera/immersive/view settings surfaces and the current
shipped roster inspect surface
3. packaged validation on the Windows Unreal lane with headset/controller truth
kept explicit
1. packaged validation on the Windows Unreal lane with headset/controller truth
kept explicit above the now-landed bounded runtime-owner plus controller
settings/rebinding substrate
2. public/product copy update only after that packaged proof exists

View file

@ -1160,8 +1160,7 @@ Current audit note:
- HyperTwist now owns a real bounded desktop-training OpenXR runtime-owner
seam
- the broader desktop-hosted XR/controller widening branch still remains
closed until polished rebinding/settings ownership and packaged
headset/controller proof exist
closed until packaged headset/controller proof exists on the shipping lane
- this is the right intermediate state to document publicly because it is
stronger than the older negative-only wording and still honest about the
remaining gap
@ -2319,8 +2318,6 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`:
- the shared browser manual plus protected dashboard control/settings roster
now state the explicit reopen gate instead of only broad unfinished-XR
shorthand:
- dedicated runtime owners for real headset/controller execution
- user-facing settings and controller-rebinding ownership
- Windows packaged controller validation with controller truth
- that means the public manual, support FAQ, pricing/download control notes,
and the protected dashboard now mirror the already-landed native structured
@ -2348,6 +2345,38 @@ Latest same-family responsive public-route expansion follow-up on `2026-06-29`:
- current truthful interpretation:
- the browser/manual lane now matches the already-landed native XR boundary
conditions more exactly instead of only repeating the headline `No-Go`
## Current XR controller-settings ownership continuation (`2026-07-01`)
- the next same-family continuation stays inside the bounded native XR lane and
closes the remaining first-party settings/rebinding ownership gap above the
already-landed runtime-owner seam
- current exact-source truth in this continuation is now:
- bounded desktop `OpenXR` runtime owner exists
- first-party user-facing controller settings ownership exists
- first-party controller rebinding ownership exists for the exact shipped XR
input ids
- first-party controller settings/rebinding ownership is now kept separate
from legacy finished packaged-proof flags, so native/operator structured
state says `owned now` without overstating `shipping-lane complete`
- broader native XR/controller widening remains closed until Windows packaged
controller validation with controller truth exists on the shipping lane
- a final same-family exact-source semantics hardening follow-up on
`2026-07-02` then revalidated that truth on maintained Windows root
`C:\HyperTwist_worktrees\phase10validate`:
- editor build:
- `Result: Succeeded`
- UnrealBuildTool `Total execution time: 3104.63 seconds`
- focused XR automation:
- `Saved\AutomationReports\XR-ControllerSettingsOwnership-Semantics-20260702\index.json`
- all `4` `HyperTwist.FirstParty.XR.*` tests succeeded
- focused browser automation:
- `Saved\AutomationReports\Browser-XrControllerSettingsOwnership-Semantics-20260702\index.json`
- all `26` `HyperTwist.Browser.*` tests succeeded
- public/manual wording for the browser shell should therefore now say:
- the downloadable owns the bounded XR runtime and controller settings lane
- the browser shell does not own packaged controller proof
- HyperTwist still must not market broader cross-device XR completion yet
- the public and protected website surfaces remain honest about current
desktop control ownership without overclaiming reopened VR/controller
product status

File diff suppressed because one or more lines are too long

View file

@ -178,9 +178,11 @@ statement forward too without overclaiming launch-tier completion:
- full browser automation `Browser-XrHardening-20260701`: `26/26`
`HyperTwist.Browser.*` green
That is real bounded runtime ownership, but it is still not the same thing as
finished launch-tier controller rebinding, packaged headset proof, or generic
marketed VR completion.
That is real bounded runtime ownership, and the current same-family
controller-settings continuation now also owns first-party user-facing
controller settings, layout presets, and rebinding truth for the exact shipped
XR input ids. But it is still not the same thing as packaged
headset/controller proof or generic marketed VR completion.
Canonical audit note:

View file

@ -226,7 +226,7 @@ Current consolidated milestone snapshot:
training-panel and coach-dashboard ownership for the current viewer
camera-settings tool, immersive-presence settings, dedicated-family
`Magic120Cell` / `MagicCube5D` view-profile ownership, selector ownership,
and explicit unfinished XR/controller rebinding truth; the same primary
and the then-live bounded XR/controller settings gap truth; the same primary
reverse-SSH `localhost:22022` lane rebuilt the maintained validation root
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`,
UnrealBuildTool `Total execution time: 4331.11 seconds`, then exported

View file

@ -428,7 +428,7 @@ describe('protected app pages', () => {
expect(screen.getByText('2. Run a recognition and correction workflow')).toBeTruthy()
expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0)
expect(screen.getByText('XR reopen requirements')).toBeTruthy()
expect(screen.getByText('It would also need user-facing settings and controller-rebinding ownership instead of leaving that lane at inspect-surface truth only.')).toBeTruthy()
expect(screen.getByText('The native simulator now also owns first-party user-facing controller settings, layout presets, and rebinding truth for the exact shipped XR input ids.')).toBeTruthy()
expect(screen.getByText(byExactTextContent('Billing source: session', 'LI'))).toBeTruthy()
expect(await screen.findAllByText(byExactTextContent('Manifest viewer access: active', 'LI'))).toHaveLength(2)
expect(await screen.findByText(byExactTextContent('Windows: Primary shipping lane (Version 1.0.0, Channel candidate)', 'LI'))).toBeTruthy()

View file

@ -737,7 +737,7 @@ describe('public marketing pages', () => {
expect(screen.getByText('Current selectable control roster')).toBeTruthy()
expect(screen.getAllByText('Selectable immersive and family-specific settings').length).toBeGreaterThan(0)
expect(screen.getAllByText('XR reopen requirements').length).toBeGreaterThan(0)
expect(screen.getByText('It would also need Windows packaged controller validation with controller truth, not only editor-time or config-only confidence.')).toBeTruthy()
expect(screen.getByText('The remaining reopen requirement is Windows packaged controller validation with controller truth on the shipping lane rather than only editor-time or config-only confidence.')).toBeTruthy()
expect(screen.getByText('Runtime control guide')).toBeTruthy()
expect(screen.getByText('Native diagnostics check')).toBeTruthy()
expect(screen.getByText('Common capability questions')).toBeTruthy()
@ -929,7 +929,7 @@ describe('public marketing pages', () => {
expect(screen.getByText('What the software actually does after access is granted')).toBeTruthy()
expect(screen.getByText('Higher-dimensional families behind the plans')).toBeTruthy()
expect(screen.getAllByText('Current input and runtime control truth').length).toBeGreaterThan(0)
expect(screen.getByText('The current host decision remains desktop-hosted No-Go on native OpenXR/controller widening; any future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth.')).toBeTruthy()
expect(screen.getByText('The current host decision remains desktop-hosted No-Go on broader native OpenXR/controller widening until Windows packaged controller validation with controller truth is complete.')).toBeTruthy()
expect(screen.getByText('Choose the right HyperTwist surface')).toBeTruthy()
const pricingDecisionGuideHeading = screen.getByRole('heading', { name: 'Choose the next release move' })
const pricingDecisionGuideSection = pricingDecisionGuideHeading.closest('section')
@ -1440,7 +1440,7 @@ describe('public marketing pages', () => {
expect(screen.getAllByText(/classic-wca-keyboard\/v1/i).length).toBeGreaterThan(0)
expect(screen.getByText('4. Open the higher-dimensional lanes and read the control boundary honestly')).toBeTruthy()
expect(screen.getByText(/I\/K = R\/R', J\/F = U\/U', H\/G = F\/F'/i)).toBeTruthy()
expect(screen.getByText(/bounded OpenXR plugin stack and first-party runtime-owner substrate/i)).toBeTruthy()
expect(screen.getByText(/bounded OpenXR plugin stack, first-party runtime-owner substrate, and first-party controller settings\/rebinding ownership/i)).toBeTruthy()
expect(screen.getByText(/R scramble, H hint, Enter submit, F mode, V hold-to-talk, C cycle voice/i)).toBeTruthy()
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()

View file

@ -601,12 +601,12 @@ export const inputAndDevicePostureCards = [
},
{
title: 'XR groundwork exists, but the full VR lane is not finished',
description: 'EnhancedInput posture and motion-controller groundwork exist, but HyperTwist does not yet market a fully finished OpenXR/controller/rebinding runtime lane.',
description: 'EnhancedInput posture, bounded OpenXR runtime ownership, and first-party controller settings/rebinding now exist, but HyperTwist still does not market a fully finished cross-device VR/runtime lane.',
bullets: [
'Project config already carries EnhancedInput plus Vive, Oculus Touch, Mixed Reality, and Valve Index axis groundwork.',
'The current shipping branch now enables the bounded OpenXR plugin stack and first-party runtime-owner substrate, but that still does not collapse the broader native XR/controller lane out of its explicit desktop-hosted No-Go posture.',
'Current product truth should not overclaim headset-specific runtime ownership or polished user-facing input rebinding.',
'The current host decision remains desktop-hosted No-Go on native OpenXR/controller widening; any future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth.',
'The current shipping branch now enables the bounded OpenXR plugin stack, first-party runtime-owner substrate, and first-party controller settings/rebinding ownership, but that still does not collapse the broader native XR/controller lane out of its explicit desktop-hosted No-Go posture.',
'Current product truth should not overclaim packaged controller proof or broader finished cross-device VR completion.',
'The current host decision remains desktop-hosted No-Go on broader native OpenXR/controller widening until Windows packaged controller validation with controller truth is complete.',
],
},
] as const
@ -648,7 +648,8 @@ export const runtimeControlGuideCards = [
bullets: [
'Use keyboard and mouse as the current strong operator-facing control lane.',
'Treat current camera, immersive, and dedicated-family view settings ownership as real, including bounded camera-export continuity and session-local immersive recall, but still bounded.',
'Do not assume a finished headset-specific VR onboarding, controller rebinding, or broad preferences UI has already landed.',
'Do not assume a finished headset-specific VR onboarding, packaged controller proof, or broad cross-device XR rollout has already landed.',
'Treat the current controller settings/rebinding ownership as bounded native runtime truth, not as proof that the broader XR/controller widening gate is already open.',
'Treat any future XR/controller/settings widening as a deliberate reopen above the current desktop-hosted No-Go posture, not as something the public website should overclaim today.',
],
},
@ -683,17 +684,17 @@ export const controlProfileRosterCards = [
'Those same native surfaces now also keep the shipped camera-export artifact and immersive session-recall boundary explicit together with recall-scope and preference-field counts, so bounded local continuity is no longer implied only through summary prose.',
'Those same native surfaces now also prove which family-specific persistence boundary and state-semantics contract currently owns the higher-dimensional settings lane.',
'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 outside the current desktop-hosted No-Go lane unless a later reopen proves the need.',
'First-party controller settings/rebinding now also exist inside the bounded desktop OpenXR lane, while packaged headset/controller proof and broader VR onboarding remain outside the current desktop-hosted No-Go branch.',
],
},
{
title: 'XR reopen requirements',
description: 'The current desktop-hosted No-Go boundary is not vague. HyperTwist already knows what would have to become true before native XR/controller widening could be reopened honestly.',
description: 'The current desktop-hosted No-Go boundary is not vague. HyperTwist already owns the bounded runtime-owner and controller-settings pieces, and it knows the remaining proof required before broader native XR/controller widening could be reopened honestly.',
bullets: [
'A future reopen would need dedicated runtime owners for real headset/controller execution rather than only project-level groundwork or diagnostics.',
'It would also need user-facing settings and controller-rebinding ownership instead of leaving that lane at inspect-surface truth only.',
'It would also need Windows packaged controller validation with controller truth, not only editor-time or config-only confidence.',
'Until those three conditions exist together, keep reading the current shipped lane as keyboard, mouse, camera, immersive, and dedicated-family settings ownership rather than a finished VR/controller product branch.',
'The bounded desktop runtime already owns dedicated runtime owners for live OpenXR/controller execution inside the current training lane.',
'The native simulator now also owns first-party user-facing controller settings, layout presets, and rebinding truth for the exact shipped XR input ids.',
'The remaining reopen requirement is Windows packaged controller validation with controller truth on the shipping lane rather than only editor-time or config-only confidence.',
'Until that packaged proof exists, keep reading the current shipped lane as keyboard, mouse, camera, immersive, dedicated-family settings ownership, and bounded XR ownership rather than a finished cross-device VR/controller product branch.',
],
},
] as const
@ -1029,7 +1030,7 @@ export const browserLimitCards = [
bullets: [
'It does not own package-validated training behavior, replay execution, or the higher-dimensional packaged family maps.',
'It does not own low-latency native input, device/runtime integration, or the dedicated Unreal session and scene surfaces that power the downloadable.',
'It does not own finished OpenXR/controller runtime behavior, user-facing rebinding, or packaged controller validation.',
'It does not own packaged controller validation or the broader finished XR/controller branch; the bounded OpenXR runtime and controller-settings ownership stay native-only.',
],
},
{
@ -1196,7 +1197,7 @@ export const helpCenterCards = [
description: 'The current input story is strong, but it is bounded and should be taught honestly.',
bullets: [
'Keyboard, mouse, touch, camera, immersive settings, selector continuity, and dedicated-family view ownership are already real.',
'The current desktop-hosted OpenXR/controller widening boundary remains explicit No-Go until dedicated runtime owners, rebinding ownership, and Windows packaged controller proof all exist together.',
'The current desktop-hosted OpenXR/controller widening boundary remains explicit No-Go until Windows packaged controller proof exists on the shipping lane; bounded runtime owners plus first-party controller settings/rebinding already exist underneath that gate.',
],
},
{
@ -1420,6 +1421,16 @@ export const publicManualRouteAtlasCards = [
] as const
export const releasePacketCards = [
{
date: 'July 1, 2026',
version: 'Bounded XR controller-settings ownership packet',
category: 'Desktop XR truth and operator diagnostics',
notes: [
'Added first-party controller settings and rebinding ownership above the bounded OpenXR runtime-owner seam, including exact shipped XR input ids, layout presets, and user-visible settings tags.',
'Projected that ownership through native training/operator diagnostics and current public/manual wording so the same desktop XR truth appears across Unreal and the web shell.',
'Kept the broader desktop-hosted XR/controller widening branch explicitly closed until Windows packaged controller validation with controller truth exists on the shipping lane.',
],
},
{
date: 'June 30, 2026',
version: 'Public manual deepening packet',
@ -1800,7 +1811,7 @@ export const browserDesktopDecisionFaqs = [
},
{
question: 'Is VR/controller support already fully finished?',
answer: 'Not yet. HyperTwist already has real classic keyboard and mouse or touch ownership, viewer camera and immersive settings ownership, higher-dimensional selector and view ownership, EnhancedInput posture, and motion-controller groundwork. But the current host decision remains desktop-hosted No-Go on native OpenXR/controller widening. A future reopen would still need dedicated runtime owners, user-facing settings and controller-rebinding ownership, and Windows packaged controller validation with controller truth before the software could honestly claim a finished headset/runtime lane.',
answer: 'Not yet. HyperTwist already has real classic keyboard and mouse or touch ownership, viewer camera and immersive settings ownership, higher-dimensional selector and view ownership, EnhancedInput posture, motion-controller groundwork, a bounded OpenXR runtime owner, and first-party controller settings/rebinding ownership. But the broader host decision remains desktop-hosted No-Go on native OpenXR/controller widening until Windows packaged controller validation with controller truth exists on the shipping lane, so the software still should not market a finished headset/runtime branch.',
},
]
@ -1812,7 +1823,7 @@ export const supportFaqs = [
...browserDesktopDecisionFaqs,
{
question: 'Can I already customize controls and higher-dimensional view posture?',
answer: 'Partly. The current desktop runtime already owns the classic keyboard profile, viewer camera settings, bounded camera-export continuity, immersive-presence settings, session-local immersive recall, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults. The native operator surfaces now also expose which Magic120Cell or MagicCube5D session surface, interactive scene, persistence boundary, and state-semantics contract currently owns that settings lane, and they can recall selector posture from the latest persisted generated-mode launch request. A broader polished controller rebinding and preferences layer remains outside the current desktop-hosted No-Go lane unless a later reopen lands dedicated runtime owners, user-facing settings/rebinding ownership, and Windows packaged controller validation with controller truth.',
answer: 'Partly. The current desktop runtime already owns the classic keyboard profile, viewer camera settings, bounded camera-export continuity, immersive-presence settings, session-local immersive recall, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults. The native operator surfaces now also expose which Magic120Cell or MagicCube5D session surface, interactive scene, persistence boundary, and state-semantics contract currently owns that settings lane, and they can recall selector posture from the latest persisted generated-mode launch request. The bounded XR desktop lane now also owns first-party controller settings, layout presets, and rebinding truth for the exact shipped XR input ids. What remains outside the current desktop-hosted No-Go lane is Windows packaged controller proof and broader launch-tier XR completion.',
},
{
question: 'Do higher-dimensional selector choices persist between sessions?',