From f2c58feeec2aa1625e5ed7d9874c5d80a5c7cf09 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Sat, 9 May 2026 15:58:35 +0200 Subject: [PATCH] Expose runtime selector owned-execution scope and retention --- .../HyperTwistTrainingRuntimeLibrary.cpp | 128 ++++++++++++++++++ .../HyperTwistTrainingRuntimeLibrary.h | 28 ++++ ...RTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md | 4 +- ...NTION_PREVIEW_SURFACE_PACKET_2026-05-09.md | 55 ++++++++ 4 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_PUZZLE_SUBSET_DIFFICULTY_PROVENANCE_DECK_TITLE_SELECTION_POLICY_DECK_ID_RUNTIME_SURFACE_RETENTION_PREVIEW_SURFACE_PACKET_2026-05-09.md diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp index 73d872b..20f96cb 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp @@ -1637,6 +1637,134 @@ UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOp return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeliveryPreviewSurface(); } +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface( + RunState, + SelectorId, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface(); +} + +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface( + RunState, + SelectorId, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface(); +} + +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface( + RunState, + SelectorId, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface(); +} + +FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingRunState RunState = TrainingSubsystem->GetActiveRunState(); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionMenuSurface( + WorldContextObject, + SelectorId + ); + const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface + OptionLaunchRequestPreviewSurface = + GetActiveTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface( + WorldContextObject, + SelectorId + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface( + RunState, + SelectorId, + OptionMenuSurface, + OptionLaunchRequestPreviewSurface + ); + } + + return FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface(); +} + 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 a042576..48c2437 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h @@ -405,6 +405,34 @@ public: const FString& SelectorId ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId + ); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId + ); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId + ); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface + GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface( + UObject* WorldContextObject, + const FString& SelectorId + ); + 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 f50754f..501377c 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 case, prompt, and delivery preview surfaces over the already-landed selector option launch-request envelope preview and launch-request preview surfaces plus active run state, so gameplay/Blueprint callers can explain owned-case identity / canonical-state posture, prompt label / prompt-kind posture, and delivery-mode / reveal / time-target posture for one selector option without reading raw case lookup, seed-case, or launch-preview 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 puzzle/subset/difficulty, provenance, deck-title/selection-policy, and deck-id/runtime-surface retention preview group, 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 puzzle/subset/difficulty, provenance, deck-title/selection-policy, and deck-id/runtime-surface retention preview surfaces over the already-landed selector option launch-request preview surface plus active run state, so gameplay/Blueprint callers can explain owned-execution scope, source attribution, deck-title / selection-policy posture, and runtime-surface retention posture for one selector option without reading raw case tags, deck policy fields, or launch-preview 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 delivery-mode roster/allowed-mode retention, real-scramble/virtual-cube/smart-cube capability retention, and timing-policy retention preview group, otherwise choose the next roadmap lane deliberately 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_PUZZLE_SUBSET_DIFFICULTY_PROVENANCE_DECK_TITLE_SELECTION_POLICY_DECK_ID_RUNTIME_SURFACE_RETENTION_PREVIEW_SURFACE_PACKET_2026-05-09.md b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_PUZZLE_SUBSET_DIFFICULTY_PROVENANCE_DECK_TITLE_SELECTION_POLICY_DECK_ID_RUNTIME_SURFACE_RETENTION_PREVIEW_SURFACE_PACKET_2026-05-09.md new file mode 100644 index 0000000..dba07b8 --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_GENERATED_MODE_SELECTOR_OPTION_OWNED_EXECUTION_PUZZLE_SUBSET_DIFFICULTY_PROVENANCE_DECK_TITLE_SELECTION_POLICY_DECK_ID_RUNTIME_SURFACE_RETENTION_PREVIEW_SURFACE_PACKET_2026-05-09.md @@ -0,0 +1,55 @@ +# HyperTwist Phase 4 runtime-library generated-mode selector option owned-execution puzzle/subset/difficulty, provenance, deck-title/selection-policy, and deck-id/runtime-surface retention preview 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 scope, attribution, and retention preview contracts above the already-landed owned-execution case, prompt, and delivery preview surfaces. + +## Why this packet exists + +The prior runtime-library packet let world-context callers explain owned-case identity / canonical-state posture, prompt label / prompt-kind posture, and delivery-mode / reveal / time-target posture for one selector option. + +But callers still had to inspect raw generated-mode launch-preview and deck-policy details if they needed to explain: + +- which puzzle id, subset id, and difficulty posture would apply on owned execute +- what source attribution and provenance tags would survive into the owned-execution target +- what deck title and selection-policy posture would govern the generated owned run +- whether deck id and runtime-surface retention would remain exact, refreshed, or blocked + +That kept the runtime-library world-context seam behind the already-landed panel-widget and session-actor owned-execution preview lane. + +## What changed + +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionPuzzleSubsetDifficultyPreviewSurface()` +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionProvenancePreviewSurface()` +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckTitleSelectionPolicyPreviewSurface()` +- added `GetActiveTrainingCoachGeneratedModeSelectorOptionOwnedExecutionDeckIdRuntimeSurfaceRetentionPreviewSurface()` +- derived all four 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 puzzle / subset / difficulty preview for one selector option +- the truthful owned-execution provenance preview for one selector option +- the truthful owned-execution deck-title / selection-policy preview for one selector option +- the truthful owned-execution deck-id / runtime-surface retention preview for one selector option + +without reading raw generated-mode launch-preview, deck-policy, or retained-runtime-surface 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 next aligned move inside that lane would be the runtime-library generated-mode selector option owned-execution delivery-mode roster/allowed-mode retention, real-scramble/virtual-cube/smart-cube capability retention, and timing-policy retention preview group, because those are the next truthful owned-execution retention contracts above the newly-landed puzzle/subset/difficulty, provenance, deck-title/selection-policy, and deck-id/runtime-surface retention preview surfaces.