Expose runtime coach readiness and verification surfaces

This commit is contained in:
axiomlogicnexus 2026-05-09 04:38:37 +02:00
parent b00574abaf
commit 95ef6de123
4 changed files with 181 additions and 1 deletions

View file

@ -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<FHyperTwistTrainingMethodSegment> UHyperTwistTrainingRuntimeLibrary::GetActiveTrainingLearnerMethodSegments(UObject* WorldContextObject)
{
if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject))

View file

@ -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<FHyperTwistTrainingMethodSegment> GetActiveTrainingLearnerMethodSegments(UObject* WorldContextObject);

View file

@ -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

View file

@ -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.