From 95ef6de123a7d5679e3cddafb670cfd2fe131f56 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Sat, 9 May 2026 04:38:37 +0200 Subject: [PATCH] Expose runtime coach readiness and verification surfaces --- .../HyperTwistTrainingRuntimeLibrary.cpp | 122 ++++++++++++++++++ .../HyperTwistTrainingRuntimeLibrary.h | 8 ++ ...RTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md | 2 +- ...ATION_CONTEXT_SURFACE_PACKET_2026-05-09.md | 50 +++++++ 4 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_COACH_READINESS_VERIFICATION_CONTEXT_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 c3a8d5a..f12a6b1 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp @@ -1041,6 +1041,128 @@ UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachWorkloadBudgetSurface( return FHyperTwistTrainingCoachWorkloadBudgetSurface(); } +FHyperTwistTrainingCoachReadinessEligibilitySurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachReadinessEligibilitySurface( + UObject* WorldContextObject +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingCoachPanelState PanelState = + TrainingSubsystem->GetActiveCoachPanelState(); + const FHyperTwistTrainingCoachPrimaryActionSurface PrimaryActionSurface = + GetActiveTrainingCoachPrimaryActionSurface(WorldContextObject); + const FHyperTwistTrainingCoachQueueControlSurface QueueControlSurface = + GetActiveTrainingCoachQueueControlSurface(WorldContextObject); + const FHyperTwistTrainingCoachQueueRecoveryPostureSurface QueueRecoveryPostureSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachQueueRecoveryPostureSurface( + TrainingSubsystem->GetActiveCoachSchedulePolicySummary(), + TrainingSubsystem->GetActiveCoachSessionQueueExecutionSummary(), + PanelState, + PrimaryActionSurface, + QueueControlSurface + ); + const FHyperTwistTrainingCoachHandoffContinuationSurface HandoffContinuationSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachHandoffContinuationSurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface + ); + const FHyperTwistTrainingCoachFocusProvenanceSurface FocusProvenanceSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachFocusProvenanceSurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface, + HandoffContinuationSurface + ); + const FHyperTwistTrainingCoachWorkloadBudgetSurface WorkloadBudgetSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachWorkloadBudgetSurface( + PanelState, + QueueRecoveryPostureSurface, + HandoffContinuationSurface, + FocusProvenanceSurface + ); + return UHyperTwistTrainingCoachLibrary::DeriveCoachReadinessEligibilitySurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface, + HandoffContinuationSurface, + FocusProvenanceSurface, + WorkloadBudgetSurface + ); + } + + return FHyperTwistTrainingCoachReadinessEligibilitySurface(); +} + +FHyperTwistTrainingCoachVerificationRecognitionReviewContextSurface +UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingCoachVerificationRecognitionReviewContextSurface( + UObject* WorldContextObject +) +{ + if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject)) + { + const FHyperTwistTrainingCoachPanelState PanelState = + TrainingSubsystem->GetActiveCoachPanelState(); + const FHyperTwistTrainingCoachPrimaryActionSurface PrimaryActionSurface = + GetActiveTrainingCoachPrimaryActionSurface(WorldContextObject); + const FHyperTwistTrainingCoachQueueControlSurface QueueControlSurface = + GetActiveTrainingCoachQueueControlSurface(WorldContextObject); + const FHyperTwistTrainingCoachQueueRecoveryPostureSurface QueueRecoveryPostureSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachQueueRecoveryPostureSurface( + TrainingSubsystem->GetActiveCoachSchedulePolicySummary(), + TrainingSubsystem->GetActiveCoachSessionQueueExecutionSummary(), + PanelState, + PrimaryActionSurface, + QueueControlSurface + ); + const FHyperTwistTrainingCoachHandoffContinuationSurface HandoffContinuationSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachHandoffContinuationSurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface + ); + const FHyperTwistTrainingCoachFocusProvenanceSurface FocusProvenanceSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachFocusProvenanceSurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface, + HandoffContinuationSurface + ); + const FHyperTwistTrainingCoachWorkloadBudgetSurface WorkloadBudgetSurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachWorkloadBudgetSurface( + PanelState, + QueueRecoveryPostureSurface, + HandoffContinuationSurface, + FocusProvenanceSurface + ); + const FHyperTwistTrainingCoachReadinessEligibilitySurface ReadinessEligibilitySurface = + UHyperTwistTrainingCoachLibrary::DeriveCoachReadinessEligibilitySurface( + PanelState, + PrimaryActionSurface, + QueueControlSurface, + QueueRecoveryPostureSurface, + HandoffContinuationSurface, + FocusProvenanceSurface, + WorkloadBudgetSurface + ); + return UHyperTwistTrainingCoachLibrary:: + DeriveCoachVerificationRecognitionReviewContextSurface( + PanelState, + FocusProvenanceSurface, + WorkloadBudgetSurface, + ReadinessEligibilitySurface + ); + } + + return FHyperTwistTrainingCoachVerificationRecognitionReviewContextSurface(); +} + 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 5750b83..fdc0e0e 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h @@ -301,6 +301,14 @@ public: static FHyperTwistTrainingCoachWorkloadBudgetSurface GetActiveTrainingCoachWorkloadBudgetSurface(UObject* WorldContextObject); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachReadinessEligibilitySurface + GetActiveTrainingCoachReadinessEligibilitySurface(UObject* WorldContextObject); + + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject")) + static FHyperTwistTrainingCoachVerificationRecognitionReviewContextSurface + GetActiveTrainingCoachVerificationRecognitionReviewContextSurface(UObject* WorldContextObject); + 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 ade4d94..7fc5960 100644 --- a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md +++ b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md @@ -68,7 +68,7 @@ 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 coach focus/provenance and workload/budget surfaces over the already-landed active primary coach CTA, queue-control, queue-recovery, and handoff-continuation surfaces, so gameplay/Blueprint callers can explain the active coach target, upstream recommendation provenance, launch case budget, queue load, and focus pressure without reading raw focus ids, source labels, counts, or budget fields directly + - the latest landed bounded `Phase 4` packet stays on that same deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane and adds active coach readiness/eligibility and verification/recognition/review-policy context surfaces over the already-landed active primary coach CTA, queue-control, queue-recovery, handoff-continuation, focus/provenance, and workload/budget surfaces, so gameplay/Blueprint callers can explain what is actionable now, what is blocked, and what repository-verification, recognition-provider, and review-policy context applies without reading raw booleans, suppression strings, or status/detail lines 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; 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 diff --git a/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_COACH_READINESS_VERIFICATION_CONTEXT_SURFACE_PACKET_2026-05-09.md b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_COACH_READINESS_VERIFICATION_CONTEXT_SURFACE_PACKET_2026-05-09.md new file mode 100644 index 0000000..57cfae5 --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_RUNTIME_LIBRARY_COACH_READINESS_VERIFICATION_CONTEXT_SURFACE_PACKET_2026-05-09.md @@ -0,0 +1,50 @@ +# HyperTwist Phase 4 runtime-library coach readiness and verification-context 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 coach display contracts above the already-landed active primary CTA, queue-control, queue-recovery, handoff-continuation, focus/provenance, and workload/budget surfaces. + +## Why this packet exists + +The prior runtime-library packet let world-context callers explain the active coach target, upstream provenance, launch case budget, queue load, and focus pressure without reading raw focus ids, source labels, counts, or budget fields. + +But callers still had to inspect raw booleans, suppression strings, and verification/recognition/review status lines if they needed to explain: + +- what is actionable now +- what is blocked and why +- what repository-verification, recognition-provider, and review-policy context applies + +That kept the runtime-library caller seam behind the already-landed panel-widget and session-actor display-contract lane. + +## What changed + +- added `GetActiveTrainingCoachReadinessEligibilitySurface()` +- added `GetActiveTrainingCoachVerificationRecognitionReviewContextSurface()` +- derived both surfaces from the same active coach panel state and already-landed runtime-library CTA, queue-control, queue-recovery, handoff-continuation, focus/provenance, and workload/budget chain +- kept the runtime-library lane purely compositional over already-cached active coach 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 coach readiness/eligibility posture +- the truthful repository-verification, recognition-provider, and review-policy context + +without reading raw actionability booleans, suppression strings, or verification/recognition/review status-detail fields 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 best bounded move inside that lane would be the runtime-library generated-mode launch/execution context and selector/application context surfaces, because those are the next truthful contracts above the newly-landed readiness/eligibility and verification/recognition/review-policy context surfaces.