From 4348129d423b00ce194516869518a4418ab1ec9d Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Wed, 29 Apr 2026 20:57:10 +0200 Subject: [PATCH] Learn aligned drill recovery plan trust history --- .../HyperTwistCoachDashboardWidget.cpp | 502 +++++++++++++++--- .../HyperTwistTrainingRepositoryLibrary.cpp | 76 +++ .../HyperTwistCoachDashboardWidget.h | 30 +- .../HyperTwistTrainingTypes.h | 24 + 4 files changed, 565 insertions(+), 67 deletions(-) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 7cb28f0..7b5eeb4 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -126,12 +126,18 @@ namespace HyperTwistCoachDashboardWidgetInternal int32 ReliableTrustedTightPlanSourceCount = 0; int32 ReliableTrustedTightPlanAlignedCount = 0; int32 ReliableTrustedTightPlanDivergedCount = 0; + int32 ReliableAlignedTrustedTightPlanSourceCount = 0; + int32 ReliableAlignedTrustedTightPlanAlignedCount = 0; + int32 ReliableAlignedTrustedTightPlanDivergedCount = 0; int32 BroadPlanSourceCount = 0; int32 BroadPlanAlignedCount = 0; int32 BroadPlanDivergedCount = 0; int32 ReliableTrustedBroadPlanSourceCount = 0; int32 ReliableTrustedBroadPlanAlignedCount = 0; int32 ReliableTrustedBroadPlanDivergedCount = 0; + int32 ReliableAlignedTrustedBroadPlanSourceCount = 0; + int32 ReliableAlignedTrustedBroadPlanAlignedCount = 0; + int32 ReliableAlignedTrustedBroadPlanDivergedCount = 0; bool bHasSignal = false; }; @@ -835,6 +841,11 @@ namespace HyperTwistCoachDashboardWidgetInternal return SourceLabel.Contains(TEXT("structure-plan-tight-trusted-reliable")); } + bool IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel) + { + return SourceLabel.Contains(TEXT("structure-plan-tight-trusted-reliable-aligned")); + } + bool IsBroadMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel) { return SourceLabel.Contains(TEXT("structure-plan-broad")); @@ -850,8 +861,21 @@ namespace HyperTwistCoachDashboardWidgetInternal return SourceLabel.Contains(TEXT("structure-plan-broad-trusted-reliable")); } + bool IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel) + { + return SourceLabel.Contains(TEXT("structure-plan-broad-trusted-reliable-aligned")); + } + FString DescribeMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel) { + if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(SourceLabel)) + { + return TEXT("aligned reliable trusted tight retained drill-recovery plan"); + } + if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(SourceLabel)) + { + return TEXT("aligned reliable trusted broad retained drill-recovery plan"); + } if (IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(SourceLabel)) { return TEXT("reliable trusted tight retained drill-recovery plan"); @@ -1946,6 +1970,19 @@ namespace HyperTwistCoachDashboardWidgetInternal { ++Summary.ReliableTrustedTightPlanDivergedCount; } + if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel)) + { + ++Summary.ReliableAlignedTrustedTightPlanSourceCount; + if (Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture) + { + ++Summary.ReliableAlignedTrustedTightPlanAlignedCount; + } + else + { + ++Summary.ReliableAlignedTrustedTightPlanDivergedCount; + } + } } } else if (IsBroadMethodDrillRecoveryPlanSourceLabel( @@ -1973,6 +2010,19 @@ namespace HyperTwistCoachDashboardWidgetInternal { ++Summary.ReliableTrustedBroadPlanDivergedCount; } + if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel)) + { + ++Summary.ReliableAlignedTrustedBroadPlanSourceCount; + if (Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture) + { + ++Summary.ReliableAlignedTrustedBroadPlanAlignedCount; + } + else + { + ++Summary.ReliableAlignedTrustedBroadPlanDivergedCount; + } + } } } } @@ -1985,6 +2035,17 @@ namespace HyperTwistCoachDashboardWidgetInternal { if (IsTightMethodDrillRecoveryPlanSourceLabel(Entry.PreferredRecoveryActionSourceLabel)) { + if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel)) + { + return Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture + ? TEXT("aligned reliable-tight continuation") + : (Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture + ? TEXT("diverged to aligned reliable-broad redirect") + : (Entry.bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture + ? TEXT("diverged to reliable broad redirect") + : TEXT("aligned reliable-tight source, plan unresolved"))); + } if (IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel( Entry.PreferredRecoveryActionSourceLabel)) { @@ -2004,6 +2065,17 @@ namespace HyperTwistCoachDashboardWidgetInternal } if (IsBroadMethodDrillRecoveryPlanSourceLabel(Entry.PreferredRecoveryActionSourceLabel)) { + if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel)) + { + return Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture + ? TEXT("aligned reliable-broad redirect") + : (Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture + ? TEXT("diverged to aligned reliable-tight continuation") + : (Entry.bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture + ? TEXT("diverged to reliable tight continuation") + : TEXT("aligned reliable-broad source, plan unresolved"))); + } if (IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel( Entry.PreferredRecoveryActionSourceLabel)) { @@ -2036,6 +2108,24 @@ namespace HyperTwistCoachDashboardWidgetInternal const int32 ReliableBroadScore = Summary.ReliableTrustedBroadPlanAlignedCount - Summary.ReliableTrustedBroadPlanDivergedCount; + const int32 ReliableAlignedTightScore = + Summary.ReliableAlignedTrustedTightPlanAlignedCount + - Summary.ReliableAlignedTrustedTightPlanDivergedCount; + const int32 ReliableAlignedBroadScore = + Summary.ReliableAlignedTrustedBroadPlanAlignedCount + - Summary.ReliableAlignedTrustedBroadPlanDivergedCount; + if (ReliableAlignedTightScore > ReliableAlignedBroadScore + && ReliableAlignedTightScore > 0 + && Summary.ReliableAlignedTrustedTightPlanSourceCount > 0) + { + return TEXT("aligned reliable tight continuation"); + } + if (ReliableAlignedBroadScore > ReliableAlignedTightScore + && ReliableAlignedBroadScore > 0 + && Summary.ReliableAlignedTrustedBroadPlanSourceCount > 0) + { + return TEXT("aligned reliable broad redirect"); + } if (ReliableTightScore > ReliableBroadScore && ReliableTightScore > 0 && Summary.ReliableTrustedTightPlanSourceCount > 0) @@ -2069,7 +2159,9 @@ namespace HyperTwistCoachDashboardWidgetInternal { return Summary.TightPlanAlignedCount - Summary.TightPlanDivergedCount + Summary.ReliableTrustedTightPlanAlignedCount - - Summary.ReliableTrustedTightPlanDivergedCount; + - Summary.ReliableTrustedTightPlanDivergedCount + + (Summary.ReliableAlignedTrustedTightPlanAlignedCount * 2) + - Summary.ReliableAlignedTrustedTightPlanDivergedCount; } int32 DeriveMethodDrillRecoveryPlanBroadTrust( @@ -2077,7 +2169,9 @@ namespace HyperTwistCoachDashboardWidgetInternal { return Summary.BroadPlanAlignedCount - Summary.BroadPlanDivergedCount + Summary.ReliableTrustedBroadPlanAlignedCount - - Summary.ReliableTrustedBroadPlanDivergedCount; + - Summary.ReliableTrustedBroadPlanDivergedCount + + (Summary.ReliableAlignedTrustedBroadPlanAlignedCount * 2) + - Summary.ReliableAlignedTrustedBroadPlanDivergedCount; } bool PrefersMethodDrillRecoveryPlanTightContinuation( @@ -2441,12 +2535,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture() && MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust)); const bool bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan = bUseReliableTrustedTightMethodDrillRecoveryStructurePlan - && MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanSourceCount > 0 + && MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0 && MethodDrillRecoveryPlanTightTrust > 0 && MethodDrillRecoveryPlanTightTrust >= MethodDrillRecoveryPlanBroadTrust; const bool bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan = bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan - && MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanSourceCount > 0 + && MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0 && MethodDrillRecoveryPlanBroadTrust > 0 && MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust; @@ -2474,7 +2568,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture() bUseStrongRetainedMethodDrillRecoveryPosture, bUseWeakRetainedMethodDrillRecoveryPosture, bUseReliableTrustedTightMethodDrillRecoveryStructurePlan, - bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan + bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan, + bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan, + bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan ]( const TCHAR* AppliedActionLabel, const FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind ActionKind, @@ -2509,6 +2605,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture() bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan && ActionKind == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred, + bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan + && ActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery, + bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan + && ActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred, bSucceeded ); UpdateDashboardPresentation(); @@ -6728,6 +6830,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: ++Weighting.ReliableTrustedBroadPlanPromoteReducedCount; } } + if (Outcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery) + { + ++Weighting.ReliableAlignedTrustedBroadPlanPromoteCount; + Weighting.bHasReliableAlignedTrustedPlanOutcomeSignal = true; + if (Outcome.bReducedFriction) + { + ++Weighting.ReliableAlignedTrustedBroadPlanPromoteReducedCount; + } + } break; case FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery: ++Weighting.LaunchCount; @@ -6788,6 +6899,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: ++Weighting.ReliableTrustedTightPlanLaunchReducedCount; } } + if (Outcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery) + { + ++Weighting.ReliableAlignedTrustedTightPlanLaunchCount; + Weighting.bHasReliableAlignedTrustedPlanOutcomeSignal = true; + if (Outcome.bReducedFriction) + { + ++Weighting.ReliableAlignedTrustedTightPlanLaunchReducedCount; + } + } break; default: break; @@ -6846,6 +6966,16 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; Weighting.ReliableTrustedBroadPlanAverageOutcomeScore = CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Weighting.ReliableAlignedTrustedTightPlanHistoryCount = + CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + Weighting.ReliableAlignedTrustedBroadPlanHistoryCount = + CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; const bool bStrongMethodDrillRecoveryMemory = Weighting.MethodDrillUpstreamHistoryCount >= 2 && Weighting.MethodDrillUpstreamStrongCount >= Weighting.MethodDrillUpstreamWeakCount @@ -6873,6 +7003,30 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: ); Weighting.bHasMethodDrillMemorySignal = true; } + const int32 ReliableAlignedTrustedTightPlanSignalScore = + (HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) + || (Weighting.ReliableAlignedTrustedTightPlanHistoryCount >= 2 + && Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore >= 60.0f)) + ? FMath::Clamp( + Weighting.ReliableAlignedTrustedTightPlanHistoryCount + - Weighting.ReliableAlignedTrustedBroadPlanHistoryCount + + (Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore >= 80.0f ? 1 : 0), + 1, + 4) + : 0; + const int32 ReliableAlignedTrustedBroadPlanSignalScore = + (HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) + || (Weighting.ReliableAlignedTrustedBroadPlanHistoryCount >= 2 + && Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore >= 60.0f)) + ? FMath::Clamp( + Weighting.ReliableAlignedTrustedBroadPlanHistoryCount + - Weighting.ReliableAlignedTrustedTightPlanHistoryCount + + (Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore >= 80.0f ? 1 : 0), + 1, + 4) + : 0; const int32 ReliableTrustedTightPlanSignalScore = (HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel( CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) @@ -6897,7 +7051,22 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: 1, 3) : 0; - if (ReliableTrustedTightPlanSignalScore > ReliableTrustedBroadPlanSignalScore) + if (ReliableAlignedTrustedTightPlanSignalScore > ReliableAlignedTrustedBroadPlanSignalScore) + { + Weighting.ReliableAlignedTrustedTightPlanBiasCount = + ReliableAlignedTrustedTightPlanSignalScore; + Weighting.MethodDrillLaunchBiasCount += ReliableAlignedTrustedTightPlanSignalScore; + Weighting.bHasReliableAlignedTrustedPlanSignal = true; + } + else if (ReliableAlignedTrustedBroadPlanSignalScore + > ReliableAlignedTrustedTightPlanSignalScore) + { + Weighting.ReliableAlignedTrustedBroadPlanBiasCount = + ReliableAlignedTrustedBroadPlanSignalScore; + Weighting.MethodDrillPromoteBiasCount += ReliableAlignedTrustedBroadPlanSignalScore; + Weighting.bHasReliableAlignedTrustedPlanSignal = true; + } + else if (ReliableTrustedTightPlanSignalScore > ReliableTrustedBroadPlanSignalScore) { Weighting.ReliableTrustedTightPlanBiasCount = ReliableTrustedTightPlanSignalScore; Weighting.MethodDrillLaunchBiasCount += ReliableTrustedTightPlanSignalScore; @@ -7419,6 +7588,8 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome( const bool bUsedWeakRetainedMethodDrillRecoveryPosture, const bool bUsedReliableTrustedTightStructurePlanRecovery, const bool bUsedReliableTrustedBroadStructurePlanRecovery, + const bool bUsedReliableAlignedTrustedTightStructurePlanRecovery, + const bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery, const bool bSucceeded) { QueueRecoveryOutcome.RecordedAtUtc = FDateTime::UtcNow().ToIso8601(); @@ -7467,6 +7638,10 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome( bUsedReliableTrustedTightStructurePlanRecovery; QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery = bUsedReliableTrustedBroadStructurePlanRecovery; + QueueRecoveryOutcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery = + bUsedReliableAlignedTrustedTightStructurePlanRecovery; + QueueRecoveryOutcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery = + bUsedReliableAlignedTrustedBroadStructurePlanRecovery; bHasQueueRecoveryOutcome = QueueRecoveryOutcome.IsStructurallyValid(); if (bHasQueueRecoveryOutcome) { @@ -7496,7 +7671,9 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( const bool bUsedStrongRetainedMethodDrillRecoveryPosture, const bool bUsedWeakRetainedMethodDrillRecoveryPosture, const bool bUsedReliableTrustedTightStructurePlanHistory, - const bool bUsedReliableTrustedBroadStructurePlanHistory) + const bool bUsedReliableTrustedBroadStructurePlanHistory, + const bool bUsedReliableAlignedTrustedTightStructurePlanHistory, + const bool bUsedReliableAlignedTrustedBroadStructurePlanHistory) { FHyperTwistCoachDashboardHandoffHistoryEntry Entry; Entry.RecordedAtUtc = FDateTime::UtcNow().ToIso8601(); @@ -7543,6 +7720,10 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( bUsedReliableTrustedTightStructurePlanHistory; Entry.bUsedReliableTrustedBroadStructurePlanHistory = bUsedReliableTrustedBroadStructurePlanHistory; + Entry.bUsedReliableAlignedTrustedTightStructurePlanHistory = + bUsedReliableAlignedTrustedTightStructurePlanHistory; + Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory = + bUsedReliableAlignedTrustedBroadStructurePlanHistory; if (!Entry.IsStructurallyValid()) { return; @@ -7599,7 +7780,11 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( && HandoffHistoryEntries.Last().bUsedReliableTrustedTightStructurePlanHistory == Entry.bUsedReliableTrustedTightStructurePlanHistory && HandoffHistoryEntries.Last().bUsedReliableTrustedBroadStructurePlanHistory - == Entry.bUsedReliableTrustedBroadStructurePlanHistory; + == Entry.bUsedReliableTrustedBroadStructurePlanHistory + && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedTightStructurePlanHistory + == Entry.bUsedReliableAlignedTrustedTightStructurePlanHistory + && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedBroadStructurePlanHistory + == Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory; if (bMatchesLastEntry) { return; @@ -7848,13 +8033,20 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) || HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel( CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel); + const bool bReliableAlignedTrustedPlanRecoverySourceActive = + HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) + || HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel); if (!bHasMethodDrillRecoveryHistory && !QueueRecoveryWeighting.bHasMethodDrillMemorySignal && !QueueRecoveryWeighting.bHasReliableTrustedPlanSignal + && !QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanSignal && !bUsedMethodDrillRecoveryMemoryForHandoff && !bDrillRecoverySourceActive && !bPacketStructureRecoverySourceActive && !bReliableTrustedPlanRecoverySourceActive + && !bReliableAlignedTrustedPlanRecoverySourceActive && QueueRecoveryWeighting.NarrowMethodDrillPacketStructureLaunchCount <= 0 && QueueRecoveryWeighting.BroadMethodDrillPacketStructurePromoteCount <= 0) { @@ -7902,6 +8094,16 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = + CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = + CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; Entry.bStrongPressureDominant = Entry.MethodDrillRecoveryHistoryCount >= 2 && Entry.StrongMethodDrillRecoveryHistoryCount @@ -7934,6 +8136,18 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap && Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f && Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount >= Entry.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + Entry.bReliableAlignedTrustedTightStructurePlanDominant = + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount >= 2 + && Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 60.0f + && Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount + >= Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + Entry.bReliableAlignedTrustedBroadStructurePlanDominant = + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount >= 2 + && Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore + >= 60.0f + && Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount + >= Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; Entry.bUsedMethodDrillRecoveryMemoryForRecovery = QueueRecoveryWeighting.bHasMethodDrillMemorySignal; Entry.bUsedMethodDrillRecoveryMemoryForHandoff = @@ -7958,6 +8172,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap const FString GuidanceSourceLabel = CachedCoachPanelState.PreferredGuidanceSourceLabel; const auto ApplyGeneratedPlanSnapshot = [&Entry]( + const bool bUseReliableAlignedTrustedTightPlanSource, + const bool bUseReliableAlignedTrustedBroadPlanSource, const bool bUseReliableTrustedTightPlanSource, const bool bUseReliableTrustedBroadPlanSource, const EHyperTwistTrainingDeliveryMode SuggestedMode, @@ -7989,6 +8205,16 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap && HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture( SuggestedMode, SuggestedSelectionPolicy); + Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture = + bUseReliableAlignedTrustedTightPlanSource + && HyperTwistCoachDashboardWidgetInternal::IsTightCoachPlanPosture( + SuggestedMode, + SuggestedSelectionPolicy); + Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture = + bUseReliableAlignedTrustedBroadPlanSource + && HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture( + SuggestedMode, + SuggestedSelectionPolicy); }; const bool bStrongPacketPosture = SourceUsesStrongRetainedMethodDrillRecoveryPosture(GuidanceSourceLabel) @@ -8014,11 +8240,21 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap GuidanceSourceLabel) || HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel( Entry.PreferredRecoveryActionSourceLabel); + const bool bReliableAlignedTrustedTightPlanSource = + HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + GuidanceSourceLabel) + || HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel); const bool bReliableTrustedBroadPlanSource = HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel( GuidanceSourceLabel) || HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel( Entry.PreferredRecoveryActionSourceLabel); + const bool bReliableAlignedTrustedBroadPlanSource = + HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + GuidanceSourceLabel) + || HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel( + Entry.PreferredRecoveryActionSourceLabel); Entry.bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = bStrongPacketPosture; Entry.bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = bWeakPacketPosture; Entry.bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = bGenericRecoveryPacket; @@ -8036,6 +8272,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap : SelectedQueueEntry->Headline; Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, SelectedQueueEntry->SuggestedMode, @@ -8050,6 +8288,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, CachedCoachFollowUpBrief.SuggestedMode, @@ -8063,6 +8303,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, CachedCoachBrief.SuggestedMode, @@ -8080,6 +8322,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, CachedCoachFollowUpBrief.SuggestedMode, @@ -8097,6 +8341,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap : SelectedQueueEntry->Headline; Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, SelectedQueueEntry->SuggestedMode, @@ -8112,6 +8358,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel; Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num(); ApplyGeneratedPlanSnapshot( + bReliableAlignedTrustedTightPlanSource, + bReliableAlignedTrustedBroadPlanSource, bReliableTrustedTightPlanSource, bReliableTrustedBroadPlanSource, CachedCoachBrief.SuggestedMode, @@ -8156,6 +8404,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount == Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount + && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount + == Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount + && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount + == Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount && FMath::IsNearlyEqual( MethodDrillRecoveryMemoryHistoryEntries.Last().MethodDrillRecoveryAverageOutcomeScore, Entry.MethodDrillRecoveryAverageOutcomeScore) @@ -8171,6 +8423,12 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap && FMath::IsNearlyEqual( MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore) + && FMath::IsNearlyEqual( + MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore) + && FMath::IsNearlyEqual( + MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore) && MethodDrillRecoveryMemoryHistoryEntries.Last().bStrongPressureDominant == Entry.bStrongPressureDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().bWeakPressureDominant @@ -8183,6 +8441,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.bReliableTrustedTightStructurePlanDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableTrustedBroadStructurePlanDominant == Entry.bReliableTrustedBroadStructurePlanDominant + && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedTightStructurePlanDominant + == Entry.bReliableAlignedTrustedTightStructurePlanDominant + && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedBroadStructurePlanDominant + == Entry.bReliableAlignedTrustedBroadStructurePlanDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketKindLabel == Entry.GeneratedGuidancePacketKindLabel && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketSourceLabel @@ -8213,6 +8475,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture == Entry.bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture + && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture + == Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture + && MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture + == Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture && MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForRecovery == Entry.bUsedMethodDrillRecoveryMemoryForRecovery && MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForHandoff @@ -9851,6 +10117,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount, + CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount, + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore + ); CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | reliable trusted tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"), HandoffHistoryBias.ReliableTrustedTightQueueAcceptedDeltaCount, @@ -9918,6 +10193,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedPlanComparisonHistory && bPlanComparisonPrefersBroadRedirect && bHasReliableTrustedBroadPlanComparisonHistory; + const bool bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory = + bHandoffRecommendationUsedPlanComparisonHistory + && bPlanComparisonPrefersTightContinuation + && MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0; + const bool bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory = + bHandoffRecommendationUsedPlanComparisonHistory + && bPlanComparisonPrefersBroadRedirect + && MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0; RecordCoachHandoffHistorySnapshot( HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind( HandoffRecommendationKind), @@ -9934,7 +10217,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture, bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture, bHandoffRecommendationUsedReliableTrustedTightPlanHistory, - bHandoffRecommendationUsedReliableTrustedBroadPlanHistory + bHandoffRecommendationUsedReliableTrustedBroadPlanHistory, + bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory, + bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory ); FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty() ? TEXT("Start Queue") @@ -9977,11 +10262,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() *HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture, SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture), - SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory - ? TEXT("trusted tight continuation") - : (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory - ? TEXT("trusted broad redirect") - : TEXT("none")), + SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanHistory + ? TEXT("aligned trusted tight continuation") + : (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanHistory + ? TEXT("aligned trusted broad redirect") + : (SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory + ? TEXT("trusted tight continuation") + : (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory + ? TEXT("trusted broad redirect") + : TEXT("none")))), *SelectedHandoffHistoryEntry->RecordedAtUtc ) : TEXT("Handoff history: no retained handoff-pattern shifts recorded yet."); @@ -10003,11 +10292,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() *HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture, SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture), - SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory - ? TEXT("trusted tight continuation") - : (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory - ? TEXT("trusted broad redirect") - : TEXT("none")), + SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanHistory + ? TEXT("aligned trusted tight continuation") + : (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanHistory + ? TEXT("aligned trusted broad redirect") + : (SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory + ? TEXT("trusted tight continuation") + : (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory + ? TEXT("trusted broad redirect") + : TEXT("none")))), SelectedHandoffHistoryEntry->QueueSourceLabel.IsEmpty() ? TEXT("n/a") : *SelectedHandoffHistoryEntry->QueueSourceLabel, @@ -10234,42 +10527,73 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() : (bUpstreamPrefersLaunchRecovery ? TEXT("prefer launch-recovery") : TEXT("no upstream preference")); - const FString QueueRecoveryMethodDrillStatus = - MethodDrillRecoveryPacketQueueBias.bHasSignal - ? (MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias + const FString QueueRecoveryMethodDrillStatus = [&]() -> FString + { + if (MethodDrillRecoveryPacketQueueBias.bHasSignal) + { + return MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias >= MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias ? TEXT(" | Retained drill-recovery packet history is reinforcing launch recovery.") - : TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery.")) - : (QueueRecoveryWeighting.bHasReliableTrustedPlanOutcomeSignal - ? (QueueRecoveryWeighting.PreferredActionKind + : TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery."); + } + if (QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanOutcomeSignal) + { + return QueueRecoveryWeighting.PreferredActionKind == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery - ? TEXT(" | Prior reliable trusted tight plan recovery outcomes are reinforcing launch recovery.") - : TEXT(" | Prior reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery.")) - : (bQueueRecoveryUsedPlanComparisonHistory - ? (QueueRecoveryWeighting.PreferredActionKind + ? TEXT(" | Prior aligned reliable trusted tight plan recovery outcomes are reinforcing launch recovery.") + : TEXT(" | Prior aligned reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery."); + } + if (QueueRecoveryWeighting.bHasReliableTrustedPlanOutcomeSignal) + { + return QueueRecoveryWeighting.PreferredActionKind == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery - ? (bHasReliableTrustedPlanComparisonHistory - ? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.") - : TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery.")) - : (bHasReliableTrustedPlanComparisonHistory - ? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.") - : TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery."))) - : (QueueRecoveryWeighting.bHasMethodDrillMemorySignal - ? (QueueRecoveryWeighting.PreferredActionKind - == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery - ? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.") - : TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery.")) - : (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal - ? (QueueRecoveryWeighting.PreferredActionKind - == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery - ? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.") - : TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery.")) - : (QueueRecoveryWeighting.bHasMethodDrillSignal - ? (QueueRecoveryWeighting.PreferredActionKind - == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery - ? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.") - : TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds.")) - : TEXT("")))))); + ? TEXT(" | Prior reliable trusted tight plan recovery outcomes are reinforcing launch recovery.") + : TEXT(" | Prior reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery."); + } + if (bQueueRecoveryUsedPlanComparisonHistory) + { + if (QueueRecoveryWeighting.PreferredActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery) + { + if (MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0) + { + return TEXT(" | Aligned reliable retained plan-alignment history is reinforcing trusted tight continuation recovery."); + } + return bHasReliableTrustedPlanComparisonHistory + ? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.") + : TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery."); + } + if (MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0) + { + return TEXT(" | Aligned reliable retained plan-alignment history is reinforcing trusted broad redirect recovery."); + } + return bHasReliableTrustedPlanComparisonHistory + ? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.") + : TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery."); + } + if (QueueRecoveryWeighting.bHasMethodDrillMemorySignal) + { + return QueueRecoveryWeighting.PreferredActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery + ? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.") + : TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery."); + } + if (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal) + { + return QueueRecoveryWeighting.PreferredActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery + ? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.") + : TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery."); + } + if (QueueRecoveryWeighting.bHasMethodDrillSignal) + { + return QueueRecoveryWeighting.PreferredActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery + ? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.") + : TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds."); + } + return TEXT(""); + }(); const bool bHasQueueRecoveryFriction = CachedCoachSchedulePolicySummary.bHasBlockedFollowUpDeferrals || CachedCoachSchedulePolicySummary.bHasArchiveAwareDeferrals @@ -10328,7 +10652,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() : *QueueDeferredFirstSuppressionSignal->Detail) : TEXT(""); FString QueueRecoveryDetailLine = FString::Printf( - TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | reliable trusted outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"), + TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | aligned reliable outcome promote/launch reduced %d/%d over %d/%d | reliable trusted outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | aligned reliable plan bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | aligned reliable tight aligned/diverged %d/%d | aligned reliable broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"), CachedCoachQueueExecutionSummary.DeferredEventCount, CachedCoachQueueExecutionSummary.PromotedEventCount, CachedCoachQueueExecutionSummary.ManualRescheduleEventCount, @@ -10357,6 +10681,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() QueueRecoveryWeighting.MethodDrillLaunchReducedCount, QueueRecoveryWeighting.MethodDrillPromoteCount, QueueRecoveryWeighting.MethodDrillLaunchCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanPromoteReducedCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanLaunchReducedCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanPromoteCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanLaunchCount, QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteReducedCount, QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchReducedCount, QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteCount, @@ -10367,6 +10695,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteCount, QueueRecoveryWeighting.MethodDrillPromoteBiasCount, QueueRecoveryWeighting.MethodDrillLaunchBiasCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanBiasCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanBiasCount, QueueRecoveryWeighting.ReliableTrustedBroadPlanBiasCount, QueueRecoveryWeighting.ReliableTrustedTightPlanBiasCount, MethodDrillRecoveryPacketQueueBias.QueueEntryHistoryCount, @@ -10378,6 +10708,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() MethodDrillRecoveryPlanComparisonSummary.TightPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.BroadPlanAlignedCount, MethodDrillRecoveryPlanComparisonSummary.BroadPlanDivergedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanAlignedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanDivergedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanAlignedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanAlignedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanAlignedCount, @@ -10390,6 +10724,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() QueueRecoveryWeighting.MethodDrillUpstreamWeakCount, QueueRecoveryWeighting.MethodDrillUpstreamHistoryCount, QueueRecoveryWeighting.MethodDrillUpstreamAverageOutcomeScore, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanHistoryCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanHistoryCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore, QueueRecoveryWeighting.ReliableTrustedTightPlanHistoryCount, QueueRecoveryWeighting.ReliableTrustedBroadPlanHistoryCount, QueueRecoveryWeighting.ReliableTrustedTightPlanAverageOutcomeScore, @@ -10539,11 +10877,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() *HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( QueueRecoveryOutcome.bUsedStrongRetainedMethodDrillRecoveryPosture, QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture), - QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery - ? TEXT("trusted tight continuation") - : (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery - ? TEXT("trusted broad redirect") - : TEXT("none")) + QueueRecoveryOutcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery + ? TEXT("aligned reliable tight continuation") + : (QueueRecoveryOutcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery + ? TEXT("aligned reliable broad redirect") + : (QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery + ? TEXT("trusted tight continuation") + : (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery + ? TEXT("trusted broad redirect") + : TEXT("none")))) ); TArray MethodDrillRecoveryHistoryIndices; HyperTwistCoachDashboardWidgetInternal::CollectMethodDrillRecoveryOutcomeIndices( @@ -10716,14 +11058,30 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() : (SelectedMethodDrillRecoveryMemoryHistoryEntry->bGeneratedPacketUsedGenericMethodDrillRecoveryMemory ? TEXT("generic drill-recovery memory") : TEXT("none")))); - const FString MethodDrillRecoveryMemoryReliablePlanLine = - SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr - ? TEXT("n/a") - : (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedTightStructurePlanDominant - ? TEXT("reliable trusted tight continuation") - : (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedBroadStructurePlanDominant - ? TEXT("reliable trusted broad redirect") - : TEXT("none"))); + const FString MethodDrillRecoveryMemoryReliablePlanLine = [&]() -> FString + { + if (SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr) + { + return TEXT("n/a"); + } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedTightStructurePlanDominant) + { + return TEXT("aligned reliable trusted tight continuation"); + } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedBroadStructurePlanDominant) + { + return TEXT("aligned reliable trusted broad redirect"); + } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedTightStructurePlanDominant) + { + return TEXT("reliable trusted tight continuation"); + } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedBroadStructurePlanDominant) + { + return TEXT("reliable trusted broad redirect"); + } + return TEXT("none"); + }(); const FString MethodDrillRecoveryMemoryHistoryStatusLine = SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr && SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid() @@ -10747,7 +11105,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr && SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid() ? FString::Printf( - TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Trusted plan history tight/broad %d/%d avg %.1f/%.1f | Reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | Dominant pressure: %s | Structure bias: %s | Reliable stance: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Plan mode: %s | Plan selection: %s | Plan posture: %s | Plan source: %s | Plan alignment: %s | Plan comparison tight aligned/diverged %d/%d broad aligned/diverged %d/%d reliable tight aligned/diverged %d/%d reliable broad aligned/diverged %d/%d | Plan preferred: %s | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"), + TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Trusted plan history tight/broad %d/%d avg %.1f/%.1f | Aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f | Reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | Dominant pressure: %s | Structure bias: %s | Reliable stance: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Plan mode: %s | Plan selection: %s | Plan posture: %s | Plan source: %s | Plan alignment: %s | Plan comparison tight aligned/diverged %d/%d broad aligned/diverged %d/%d aligned reliable tight aligned/diverged %d/%d aligned reliable broad aligned/diverged %d/%d reliable tight aligned/diverged %d/%d reliable broad aligned/diverged %d/%d | Plan preferred: %s | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"), *MethodDrillRecoveryMemorySourceLine, SelectedMethodDrillRecoveryMemoryHistoryEntry->StrongMethodDrillRecoveryHistoryCount, SelectedMethodDrillRecoveryMemoryHistoryEntry->WeakMethodDrillRecoveryHistoryCount, @@ -10769,6 +11127,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() ->TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, SelectedMethodDrillRecoveryMemoryHistoryEntry ->TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, SelectedMethodDrillRecoveryMemoryHistoryEntry ->ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount, SelectedMethodDrillRecoveryMemoryHistoryEntry @@ -10807,6 +11173,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() MethodDrillRecoveryPlanComparisonSummary.TightPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.BroadPlanAlignedCount, MethodDrillRecoveryPlanComparisonSummary.BroadPlanDivergedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanAlignedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanDivergedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanAlignedCount, + MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanAlignedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanDivergedCount, MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanAlignedCount, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index bb7831f..f1cfb21 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -1297,6 +1297,43 @@ namespace HyperTwistTrainingRepositoryLibraryInternal * 100.0f) / static_cast(ReliableTrustedBroadMethodDrillRecoveryStructurePlanEventCount); } + if ((ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount = + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount; + Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount += + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount; + Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast( + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanCompletedCount) + * 100.0f) + / static_cast(ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount); + } + if ((ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount = + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount; + const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount = + FMath::Max( + 0, + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); + Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount += + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount; + Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast( + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount) + * 100.0f) + / static_cast(ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount @@ -8270,6 +8307,45 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der * 100.0f) / static_cast(ReliableTrustedBroadMethodDrillRecoveryStructurePlanEventCount); } + if ((ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount = + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount; + Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount += + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount; + Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast( + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanCompletedCount) + * 100.0f) + / static_cast( + ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount); + } + if ((ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount) + > 0) + { + const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount = + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount; + const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount = + FMath::Max( + 0, + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount + + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount + - ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanCompletedCount + ); + Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount += + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount; + Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + (static_cast( + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount) + * 100.0f) + / static_cast( + ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index 20ff325..4714362 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -155,6 +155,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryOutcome bool bUsedWeakRetainedMethodDrillRecoveryPosture = false; bool bUsedReliableTrustedTightStructurePlanRecovery = false; bool bUsedReliableTrustedBroadStructurePlanRecovery = false; + bool bUsedReliableAlignedTrustedTightStructurePlanRecovery = false; + bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery = false; bool IsStructurallyValid() const { @@ -201,11 +203,21 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting int32 ReliableTrustedBroadPlanPromoteReducedCount = 0; int32 ReliableTrustedTightPlanBiasCount = 0; int32 ReliableTrustedBroadPlanBiasCount = 0; + int32 ReliableAlignedTrustedTightPlanHistoryCount = 0; + int32 ReliableAlignedTrustedBroadPlanHistoryCount = 0; + int32 ReliableAlignedTrustedTightPlanLaunchCount = 0; + int32 ReliableAlignedTrustedTightPlanLaunchReducedCount = 0; + int32 ReliableAlignedTrustedBroadPlanPromoteCount = 0; + int32 ReliableAlignedTrustedBroadPlanPromoteReducedCount = 0; + int32 ReliableAlignedTrustedTightPlanBiasCount = 0; + int32 ReliableAlignedTrustedBroadPlanBiasCount = 0; float PromoteAveragePressureDelta = 0.0f; float LaunchAveragePressureDelta = 0.0f; float MethodDrillUpstreamAverageOutcomeScore = 0.0f; float ReliableTrustedTightPlanAverageOutcomeScore = 0.0f; float ReliableTrustedBroadPlanAverageOutcomeScore = 0.0f; + float ReliableAlignedTrustedTightPlanAverageOutcomeScore = 0.0f; + float ReliableAlignedTrustedBroadPlanAverageOutcomeScore = 0.0f; FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind PreferredActionKind = FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::None; bool bHasSignal = false; @@ -215,6 +227,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting bool bHasMethodDrillMemorySignal = false; bool bHasReliableTrustedPlanSignal = false; bool bHasReliableTrustedPlanOutcomeSignal = false; + bool bHasReliableAlignedTrustedPlanSignal = false; + bool bHasReliableAlignedTrustedPlanOutcomeSignal = false; bool IsStructurallyValid() const { @@ -308,6 +322,8 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry bool bUsedWeakRetainedMethodDrillRecoveryPosture = false; bool bUsedReliableTrustedTightStructurePlanHistory = false; bool bUsedReliableTrustedBroadStructurePlanHistory = false; + bool bUsedReliableAlignedTrustedTightStructurePlanHistory = false; + bool bUsedReliableAlignedTrustedBroadStructurePlanHistory = false; bool IsStructurallyValid() const { @@ -389,6 +405,10 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry int32 ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; float ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0; + int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; + float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; float MethodDrillRecoveryAverageOutcomeScore = 0.0f; bool bStrongPressureDominant = false; bool bWeakPressureDominant = false; @@ -396,6 +416,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry bool bBroadPacketStructureRecoveryDominant = false; bool bReliableTrustedTightStructurePlanDominant = false; bool bReliableTrustedBroadStructurePlanDominant = false; + bool bReliableAlignedTrustedTightStructurePlanDominant = false; + bool bReliableAlignedTrustedBroadStructurePlanDominant = false; bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false; @@ -403,6 +425,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry bool bGeneratedPlanUsedBroadStructureRedirectPosture = false; bool bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture = false; bool bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture = false; + bool bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture = false; + bool bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture = false; bool bUsedMethodDrillRecoveryMemoryForRecovery = false; bool bUsedMethodDrillRecoveryMemoryForHandoff = false; @@ -1446,6 +1470,8 @@ private: bool bUsedWeakRetainedMethodDrillRecoveryPosture, bool bUsedReliableTrustedTightStructurePlanRecovery, bool bUsedReliableTrustedBroadStructurePlanRecovery, + bool bUsedReliableAlignedTrustedTightStructurePlanRecovery, + bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery, bool bSucceeded ); void RecordCoachHandoffHistorySnapshot( @@ -1463,7 +1489,9 @@ private: bool bUsedStrongRetainedMethodDrillRecoveryPosture, bool bUsedWeakRetainedMethodDrillRecoveryPosture, bool bUsedReliableTrustedTightStructurePlanHistory, - bool bUsedReliableTrustedBroadStructurePlanHistory + bool bUsedReliableTrustedBroadStructurePlanHistory, + bool bUsedReliableAlignedTrustedTightStructurePlanHistory, + bool bUsedReliableAlignedTrustedBroadStructurePlanHistory ); void RecordQueueSuppressionSnapshot(); void RecordClosureRecoverySnapshot(); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index a696dfb..ee7a2df 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -1983,6 +1983,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") bool bNeedsCoachIntervention = false; @@ -5086,6 +5098,18 @@ struct FHyperTwistTrainingCoachPanelState UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 SignalCount = 0;