Harden selector recall diagnostics and public truth

This commit is contained in:
axiomlogicnexus 2026-06-24 07:09:04 +00:00
parent db5820bb54
commit fe200ef1ee
8 changed files with 341 additions and 15 deletions

View file

@ -21,6 +21,13 @@ namespace HyperTwistTrainingPanelWidgetInternal
TArray<FString> MotionControllerFamilies;
};
struct FSelectorRecallFacts
{
FHyperTwistTrainingImportedGeneratedModeLaunchRequest LaunchRequest;
bool bReady = false;
int32 SelectorCount = 0;
};
FString DescribeBool(const bool bValue)
{
return bValue ? TEXT("yes") : TEXT("no");
@ -141,6 +148,45 @@ namespace HyperTwistTrainingPanelWidgetInternal
return CachedFacts;
}
FSelectorRecallFacts BuildSelectorRecallFacts(
const FHyperTwistTrainingImportedGeneratedModeLaunchRequest& ActiveDeckRequest,
const FHyperTwistTrainingImportedGeneratedModeLaunchRequest& ImportedRequest
)
{
FSelectorRecallFacts Facts;
Facts.LaunchRequest =
ActiveDeckRequest.IsStructurallyValid() ? ActiveDeckRequest : ImportedRequest;
Facts.bReady =
Facts.LaunchRequest.IsStructurallyValid()
&& Facts.LaunchRequest.LaunchConfig.SelectorChoices.Num() > 0;
Facts.SelectorCount =
Facts.bReady ? Facts.LaunchRequest.LaunchConfig.SelectorChoices.Num() : 0;
return Facts;
}
FString BuildSelectorRecallLine(const FSelectorRecallFacts& Facts)
{
if (!Facts.bReady)
{
return TEXT("Repository-backed selector recall: unavailable until a persisted generated-mode launch request with selector choices has been observed.");
}
const FString SurfaceId =
!Facts.LaunchRequest.LaunchConfig.SurfaceId.IsEmpty()
? Facts.LaunchRequest.LaunchConfig.SurfaceId
: TEXT("n/a");
const FString RequestSource =
!Facts.LaunchRequest.RequestSource.IsEmpty()
? Facts.LaunchRequest.RequestSource
: TEXT("n/a");
return FString::Printf(
TEXT("Repository-backed selector recall: ready | surface %s | selectors %d | request source %s."),
*SurfaceId,
Facts.SelectorCount,
*RequestSource
);
}
FString ResolveCoachHandoffStartActionSourceLabel(
const FHyperTwistTrainingCoachPanelState& PanelState,
const EHyperTwistTrainingCoachHandoffKind HandoffKind,
@ -1000,6 +1046,14 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
? ActiveViewContextSurface.Selectors.Num()
: 0;
const HyperTwistTrainingPanelWidgetInternal::FSelectorRecallFacts SelectorRecallFacts =
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallFacts(
CachedLatestGeneratedModeLaunchRequestForActiveDeck,
CachedImportedGeneratedModeLaunchRequest
);
Surface.bRepositoryBackedSelectorRecallReady = SelectorRecallFacts.bReady;
Surface.RecalledHigherDimensionalSelectorCount = SelectorRecallFacts.SelectorCount;
Surface.bHigherDimensionalSelectorSettingsReady =
Surface.bMagic120CellViewSettingsReady
&& Surface.bMagicCube5DViewSettingsReady
@ -1058,23 +1112,29 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlSettingsOwnershipInspectSurfa
*ActiveViewContextId,
Surface.ActiveHigherDimensionalSelectorCount
);
Surface.SelectorRecallLine =
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallLine(
SelectorRecallFacts
);
Surface.XrGapLine =
TEXT("XR/controller completion: explicit host decision, dedicated runtime owners, and polished settings/rebinding are not yet shipped.");
Surface.StatusLine = FString::Printf(
TEXT("camera %s | immersive %s | 120-cell %s | 5D %s | selectors %s | XR rebinding not yet shipped"),
TEXT("camera %s | immersive %s | 120-cell %s | 5D %s | selectors %s | selector recall %s | XR rebinding not yet shipped"),
Surface.bCameraSettingsReady ? TEXT("ready") : TEXT("missing"),
Surface.bImmersivePresenceSettingsReady ? TEXT("ready") : TEXT("missing"),
Surface.bMagic120CellViewSettingsReady ? TEXT("ready") : TEXT("missing"),
Surface.bMagicCube5DViewSettingsReady ? TEXT("ready") : TEXT("missing"),
Surface.bHigherDimensionalSelectorSettingsReady ? TEXT("ready") : TEXT("partial")
Surface.bHigherDimensionalSelectorSettingsReady ? TEXT("ready") : TEXT("partial"),
Surface.bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable")
);
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s | %s | %s | %s"),
TEXT("%s | %s | %s | %s | %s | %s | %s"),
*Surface.CameraSettingsLine,
*Surface.ImmersiveSettingsLine,
*Surface.Magic120CellSettingsLine,
*Surface.MagicCube5DSettingsLine,
*Surface.SelectorSettingsLine,
*Surface.SelectorRecallLine,
*Surface.XrGapLine
);
@ -1195,6 +1255,14 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
? ActiveViewContextSurface.Selectors.Num()
: 0;
const HyperTwistTrainingPanelWidgetInternal::FSelectorRecallFacts SelectorRecallFacts =
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallFacts(
CachedLatestGeneratedModeLaunchRequestForActiveDeck,
CachedImportedGeneratedModeLaunchRequest
);
Surface.bRepositoryBackedSelectorRecallReady = SelectorRecallFacts.bReady;
Surface.RecalledHigherDimensionalSelectorCount = SelectorRecallFacts.SelectorCount;
Surface.bFinishedControllerRebindingReady = false;
const FString ClassicKeyboardProfileName =
@ -1283,23 +1351,29 @@ UHyperTwistTrainingPanelWidget::GetDisplayedControlProfileRosterInspectSurface()
Surface.ActiveHigherDimensionalSelectorCount
)
: TEXT("Active higher-dimensional selection: none currently displayed in this widget.");
Surface.SelectorRecallLine =
HyperTwistTrainingPanelWidgetInternal::BuildSelectorRecallLine(
SelectorRecallFacts
);
Surface.PreferencesGapLine =
TEXT("Controller rebinding: not yet shipped; the current native roster ends at keyboard, scenic presence presets, and dedicated family selector/view profiles.");
Surface.StatusLine = FString::Printf(
TEXT("classic keyboard %s | immersive presets %s | 120-cell family %s | 5D family %s | active selection %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 | controller rebinding not yet shipped"),
Surface.bClassicKeyboardProfileReady ? TEXT("ready") : TEXT("missing"),
Surface.bImmersivePresenceProfileReady ? TEXT("ready") : TEXT("missing"),
Surface.bMagic120CellProfileReady ? TEXT("ready") : TEXT("missing"),
Surface.bMagicCube5DProfileReady ? TEXT("ready") : TEXT("missing"),
Surface.bActiveHigherDimensionalProfileVisible ? TEXT("visible") : TEXT("not loaded")
Surface.bActiveHigherDimensionalProfileVisible ? TEXT("visible") : TEXT("not loaded"),
Surface.bRepositoryBackedSelectorRecallReady ? TEXT("ready") : TEXT("unavailable")
);
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s | %s | %s | %s"),
TEXT("%s | %s | %s | %s | %s | %s | %s"),
*Surface.ClassicKeyboardProfileLine,
*Surface.ImmersivePresenceProfileLine,
*Surface.Magic120CellProfileLine,
*Surface.MagicCube5DProfileLine,
*Surface.ActiveHigherDimensionalProfileLine,
*Surface.SelectorRecallLine,
*Surface.PreferencesGapLine
);

View file

@ -10098,6 +10098,9 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorSettingsLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorRecallLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString XrGapLine;
@ -10122,6 +10125,9 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 ActiveHigherDimensionalSelectorCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 RecalledHigherDimensionalSelectorCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bCameraSettingsReady = false;
@ -10140,6 +10146,9 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bActiveHigherDimensionalSettingsVisible = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bRepositoryBackedSelectorRecallReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bFinishedControllerRebindingReady = false;
@ -10152,11 +10161,13 @@ struct FHyperTwistTrainingControlSettingsOwnershipInspectSurface
|| !Magic120CellSettingsLine.IsEmpty()
|| !MagicCube5DSettingsLine.IsEmpty()
|| !SelectorSettingsLine.IsEmpty()
|| !SelectorRecallLine.IsEmpty()
|| bCameraSettingsReady
|| bImmersivePresenceSettingsReady
|| bMagic120CellViewSettingsReady
|| bMagicCube5DViewSettingsReady
|| bHigherDimensionalSelectorSettingsReady;
|| bHigherDimensionalSelectorSettingsReady
|| bRepositoryBackedSelectorRecallReady;
}
};
@ -10192,6 +10203,9 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ActiveHigherDimensionalProfileLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorRecallLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PreferencesGapLine;
@ -10240,6 +10254,9 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 ActiveHigherDimensionalSelectorCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 RecalledHigherDimensionalSelectorCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bClassicKeyboardProfileReady = false;
@ -10255,6 +10272,9 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bActiveHigherDimensionalProfileVisible = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bRepositoryBackedSelectorRecallReady = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bFinishedControllerRebindingReady = false;
@ -10266,10 +10286,14 @@ struct FHyperTwistTrainingControlProfileRosterInspectSurface
|| !ImmersivePresenceProfileLine.IsEmpty()
|| !Magic120CellProfileLine.IsEmpty()
|| !MagicCube5DProfileLine.IsEmpty()
|| !ActiveHigherDimensionalProfileLine.IsEmpty()
|| !SelectorRecallLine.IsEmpty()
|| bClassicKeyboardProfileReady
|| bImmersivePresenceProfileReady
|| bMagic120CellProfileReady
|| bMagicCube5DProfileReady;
|| bMagicCube5DProfileReady
|| bActiveHigherDimensionalProfileVisible
|| bRepositoryBackedSelectorRecallReady;
}
};

View file

@ -108,6 +108,60 @@ namespace HyperTwistBrowserBridgeObjectTestInternal
)
);
}
FHyperTwistTrainingImportedGeneratedModeLaunchRequest MakeSampleGeneratedModeLaunchRequest(
const FString& RequestSource = TEXT("phase6c-higher-dimensional-launch-surface"),
const FString& SurfaceId = TEXT("phase6c/magic120cell/generated-mode-surface")
)
{
FHyperTwistTrainingImportedGeneratedModeLaunchRequest Request;
Request.RequestId = TEXT("generated-launch-request-001");
Request.RequestedAtUtc = TEXT("2026-06-24T13:55:00Z");
Request.RequestSource = RequestSource;
Request.LaunchConfig.DeckId = TEXT("runtime/magic120cell-generated");
Request.LaunchConfig.UserId = TEXT("local-user");
Request.LaunchConfig.TrainingSessionId = TEXT("phase6c_launch_sample");
Request.LaunchConfig.DeliveryMode = EHyperTwistTrainingDeliveryMode::VirtualCube;
Request.LaunchConfig.PuzzleId = TEXT("polychoron/magic120cell");
Request.LaunchConfig.SurfaceId = SurfaceId;
Request.LaunchConfig.SurfaceLabel = TEXT("Magic120Cell generated-mode surface");
Request.LaunchConfig.RuntimeModeId = TEXT("magic120cell-full-color-runtime-v1");
Request.LaunchConfig.GeneratorType = TEXT("generated-mode");
FHyperTwistTrainingImportedRuntimeSelectorChoice ProjectionChoice;
ProjectionChoice.SelectorId = TEXT("projection");
ProjectionChoice.SelectorBinding = TEXT("projection");
ProjectionChoice.SelectedValue = TEXT("4d-projection-distance");
ProjectionChoice.DisplayValue = TEXT("4D Projection Distance");
FHyperTwistTrainingImportedRuntimeSelectorChoice SymmetryChoice;
SymmetryChoice.SelectorId = TEXT("symmetry");
SymmetryChoice.SelectorBinding = TEXT("symmetry");
SymmetryChoice.SelectedValue = TEXT("full-puzzle-default-mode");
SymmetryChoice.DisplayValue = TEXT("Full Puzzle Default");
FHyperTwistTrainingImportedRuntimeSelectorChoice VisibilityChoice;
VisibilityChoice.SelectorId = TEXT("visibility");
VisibilityChoice.SelectorBinding = TEXT("visibility");
VisibilityChoice.SelectedValue = TEXT("logical-visibility-depth-ladder");
VisibilityChoice.DisplayValue = TEXT("Logical Visibility Ladder");
FHyperTwistTrainingImportedRuntimeSelectorChoice FocusChoice;
FocusChoice.SelectorId = TEXT("focus");
FocusChoice.SelectorBinding = TEXT("focus");
FocusChoice.SelectedValue = TEXT("center-cell-recentering");
FocusChoice.DisplayValue = TEXT("Center Cell Recentering");
Request.LaunchConfig.SelectorChoices =
{
ProjectionChoice,
SymmetryChoice,
VisibilityChoice,
FocusChoice
};
return Request;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
@ -1173,6 +1227,50 @@ bool FHyperTwistTrainingPanelControlSettingsOwnershipInspectSurfaceTest::RunTest
TEXT("The control settings ownership surface must retain the camera settings tool reference in its detail line."),
Surface.DetailLine.Contains(TEXT("tool/camera-settings"))
);
TestFalse(
TEXT("The control settings ownership surface must not fabricate repository-backed selector recall before a launch request has been observed."),
Surface.bRepositoryBackedSelectorRecallReady
);
TestTrue(
TEXT("The control settings ownership surface must explain when repository-backed selector recall is unavailable."),
Surface.SelectorRecallLine.Contains(TEXT("unavailable"))
);
TrainingPanel->CachedImportedGeneratedModeLaunchRequest =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest(
TEXT("runtime-imported-generated-mode"),
TEXT("phase6c/imported-generated-mode-surface")
);
const FHyperTwistTrainingControlSettingsOwnershipInspectSurface ImportedRecallSurface =
TrainingPanel->GetDisplayedControlSettingsOwnershipInspectSurface();
TestTrue(
TEXT("The control settings ownership surface must surface selector recall from the imported stored launch request when the active-deck cache is empty."),
ImportedRecallSurface.bRepositoryBackedSelectorRecallReady
&& ImportedRecallSurface.SelectorRecallLine.Contains(TEXT("runtime-imported-generated-mode"))
&& ImportedRecallSurface.SelectorRecallLine.Contains(TEXT("phase6c/imported-generated-mode-surface"))
);
TrainingPanel->CachedLatestGeneratedModeLaunchRequestForActiveDeck =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest();
const FHyperTwistTrainingControlSettingsOwnershipInspectSurface RecalledSurface =
TrainingPanel->GetDisplayedControlSettingsOwnershipInspectSurface();
TestTrue(
TEXT("The control settings ownership surface must surface repository-backed selector recall once a persisted launch request is present."),
RecalledSurface.bRepositoryBackedSelectorRecallReady
);
TestEqual(
TEXT("The control settings ownership surface must preserve the recalled selector count."),
RecalledSurface.RecalledHigherDimensionalSelectorCount,
4
);
TestTrue(
TEXT("The control settings ownership surface must surface the generated-mode surface id in the selector recall line."),
RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c/magic120cell/generated-mode-surface"))
);
TestFalse(
TEXT("The control settings ownership surface must prefer the active-deck launch request over the imported fallback once both exist."),
RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c/imported-generated-mode-surface"))
);
return true;
}
@ -1214,6 +1312,16 @@ bool FHyperTwistCoachDashboardControlSettingsOwnershipInspectSurfaceTest::RunTes
Surface.DetailLine.Contains(TEXT("magic120cell-focus-view-profile"))
&& Surface.DetailLine.Contains(TEXT("magiccube5d-projection-view-profile"))
);
CoachDashboard->CachedLatestGeneratedModeLaunchRequestForActiveDeck =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest();
const FHyperTwistTrainingControlSettingsOwnershipInspectSurface RecalledSurface =
CoachDashboard->GetDisplayedControlSettingsOwnershipInspectSurface();
TestTrue(
TEXT("The coach dashboard control settings ownership surface must reflect repository-backed selector recall from the latest persisted launch request."),
RecalledSurface.bRepositoryBackedSelectorRecallReady
&& RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c-higher-dimensional-launch-surface"))
);
return true;
}
@ -1282,6 +1390,50 @@ bool FHyperTwistTrainingPanelControlProfileRosterInspectSurfaceTest::RunTest(
TEXT("The control/profile roster surface must say plainly that controller rebinding is not yet shipped."),
Surface.DetailLine.Contains(TEXT("not yet shipped"))
);
TestFalse(
TEXT("The control/profile roster surface must not fabricate repository-backed selector recall before a launch request has been observed."),
Surface.bRepositoryBackedSelectorRecallReady
);
TestTrue(
TEXT("The control/profile roster surface must explain when repository-backed selector recall is unavailable."),
Surface.SelectorRecallLine.Contains(TEXT("unavailable"))
);
TrainingPanel->CachedImportedGeneratedModeLaunchRequest =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest(
TEXT("runtime-imported-generated-mode"),
TEXT("phase6c/imported-generated-mode-surface")
);
const FHyperTwistTrainingControlProfileRosterInspectSurface ImportedRecallSurface =
TrainingPanel->GetDisplayedControlProfileRosterInspectSurface();
TestTrue(
TEXT("The control/profile roster surface must surface selector recall from the imported stored launch request when the active-deck cache is empty."),
ImportedRecallSurface.bRepositoryBackedSelectorRecallReady
&& ImportedRecallSurface.SelectorRecallLine.Contains(TEXT("runtime-imported-generated-mode"))
&& ImportedRecallSurface.SelectorRecallLine.Contains(TEXT("phase6c/imported-generated-mode-surface"))
);
TrainingPanel->CachedLatestGeneratedModeLaunchRequestForActiveDeck =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest();
const FHyperTwistTrainingControlProfileRosterInspectSurface RecalledSurface =
TrainingPanel->GetDisplayedControlProfileRosterInspectSurface();
TestTrue(
TEXT("The control/profile roster surface must surface repository-backed selector recall once a persisted launch request is present."),
RecalledSurface.bRepositoryBackedSelectorRecallReady
);
TestEqual(
TEXT("The control/profile roster surface must preserve the recalled selector count."),
RecalledSurface.RecalledHigherDimensionalSelectorCount,
4
);
TestTrue(
TEXT("The control/profile roster surface must keep the generated-mode surface id visible in the selector recall line."),
RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c/magic120cell/generated-mode-surface"))
);
TestFalse(
TEXT("The control/profile roster surface must prefer the active-deck launch request over the imported fallback once both exist."),
RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c/imported-generated-mode-surface"))
);
return true;
}
@ -1325,6 +1477,16 @@ bool FHyperTwistCoachDashboardControlProfileRosterInspectSurfaceTest::RunTest(
TEXT("The coach dashboard control/profile roster surface must retain the classic keyboard profile fact in its detail line."),
Surface.DetailLine.Contains(TEXT("classic-wca-keyboard/v1"))
);
CoachDashboard->CachedLatestGeneratedModeLaunchRequestForActiveDeck =
HyperTwistBrowserBridgeObjectTestInternal::MakeSampleGeneratedModeLaunchRequest();
const FHyperTwistTrainingControlProfileRosterInspectSurface RecalledSurface =
CoachDashboard->GetDisplayedControlProfileRosterInspectSurface();
TestTrue(
TEXT("The coach dashboard control/profile roster surface must reflect repository-backed selector recall from the latest persisted launch request."),
RecalledSurface.bRepositoryBackedSelectorRecallReady
&& RecalledSurface.SelectorRecallLine.Contains(TEXT("phase6c-higher-dimensional-launch-surface"))
);
return true;
}

View file

@ -177,8 +177,9 @@ Use these as the current governing docs:
`UHyperTwistCoachDashboardWidget`, so the operator can see the current viewer
camera-settings owner, immersive-presence settings, dedicated-family
`Magic120Cell` / `MagicCube5D` view-profile ownership, selector ownership,
and explicit unfinished XR/controller rebinding truth without opening the
browser shell
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
- 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
@ -190,13 +191,23 @@ Use these as the current governing docs:
`TrainingPanel.ControlSettingsOwnershipInspectSurface`,
`CoachDashboard.ControlInputReadinessInspectSurface`, and
`TrainingPanel.ControlInputReadinessInspectSurface`
- Validation evidence on `2026-06-24`: the later same-day selector-recall
hardening follow-up then re-synced the refined training-panel, type, and
browser-test files into that same maintained isolated worktree, rebuilt with
`Result: Succeeded` and UnrealBuildTool `Total execution time: 4084.77
seconds`, then `Automation RunTests HyperTwist.Browser` exported
`Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with `20`
`HyperTwist.Browser.*` tests succeeded and `0` failed, including the current
control/input, control/settings, and control/profile inspect-surface seams
- that same shipping/browser posture now also carries a native selectable
control/profile roster inspect surface through
`UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget`, so
the operator can see the shipped classic keyboard profile and binding count,
scenic immersive preset roster, dedicated-family `Magic120Cell` /
`MagicCube5D` runtime/view profile ids plus selector counts, and explicit
unfinished controller rebinding truth without opening the browser shell
`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
- 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
@ -209,6 +220,16 @@ Use these as the current governing docs:
`TrainingPanel.ControlProfileRosterInspectSurface`,
`CoachDashboard.ControlSettingsOwnershipInspectSurface`,
and `TrainingPanel.ControlSettingsOwnershipInspectSurface`
- Validation evidence on `2026-06-24`: the later same-day selector-recall
hardening follow-up then re-synced the refined training-panel, type, and
browser-test files into that same maintained isolated worktree, rebuilt with
`Result: Succeeded` and UnrealBuildTool `Total execution time: 4084.77
seconds`, then `Automation RunTests HyperTwist.Browser` exported
`Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with `20`
`HyperTwist.Browser.*` tests succeeded and `0` failed again, now explicitly
covering imported-request fallback plus active-deck precedence for
repository-backed selector recall in the training-panel and coach-dashboard
control/profile and control/settings inspect surfaces
- the same optional full-browser-client branch is now also tightened by a backend-contract matrix packet that fixes transport-neutral operation labels, minimum session or host or bridge identity facts, request or result correlation posture, freshness or reconnect rules, and the owned state/runtime payload anchors a later browser-client implementation must preserve
- `MagicTile` `Phase 7C` is now landed separately through the bundled tiling native-behavior
proof contract/probe seam, runtime-library proof helpers, and focused Windows validation on

View file

@ -19,6 +19,8 @@ HyperTwist currently has real native input ownership for:
- classic-cube mouse or touch or keyboard-adjacent play flows
- higher-dimensional keyboard interaction in the bounded visible-slice lane
- current camera or immersive or dedicated-family view-settings ownership
- native recall of persisted generated-mode higher-dimensional selector posture
through operator/training inspect surfaces
- `EnhancedInput`-based project posture
- broad motion-controller axis configuration at the Unreal project-settings
level
@ -106,6 +108,8 @@ truthfully claim:
- `MagicCube5D` view ownership through
`magiccube5d-projection-view-profile`
- 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
- Windows validation on `2026-06-24` rebuilt the maintained validation root
`C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded`,
@ -116,6 +120,14 @@ truthfully claim:
- `TrainingPanel.ControlSettingsOwnershipInspectSurface`
- `CoachDashboard.ControlInputReadinessInspectSurface`
- `TrainingPanel.ControlInputReadinessInspectSurface`
- a later same-day selector-recall hardening follow-up then hash-synced the
refined training-panel, type, and browser-test files into that same
maintained validation root, rebuilt cleanly again with `Result: Succeeded`,
UnrealBuildTool `Total execution time: 4084.77 seconds`, and re-exported
focused browser proof to
`Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all
`20` `HyperTwist.Browser.*` tests green, including the current control/input,
control/settings, and control/profile inspect-surface seams
### Native selectable control/profile roster is now real
@ -139,6 +151,8 @@ truthfully claim:
`magiccube5d-runtime-profile` and
`magiccube5d-projection-view-profile`
- 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
- Windows validation on `2026-06-24` hash-synced the touched training, coach,
type, and browser-test files into maintained validation root
@ -153,6 +167,16 @@ truthfully claim:
- `TrainingPanel.ControlSettingsOwnershipInspectSurface`
- `CoachDashboard.ControlInputReadinessInspectSurface`
- `TrainingPanel.ControlInputReadinessInspectSurface`
- the later same-day selector-recall hardening follow-up then re-synced the
refined training-panel, type, and browser-test files into that same
maintained validation root, rebuilt cleanly again with `Result: Succeeded`,
UnrealBuildTool `Total execution time: 4084.77 seconds`, and re-exported
focused browser proof to
`Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all
`20` `HyperTwist.Browser.*` tests green again, now explicitly covering the
imported-request fallback and active-deck precedence path for repository-
backed selector recall inside both the training-panel and coach-dashboard
control/profile and control/settings surfaces
### Finished XR runtime ownership is not yet proven
@ -178,6 +202,9 @@ Current truthful product wording should say:
- desktop Unreal simulator: real and shipping
- classic input and higher-dimensional keyboard interaction: real and shipping
- native operator/training diagnostics already surface current input truth
- native operator/training diagnostics also surface persisted
higher-dimensional selector recall when a valid generated-mode launch request
exists
- the currently shipped selectable native roster is visible inside Unreal:
classic keyboard, scenic immersive presets, and dedicated 120-cell/5D view
selectors
@ -197,6 +224,9 @@ manual:
- 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
- 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

View file

@ -146,8 +146,8 @@ Do not collapse those three tiers into one undifferentiated "features" voice.
| Rewritten training analytics and report reference grounding | Implemented now | `apache/echarts` retained permissive lane + first-party current code | Current live `Training Analytics` reference side includes four rewritten first-party targets grounded in retained `apache/echarts`: session outcome and progress reporting, analytics data-view and export, timing-trend history and overview interaction, and the optional richer explainer or sidecar boundary. This does not displace the landed `Phase 3R-C` first-party analytics/reporting owner or elevate `ecomfe/echarts-gl` and `ecomfe/zrender` beyond support-only sidecars. |
| Browser/spatial/media adjunct surfaces | Implemented now | landed `three.js`, `react-three-fiber`, `xr`, `model-viewer`, `remotion` packets | These are implemented bounded families, and the current Phase 1 browser-runtime landing now includes a first-party authoritative `Content/Browser/index.html` shell, bundled-runtime upgrade path, committed clean-checkout plain-JS fallback runtime, embedded `UHyperTwistBrowserWidget` bridge, the `2026-06-19` runtime-ready queue hardening that retains outbound Unreal shell traffic until the browser runtime is ready, a same-day first-party `Browser Runtime Status` surface with shared boot-state ownership across bundled and fallback shells, a follow-on typed Unreal-side `browser-runtime-status` capture seam that retains the last valid runtime snapshot across unrelated later envelope traffic until explicit reset, a second follow-on typed Unreal-side `hypertwist-runtime-ready` capture seam that raises the original handshake payload out of raw JSON-only handling without changing queue flush behavior, a third same-day native/operator-facing status surface that consumes those typed seams inside Unreal while clearing retained runtime ownership on shell-authority change, a fourth same-day native training/operator diagnostics-panel continuation that wires that typed status ownership into `UHyperTwistTrainingPanelWidget` and the coach dashboard without making the dashboard inspect seam depend on stale rendered strings, a fifth same-day diagnostics-fidelity continuation that now carries bootstrap/runtime-ready timestamps, last command/shell-state receipt timestamps, and fallback reason through the same native operator/training seams, and a later `2026-06-23` control/input readiness continuation that projects shipped keyboard/input truth and unfinished XR/preferences truth through the same native training/operator surfaces. This still is not proof of unlimited browser-shell parity. |
| Native control/input readiness inspect surface | Implemented now | landed first-party `2026-06-23` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlInputReadinessInspectSurface`, including the shipped `classic-wca-keyboard/v1` mapping, classic-cube mouse/touch/shortcut readiness, higher-dimensional dedicated-family runtime-catalog truth, project-level `EnhancedInput` plus motion-controller groundwork facts, immersive-presence contract presence, and explicit unfinished XR/runtime plus preferences truth. The recovered primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-23` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 1563.53 seconds`, and exported `Saved\AutomationReports\Browser-ControlInputReadiness-Verify\index.json` with all `16` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlInputReadinessInspectSurface` and `TrainingPanel.ControlInputReadinessInspectSurface`. A later same-day quality follow-up then moved the project-input-groundwork inspection behind that surface from raw text scanning into structured Unreal config reads, rebuilt the same maintained validation worktree again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 158.13 seconds`, and re-exported focused browser proof to `Saved\AutomationReports\Browser-ControlInputReadiness-StructuredConfig-Verify` with all `16` `HyperTwist.Browser.*` tests green again. |
| Native control/settings ownership inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlSettingsOwnershipInspectSurface`, including the shipped viewer camera-settings owner `tool/camera-settings`, the immersive-presence control contract, dedicated-family `magic120cell-focus-view-profile` and `magiccube5d-projection-view-profile` view ownership, higher-dimensional selector ownership, and explicit unfinished XR/controller rebinding truth. The same primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4331.11 seconds`, and then exported `Saved\AutomationReports\Browser-ControlSettingsOwnership-Verify\index.json` with all `18` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlSettingsOwnershipInspectSurface`, `TrainingPanel.ControlSettingsOwnershipInspectSurface`, and the previously landed runtime plus control/input inspect seams. |
| Native control/profile roster inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlProfileRosterInspectSurface`, keeping the actually shipped selectable native roster visible: classic keyboard profile `classic-wca-keyboard/v1` with `18` bindings, immersive-presence contract `immersive-training-presence-control-contract` with `3` intensity plus `3` reduced-distraction presets, dedicated-family `Magic120Cell` runtime/view ids `magic120cell-runtime-profile` and `magic120cell-focus-view-profile`, dedicated-family `MagicCube5D` runtime/view ids `magiccube5d-runtime-profile` and `magiccube5d-projection-view-profile`, the current `4` selectors in each dedicated-family roster, and explicit unfinished controller rebinding truth. After hash-syncing the touched type/training/dashboard/test files into maintained validation worktree `C:\HyperTwist_worktrees\phase10validate`, the same primary reverse-SSH `localhost:22022` lane rebuilt the widened slice on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3606.23 seconds`, then exported `Saved\AutomationReports\Browser-ControlProfileRoster-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlProfileRosterInspectSurface` and `TrainingPanel.ControlProfileRosterInspectSurface`. |
| Native control/settings ownership inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlSettingsOwnershipInspectSurface`, including the shipped viewer camera-settings owner `tool/camera-settings`, the immersive-presence control contract, dedicated-family `magic120cell-focus-view-profile` and `magiccube5d-projection-view-profile` view ownership, higher-dimensional selector ownership, persisted generated-mode selector recall when a structurally valid launch request is present, and explicit unfinished XR/controller rebinding truth. The same primary reverse-SSH `localhost:22022` lane rebuilt maintained validation worktree `C:\HyperTwist_worktrees\phase10validate` on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4331.11 seconds`, and then exported `Saved\AutomationReports\Browser-ControlSettingsOwnership-Verify\index.json` with all `18` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlSettingsOwnershipInspectSurface`, `TrainingPanel.ControlSettingsOwnershipInspectSurface`, and the previously landed runtime plus control/input inspect seams. A later same-day selector-recall hardening follow-up then rebuilt that same maintained validation root again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4084.77 seconds`, and exported `Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, keeping the current control/settings proof aligned with the latest repository-backed selector-recall behavior. |
| Native control/profile roster inspect surface | Implemented now | landed first-party `2026-06-24` browser/native operator continuation | `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget` now expose `FHyperTwistTrainingControlProfileRosterInspectSurface`, keeping the actually shipped selectable native roster visible: classic keyboard profile `classic-wca-keyboard/v1` with `18` bindings, immersive-presence contract `immersive-training-presence-control-contract` with `3` intensity plus `3` reduced-distraction presets, dedicated-family `Magic120Cell` runtime/view ids `magic120cell-runtime-profile` and `magic120cell-focus-view-profile`, dedicated-family `MagicCube5D` runtime/view ids `magiccube5d-runtime-profile` and `magiccube5d-projection-view-profile`, the current `4` selectors in each dedicated-family roster, persisted generated-mode selector recall when a structurally valid launch request is present, and explicit unfinished controller rebinding truth. After hash-syncing the touched type/training/dashboard/test files into maintained validation worktree `C:\HyperTwist_worktrees\phase10validate`, the same primary reverse-SSH `localhost:22022` lane rebuilt the widened slice on `2026-06-24` with `Result: Succeeded`, UnrealBuildTool `Total execution time: 3606.23 seconds`, then exported `Saved\AutomationReports\Browser-ControlProfileRoster-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing, including `CoachDashboard.ControlProfileRosterInspectSurface` and `TrainingPanel.ControlProfileRosterInspectSurface`. A later same-day selector-recall hardening follow-up then rebuilt that same maintained validation root again with `Result: Succeeded`, UnrealBuildTool `Total execution time: 4084.77 seconds`, and exported `Saved\AutomationReports\Browser-SelectorRecall-Verify\index.json` with all `20` `HyperTwist.Browser.*` tests passing again, now explicitly covering imported-request fallback plus active-deck precedence for repository-backed selector recall inside the training-panel and coach-dashboard roster surface. |
| Optional full-browser client path above Unreal backend authority | Deep-source grounded retained | landed first-party `Phase 8B` preparation packet + spec/evidence continuation + backend-contract continuation | This branch remains a spec-only first-party option: a browser-owned rendering and input shell may sit above explicit Unreal backend seams while Unreal remains authoritative for puzzle, training, timer, replay, and persistence state. The current continuation now fixes the allowed seam families to catalog, session, action, state, continuity push, replay, persistence status, and runtime health, then further fixes transport-neutral operation labels, minimum identity or freshness requirements, and the owned state/runtime payload anchors that any later browser-client backend implementation must preserve. The landed embedded browser/CEF shell remains the current shipping posture, and this branch stays separate from any native `MagicTile` behavior or renderer widening. |
| Rewritten browser spatial scene and renderer reference grounding | Implemented now | `mrdoob/three.js` retained permissive lane + first-party current code | Current live `Browser 3D and XR Support` reference side includes one rewritten first-party target grounded in retained `mrdoob/three.js`: the browser spatial scene and renderer contract. This does not displace the landed `Phase 3R-F` first-party browser spatial owner trio or absorb the adjacent `react-three-fiber` renderer-bridge and `xr` session slices. |
| Rewritten React-side browser renderer and event-bridge grounding | Implemented now | `pmndrs/react-three-fiber` retained permissive lane + first-party current code | Current live `Browser 3D and XR Support` reference side includes one rewritten first-party target grounded in retained `react-three-fiber`: the React scene renderer and event bridge. This does not displace the landed `Phase 3R-F` first-party browser spatial owner trio or absorb the adjacent `three.js` scene substrate and `xr` session slices. |

View file

@ -677,6 +677,7 @@ describe('public marketing pages', () => {
expect(screen.getByText(/turning the preview lane into a public launch/i)).toBeTruthy()
expect(screen.getByText('If the desktop app is primary, why keep the web version?')).toBeTruthy()
expect(screen.getByText('Is VR/controller support already fully finished?')).toBeTruthy()
expect(screen.getByText('Do higher-dimensional selector choices persist between sessions?')).toBeTruthy()
expect(screen.getByText('Support lanes')).toBeTruthy()
expect(screen.getByText('Escalation map')).toBeTruthy()
expect(screen.getByText('Runtime and training issues')).toBeTruthy()
@ -862,6 +863,7 @@ describe('public marketing pages', () => {
expect(screen.getByText('Deployment readiness manual')).toBeTruthy()
expect(screen.getByText('Input and device posture')).toBeTruthy()
expect(screen.getAllByText('Keyboard and mouse ship today').length).toBeGreaterThan(0)
expect(screen.getAllByText(/latest persisted generated-mode selector posture is available for recall/i).length).toBeGreaterThan(0)
expect(screen.getByText('Feature-registry-backed wording only')).toBeTruthy()
expect(await screen.findByRole('link', { name: /open public docs portal/i })).toBeTruthy()
})

View file

@ -336,6 +336,7 @@ export const higherDimensionalRuntimeGuideCards = [
bullets: [
'Launch the dedicated Magic120Cell training map from the desktop runtime.',
'Use the current symmetry, focus, and logical-visibility posture as the authoritative first-party runtime owner.',
'The native operator/training surfaces can now also recall the latest persisted generated-mode selector posture for this family instead of hiding it behind the browser shell.',
'Treat the public website as documentation and rollout support, not as the runtime that executes this family.',
],
},
@ -345,6 +346,7 @@ export const higherDimensionalRuntimeGuideCards = [
bullets: [
'Launch the dedicated MagicCube5D training map from the desktop runtime.',
'Use the current projection-distance, stereo, and visibility defaults as the bounded first-party runtime posture.',
'The native operator/training surfaces can now also recall the latest persisted generated-mode selector posture for this family instead of forcing a blind restart.',
'Keep this lane described honestly as packaged native behavior rather than browser simulator parity.',
],
},
@ -376,6 +378,7 @@ export const inputAndDevicePostureCards = [
'Magic120Cell keeps symmetry, logical-visibility depth, and center-cell focus posture explicit.',
'MagicCube5D keeps projection-distance, stereo, face-visibility, and focus posture explicit.',
'The desktop operator/training lane now also surfaces these dedicated-family view owners together with current camera-settings ownership.',
'The same native surfaces now expose selector recall from the latest persisted generated-mode launch request when that launch history exists.',
'These controls belong to the dedicated-family desktop runtime lanes, not to the public website.',
],
},
@ -406,6 +409,7 @@ export const runtimeControlGuideCards = [
bullets: [
'Launch the dedicated-family desktop maps instead of expecting the public website to host the serious runtime lane.',
'Use the current keyboard-driven slice, layer, or rotation interaction together with the family-owned projection and focus defaults.',
'Use the native operator/training inspect surfaces to confirm when the latest persisted generated-mode selector posture is available for recall.',
'Treat symmetry, stereo, visibility, and focus posture as current packaged runtime ownership rather than as a fully generalized preferences suite.',
],
},
@ -681,6 +685,11 @@ export const resourceCollections = [
] as const
export const changelogEntries = [
{
date: 'June 24, 2026',
title: 'Native selector-recall diagnostics hardened and revalidated',
details: 'The Windows Unreal validation lane rebuilt the maintained phase10validate worktree on the refined selector-recall packet, then Browser-SelectorRecall-Verify re-exported all 20 HyperTwist.Browser tests green while the public docs and support surfaces were updated to describe bounded generated-mode selector persistence truthfully.',
},
{
date: 'June 23, 2026',
title: 'Higher-dimensional package lane refreshed and public launch manual widened',
@ -748,7 +757,11 @@ export const supportFaqs = [
},
{
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, immersive-presence settings, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults, but a broader polished controller rebinding and preferences layer is still a later native packet.',
answer: 'Partly. The current desktop runtime already owns the classic keyboard profile, viewer camera settings, immersive-presence settings, and higher-dimensional projection, focus, stereo, symmetry, and visibility defaults, and the native operator surfaces can now recall selector posture from the latest persisted generated-mode launch request. A broader polished controller rebinding and preferences layer is still a later native packet.',
},
{
question: 'Do higher-dimensional selector choices persist between sessions?',
answer: 'They can now persist in a bounded way. When the desktop runtime has a structurally valid generated-mode launch request on hand, the native operator and training surfaces can recall that selector posture. That is useful real continuity, but it is still narrower than a full global preferences or controller-rebinding system.',
},
{
question: 'Can I download a build immediately after sign-in?',