diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp index 9abd7cd..c187ef1 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp @@ -2277,6 +2277,108 @@ UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOp return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterInspectSurface(); } +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + const FString& PhaseId +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface( + RunState, + SelectorId, + PhaseId, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface(); +} + +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + const int32 NormalizedOrder +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface( + RunState, + SelectorId, + NormalizedOrder, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface(); +} + +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + const int32 EvaluationOrder +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface( + RunState, + SelectorId, + EvaluationOrder, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface(); +} + TArray UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingLearnerMethodSegments(UObject* WorldContextObject) { if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h index 9191104..d3c08b7 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h @@ -545,6 +545,30 @@ public: const FString& SelectorId ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + const FString& PhaseId + ); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + int32 NormalizedOrder + ); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface( + UObject* WorldContextObject, + const FString& SelectorId, + int32 EvaluationOrder + ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training", meta = (WorldContext = "WorldContextObject")) static TArray GetActiveTrainingLearnerMethodSegments(UObject* WorldContextObject); diff --git a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md index 76c7d98..553a7ec 100644 --- a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md +++ b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md @@ -68,8 +68,8 @@ Current correction call from the source-exposed audit and current execution refr - the imported generated-mode gap is closed; request/config/selection plumbing and the bounded clean-room executor are already landed in first-party code - the latest landed bounded `Phase 4` packet closes the retained-idle comparison/outcome actionability gap at the end of the recognition-assisted coach-to-review continuity lane, and the final retained-surface confirmation pass now leaves that closure lane functionally complete - the retained idle widget surface now keeps retained comparison and decision history inspectable without continuing to advertise live launch or guidance-outcome actions once the coach-to-review loop has already collapsed to truthful closed-loop idle - - the latest landed bounded `Phase 4` packet stays on that same deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane and adds active generated-mode selector option owned-execution split-phase current-selection label-provenance partition summary, roster-pair, and merged ordered roster inspect surfaces over the already-landed selector option launch-request preview surface plus active run state, so gameplay/Blueprint callers can inspect label-source partitioning and the merged retained provenance roster for one selector option without reading raw split-phase rows or inspect derivation details directly - - the current next bounded packet should stay on that same runtime-library consumer lane only if a real world-context gameplay or Blueprint caller still needs one more thin derived coach/generated-mode display contract or displayed-action convenience helper over already-cached state; inside that lane the next aligned move is the runtime-library generated-mode selector option owned-execution split-phase current-selection merged ordered roster phase-id lookup, normalized-order lookup, and evaluation-order lookup inspect trio, otherwise choose the next roadmap lane deliberately instead of extending runtime-consumer widening by drift + - the latest landed bounded `Phase 4` packet stays on that same deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane and adds active generated-mode selector option owned-execution split-phase current-selection merged ordered roster phase-id lookup, normalized-order lookup, and evaluation-order lookup inspect surfaces over the already-landed selector option launch-request preview surface plus active run state, so gameplay/Blueprint callers can inspect one retained merged-roster row directly by phase id, normalized order, or evaluation order without scanning the merged roster array or re-running inspect derivation details directly + - the current next bounded packet should stay on that same runtime-library consumer lane only if a real world-context gameplay or Blueprint caller still needs one more thin derived coach/generated-mode display contract or displayed-action convenience helper over already-cached state; inside that lane the merged ordered roster inspect family is now complete through direct row lookup surfaces, so the next clean move should pivot deliberately to the next roadmap lane instead of extending runtime-consumer widening by drift - the current execution-discipline rule that broad refactor / monolith-splitting work should not interrupt the active bounded roadmap packet unless structure is actually blocking it ## Current execution-reality references diff --git a/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_SPLIT_PHASE_CURRENT_SELECTION_MERGED_ORDERED_ROSTER_LOOKUP_INSPECT_SURFACE_PACKET_2026-05-09.md b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_SPLIT_PHASE_CURRENT_SELECTION_MERGED_ORDERED_ROSTER_LOOKUP_INSPECT_SURFACE_PACKET_2026-05-09.md new file mode 100644 index 0000000..13132b5 --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_SPLIT_PHASE_CURRENT_SELECTION_MERGED_ORDERED_ROSTER_LOOKUP_INSPECT_SURFACE_PACKET_2026-05-09.md @@ -0,0 +1,56 @@ +# HyperTwist Phase 4 runtime-library generated-mode selector option owned-execution split-phase current-selection merged ordered roster lookup inspect surface packet + +- bounded Phase `4` runtime-consumer slice +- date: `2026-05-09` + +## Intent + +Stay on the deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane and expose the next truthful owned-execution retained split-phase current-selection merged ordered roster lookup inspect contracts above the already-landed label-provenance partition summary, roster-pair, and merged ordered roster inspect surfaces. + +## Why this packet exists + +The prior runtime-library packet let world-context callers inspect: + +- the label-provenance partition summary +- the explicit-versus-fallback roster pairing +- the merged retained ordered provenance roster + +But callers still had to scan the merged ordered roster array if they needed to inspect one retained row directly by: + +- phase id +- normalized order +- evaluation order + +That kept the runtime-library world-context seam behind the already-landed panel-widget and session-actor merged ordered roster lookup inspect lane. + +## What changed + +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterPhaseIdLookupInspectSurface()` +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterNormalizedOrderLookupInspectSurface()` +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionMergedOrderedRosterEvaluationOrderLookupInspectSurface()` +- derived all three surfaces from the active run state, selected `SelectorId`, and the already-landed runtime-library selector option-menu and launch-request preview surfaces +- kept the runtime-library lane purely compositional over already-cached coach/generated-mode state without reopening backend derivation + +## Files + +- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistTrainingRuntimeLibrary.h` +- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Private\HyperTwistTraining\HyperTwistTrainingRuntimeLibrary.cpp` +- `C:\HyperTwist\docs\HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md` + +## Outcome + +World-context gameplay and Blueprint callers can now ask the runtime library for: + +- the truthful owned-execution split-phase current-selection merged ordered roster phase-id lookup inspect surface for one selector option +- the truthful owned-execution split-phase current-selection merged ordered roster normalized-order lookup inspect surface for one selector option +- the truthful owned-execution split-phase current-selection merged ordered roster evaluation-order lookup inspect surface for one selector option + +without scanning the merged roster array or reading downstream inspect derivation details directly. + +## Validation + +- full `Development Editor | Win64` MSBuild on `UnrealHyperTwist.sln` + +## Next clean slice + +Stay on this runtime-library consumer lane only if a real world-context caller still needs one more thin derived coach/generated-mode display contract or displayed-action convenience helper over already-cached state. The merged ordered roster inspect family is now complete through direct row lookup surfaces, so the next clean move should pivot deliberately to the next roadmap lane instead of extending runtime-consumer widening by drift.