From c116a70e5650ef839b10efd0ffdf872983a01c72 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Wed, 29 Apr 2026 21:39:14 +0200 Subject: [PATCH] Surface aligned drill handoff outcomes on dashboard --- .../HyperTwistCoachDashboardWidget.cpp | 434 ++++++++++++++++-- .../HyperTwistTrainingSubsystem.cpp | 40 ++ .../HyperTwistCoachDashboardWidget.h | 23 +- .../HyperTwistTrainingTypes.h | 12 + 4 files changed, 463 insertions(+), 46 deletions(-) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 7b5eeb4..67aab76 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -79,6 +79,18 @@ namespace HyperTwistCoachDashboardWidgetInternal int32 ReliableTrustedBroadQueueRecommendationCount = 0; int32 ReliableTrustedBroadFollowUpRecommendationCount = 0; int32 ReliableTrustedBroadRecommendedRecommendationCount = 0; + int32 ReliableAlignedTrustedTightQueueAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedTightFollowUpAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedTightRecommendedAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedBroadQueueAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedBroadFollowUpAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedBroadRecommendedAcceptedDeltaCount = 0; + int32 ReliableAlignedTrustedTightQueueRecommendationCount = 0; + int32 ReliableAlignedTrustedTightFollowUpRecommendationCount = 0; + int32 ReliableAlignedTrustedTightRecommendedRecommendationCount = 0; + int32 ReliableAlignedTrustedBroadQueueRecommendationCount = 0; + int32 ReliableAlignedTrustedBroadFollowUpRecommendationCount = 0; + int32 ReliableAlignedTrustedBroadRecommendedRecommendationCount = 0; int32 QueueScore = 0; int32 FollowUpScore = 0; int32 RecommendedScore = 0; @@ -94,6 +106,8 @@ namespace HyperTwistCoachDashboardWidgetInternal bool bHasWeakRetainedMethodDrillPostureSignal = false; bool bHasReliableTrustedTightPlanHistorySignal = false; bool bHasReliableTrustedBroadPlanHistorySignal = false; + bool bHasReliableAlignedTrustedTightPlanOutcomeSignal = false; + bool bHasReliableAlignedTrustedBroadPlanOutcomeSignal = false; bool bHasSignal = false; }; @@ -760,6 +774,11 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("aligned reliable trusted tight drill-recovery-plan history"); } + if (SourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable-aligned-outcome")) + { + return TEXT("successful aligned reliable trusted tight drill-recovery-plan handoff outcome history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")) { return TEXT("successful retained drill-recovery-packet history"); @@ -800,6 +819,11 @@ namespace HyperTwistCoachDashboardWidgetInternal { return TEXT("aligned reliable trusted broad drill-recovery-plan redirect history"); } + if (SourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome")) + { + return TEXT("successful aligned reliable trusted broad drill-recovery-plan redirect outcome history"); + } if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")) { return TEXT("weak retained drill-recovery-packet history"); @@ -1411,6 +1435,18 @@ namespace HyperTwistCoachDashboardWidgetInternal ++Bias.QueueScore; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedTightQueueAcceptedDeltaCount += QueuedDelta; + Bias.QueueScore += QueuedDelta * 3; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedBroadQueueAcceptedDeltaCount += QueuedDelta; + ++Bias.QueueScore; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } } if (FollowUpDelta > 0) { @@ -1429,6 +1465,18 @@ namespace HyperTwistCoachDashboardWidgetInternal ++Bias.FollowUpScore; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedTightFollowUpAcceptedDeltaCount += FollowUpDelta; + Bias.FollowUpScore += FollowUpDelta * 3; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedBroadFollowUpAcceptedDeltaCount += FollowUpDelta; + ++Bias.FollowUpScore; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } } if (RecommendedDelta > 0) { @@ -1447,6 +1495,18 @@ namespace HyperTwistCoachDashboardWidgetInternal Bias.RecommendedScore += RecommendedDelta * 2; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedTightRecommendedAcceptedDeltaCount += RecommendedDelta; + ++Bias.RecommendedScore; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + Bias.ReliableAlignedTrustedBroadRecommendedAcceptedDeltaCount += RecommendedDelta; + Bias.RecommendedScore += RecommendedDelta * 3; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } } if (DeferredOverflowQueuedDelta > 0) { @@ -1546,6 +1606,18 @@ namespace HyperTwistCoachDashboardWidgetInternal ++Bias.QueueScore; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedTightQueueRecommendationCount; + Bias.QueueScore += 3; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedBroadQueueRecommendationCount; + ++Bias.QueueScore; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } if (Entry.bUsedMethodDrillWeighting) { ++Bias.MethodDrillQueueRecommendationCount; @@ -1588,6 +1660,18 @@ namespace HyperTwistCoachDashboardWidgetInternal ++Bias.FollowUpScore; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedTightFollowUpRecommendationCount; + Bias.FollowUpScore += 3; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedBroadFollowUpRecommendationCount; + ++Bias.FollowUpScore; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } if (Entry.bUsedMethodDrillWeighting) { ++Bias.MethodDrillFollowUpRecommendationCount; @@ -1630,6 +1714,18 @@ namespace HyperTwistCoachDashboardWidgetInternal Bias.RecommendedScore += 2; Bias.bHasReliableTrustedBroadPlanHistorySignal = true; } + if (Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedTightRecommendedRecommendationCount; + ++Bias.RecommendedScore; + Bias.bHasReliableAlignedTrustedTightPlanOutcomeSignal = true; + } + if (Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + ++Bias.ReliableAlignedTrustedBroadRecommendedRecommendationCount; + Bias.RecommendedScore += 3; + Bias.bHasReliableAlignedTrustedBroadPlanOutcomeSignal = true; + } if (Entry.bUsedMethodDrillWeighting) { ++Bias.MethodDrillRecommendedRecommendationCount; @@ -6976,6 +7072,18 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore = CachedCoachPanelState .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Weighting.ReliableAlignedTrustedTightPlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Weighting.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Weighting.ReliableAlignedTrustedTightPlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore; + Weighting.ReliableAlignedTrustedBroadPlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore; const bool bStrongMethodDrillRecoveryMemory = Weighting.MethodDrillUpstreamHistoryCount >= 2 && Weighting.MethodDrillUpstreamStrongCount >= Weighting.MethodDrillUpstreamWeakCount @@ -7003,6 +7111,38 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: ); Weighting.bHasMethodDrillMemorySignal = true; } + const bool bReliableAlignedTrustedTightPlanOutcomeSourceActive = + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable-aligned-outcome") + || CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable-aligned-outcome"); + const bool bReliableAlignedTrustedBroadPlanOutcomeSourceActive = + CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome") + || CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome"); + const int32 ReliableAlignedTrustedTightPlanOutcomeSignalScore = + (bReliableAlignedTrustedTightPlanOutcomeSourceActive + || (Weighting.ReliableAlignedTrustedTightPlanOutcomeHistoryCount >= 2 + && Weighting.ReliableAlignedTrustedTightPlanOutcomeAverageScore >= 60.0f)) + ? FMath::Clamp( + Weighting.ReliableAlignedTrustedTightPlanOutcomeHistoryCount + - Weighting.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount + + (Weighting.ReliableAlignedTrustedTightPlanOutcomeAverageScore >= 80.0f ? 1 : 0), + 1, + 5) + : 0; + const int32 ReliableAlignedTrustedBroadPlanOutcomeSignalScore = + (bReliableAlignedTrustedBroadPlanOutcomeSourceActive + || (Weighting.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount >= 2 + && Weighting.ReliableAlignedTrustedBroadPlanOutcomeAverageScore >= 58.0f)) + ? FMath::Clamp( + Weighting.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount + - Weighting.ReliableAlignedTrustedTightPlanOutcomeHistoryCount + + (Weighting.ReliableAlignedTrustedBroadPlanOutcomeAverageScore >= 78.0f ? 1 : 0), + 1, + 5) + : 0; const int32 ReliableAlignedTrustedTightPlanSignalScore = (HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel( CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel) @@ -7051,7 +7191,23 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: 1, 3) : 0; - if (ReliableAlignedTrustedTightPlanSignalScore > ReliableAlignedTrustedBroadPlanSignalScore) + if (ReliableAlignedTrustedTightPlanOutcomeSignalScore + > ReliableAlignedTrustedBroadPlanOutcomeSignalScore) + { + Weighting.ReliableAlignedTrustedTightPlanOutcomeBiasCount = + ReliableAlignedTrustedTightPlanOutcomeSignalScore; + Weighting.MethodDrillLaunchBiasCount += ReliableAlignedTrustedTightPlanOutcomeSignalScore; + Weighting.bHasReliableAlignedTrustedPlanHandoffOutcomeSignal = true; + } + else if (ReliableAlignedTrustedBroadPlanOutcomeSignalScore + > ReliableAlignedTrustedTightPlanOutcomeSignalScore) + { + Weighting.ReliableAlignedTrustedBroadPlanOutcomeBiasCount = + ReliableAlignedTrustedBroadPlanOutcomeSignalScore; + Weighting.MethodDrillPromoteBiasCount += ReliableAlignedTrustedBroadPlanOutcomeSignalScore; + Weighting.bHasReliableAlignedTrustedPlanHandoffOutcomeSignal = true; + } + else if (ReliableAlignedTrustedTightPlanSignalScore > ReliableAlignedTrustedBroadPlanSignalScore) { Weighting.ReliableAlignedTrustedTightPlanBiasCount = ReliableAlignedTrustedTightPlanSignalScore; @@ -7673,7 +7829,9 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( const bool bUsedReliableTrustedTightStructurePlanHistory, const bool bUsedReliableTrustedBroadStructurePlanHistory, const bool bUsedReliableAlignedTrustedTightStructurePlanHistory, - const bool bUsedReliableAlignedTrustedBroadStructurePlanHistory) + const bool bUsedReliableAlignedTrustedBroadStructurePlanHistory, + const bool bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory, + const bool bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) { FHyperTwistCoachDashboardHandoffHistoryEntry Entry; Entry.RecordedAtUtc = FDateTime::UtcNow().ToIso8601(); @@ -7705,6 +7863,18 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( CachedCoachQueueExecutionSummary.StartedMethodDrillFollowUpHandoffEventCount; Entry.AcceptedMethodDrillRecommendedHandoffCount = CachedCoachQueueExecutionSummary.StartedMethodDrillRecommendedHandoffEventCount; + Entry.ReliableAlignedTrustedTightPlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Entry.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Entry.ReliableAlignedTrustedTightPlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore; + Entry.ReliableAlignedTrustedBroadPlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore; Entry.ClosureContinuationBias = ClosureContinuationBias; Entry.ClosureSuppressionBias = ClosureSuppressionBias; Entry.bQueueReady = bQueueReady; @@ -7724,6 +7894,10 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( bUsedReliableAlignedTrustedTightStructurePlanHistory; Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory = bUsedReliableAlignedTrustedBroadStructurePlanHistory; + Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory = + bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory; + Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory = + bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory; if (!Entry.IsStructurallyValid()) { return; @@ -7762,6 +7936,16 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( == Entry.AcceptedMethodDrillFollowUpHandoffCount && HandoffHistoryEntries.Last().AcceptedMethodDrillRecommendedHandoffCount == Entry.AcceptedMethodDrillRecommendedHandoffCount + && HandoffHistoryEntries.Last().ReliableAlignedTrustedTightPlanOutcomeHistoryCount + == Entry.ReliableAlignedTrustedTightPlanOutcomeHistoryCount + && HandoffHistoryEntries.Last().ReliableAlignedTrustedBroadPlanOutcomeHistoryCount + == Entry.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount + && FMath::IsNearlyEqual( + HandoffHistoryEntries.Last().ReliableAlignedTrustedTightPlanOutcomeAverageScore, + Entry.ReliableAlignedTrustedTightPlanOutcomeAverageScore) + && FMath::IsNearlyEqual( + HandoffHistoryEntries.Last().ReliableAlignedTrustedBroadPlanOutcomeAverageScore, + Entry.ReliableAlignedTrustedBroadPlanOutcomeAverageScore) && HandoffHistoryEntries.Last().ClosureContinuationBias == Entry.ClosureContinuationBias && HandoffHistoryEntries.Last().ClosureSuppressionBias @@ -7784,7 +7968,11 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot( && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedTightStructurePlanHistory == Entry.bUsedReliableAlignedTrustedTightStructurePlanHistory && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedBroadStructurePlanHistory - == Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory; + == Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory + && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory + == Entry.bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory + && HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory + == Entry.bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory; if (bMatchesLastEntry) { return; @@ -8104,6 +8292,18 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = CachedCoachPanelState .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore; + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore; Entry.bStrongPressureDominant = Entry.MethodDrillRecoveryHistoryCount >= 2 && Entry.StrongMethodDrillRecoveryHistoryCount @@ -8148,6 +8348,18 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap >= 60.0f && Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount >= Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + Entry.bReliableAlignedTrustedTightStructurePlanOutcomeDominant = + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount >= 2 + && Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore + >= 60.0f + && Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount + >= Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + Entry.bReliableAlignedTrustedBroadStructurePlanOutcomeDominant = + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount >= 2 + && Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore + >= 58.0f + && Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount + >= Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount; Entry.bUsedMethodDrillRecoveryMemoryForRecovery = QueueRecoveryWeighting.bHasMethodDrillMemorySignal; Entry.bUsedMethodDrillRecoveryMemoryForHandoff = @@ -8408,6 +8620,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount == Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount + && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount + == Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount + && MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount + == Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount && FMath::IsNearlyEqual( MethodDrillRecoveryMemoryHistoryEntries.Last().MethodDrillRecoveryAverageOutcomeScore, Entry.MethodDrillRecoveryAverageOutcomeScore) @@ -8429,6 +8645,12 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap && FMath::IsNearlyEqual( MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore) + && FMath::IsNearlyEqual( + MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore, + Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore) + && FMath::IsNearlyEqual( + MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore, + Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore) && MethodDrillRecoveryMemoryHistoryEntries.Last().bStrongPressureDominant == Entry.bStrongPressureDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().bWeakPressureDominant @@ -8445,6 +8667,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap == Entry.bReliableAlignedTrustedTightStructurePlanDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedBroadStructurePlanDominant == Entry.bReliableAlignedTrustedBroadStructurePlanDominant + && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedTightStructurePlanOutcomeDominant + == Entry.bReliableAlignedTrustedTightStructurePlanOutcomeDominant + && MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedBroadStructurePlanOutcomeDominant + == Entry.bReliableAlignedTrustedBroadStructurePlanOutcomeDominant && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketKindLabel == Entry.GeneratedGuidancePacketKindLabel && MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketSourceLabel @@ -10117,6 +10343,17 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | aligned reliable handoff outcomes tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount, + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount, + CachedCoachPanelState + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore, + CachedCoachPanelState + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore + ); CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f"), CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount, @@ -10126,6 +10363,36 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore ); + if (CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable-aligned-outcome")) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Successful aligned reliable tight launched-plan outcomes directly tipped this handoff toward tighter continuation."); + } + else if (CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome")) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Successful aligned reliable broad launched-plan outcomes directly tipped this handoff back toward broader redirect."); + } + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | aligned reliable tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"), + HandoffHistoryBias.ReliableAlignedTrustedTightQueueAcceptedDeltaCount, + HandoffHistoryBias.ReliableAlignedTrustedTightFollowUpAcceptedDeltaCount, + HandoffHistoryBias.ReliableAlignedTrustedTightRecommendedAcceptedDeltaCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadQueueAcceptedDeltaCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadFollowUpAcceptedDeltaCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadRecommendedAcceptedDeltaCount + ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | aligned reliable tight recommendation q/f/r %d/%d/%d, broad recommendation q/f/r %d/%d/%d"), + HandoffHistoryBias.ReliableAlignedTrustedTightQueueRecommendationCount, + HandoffHistoryBias.ReliableAlignedTrustedTightFollowUpRecommendationCount, + HandoffHistoryBias.ReliableAlignedTrustedTightRecommendedRecommendationCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadQueueRecommendationCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadFollowUpRecommendationCount, + HandoffHistoryBias.ReliableAlignedTrustedBroadRecommendedRecommendationCount + ); CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | reliable trusted tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"), HandoffHistoryBias.ReliableTrustedTightQueueAcceptedDeltaCount, @@ -10201,6 +10468,12 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedPlanComparisonHistory && bPlanComparisonPrefersBroadRedirect && MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0; + const bool bHandoffRecommendationUsedReliableAlignedTrustedTightPlanOutcomeHistory = + CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-tight-trusted-reliable-aligned-outcome"); + const bool bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanOutcomeHistory = + CachedCoachPanelState.PreferredCoachHandoffSourceLabel + == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome"); RecordCoachHandoffHistorySnapshot( HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind( HandoffRecommendationKind), @@ -10219,7 +10492,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bHandoffRecommendationUsedReliableTrustedTightPlanHistory, bHandoffRecommendationUsedReliableTrustedBroadPlanHistory, bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory, - bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory + bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory, + bHandoffRecommendationUsedReliableAlignedTrustedTightPlanOutcomeHistory, + bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanOutcomeHistory ); FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty() ? TEXT("Start Queue") @@ -10249,6 +10524,71 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() && SelectedHandoffHistoryIndex < HandoffHistoryEntries.Num() ? &HandoffHistoryEntries[SelectedHandoffHistoryIndex] : nullptr; + const FString SelectedHandoffRetainedPostureLine = + SelectedHandoffHistoryEntry == nullptr + ? TEXT("none") + : HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( + SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture, + SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture); + const FString SelectedHandoffReliablePlanLine = [&]() -> FString + { + if (SelectedHandoffHistoryEntry == nullptr) + { + return TEXT("none"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory) + { + return TEXT("aligned trusted tight launched-plan continuation"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory) + { + return TEXT("aligned trusted broad launched-plan redirect"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanHistory) + { + return TEXT("aligned trusted tight continuation"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanHistory) + { + return TEXT("aligned trusted broad redirect"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory) + { + return TEXT("trusted tight continuation"); + } + if (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory) + { + return TEXT("trusted broad redirect"); + } + return TEXT("none"); + }(); + const FString SelectedHandoffQueueSourceLine = + SelectedHandoffHistoryEntry == nullptr || SelectedHandoffHistoryEntry->QueueSourceLabel.IsEmpty() + ? TEXT("n/a") + : SelectedHandoffHistoryEntry->QueueSourceLabel; + const FString SelectedHandoffPreferredLaneLine = + SelectedHandoffHistoryEntry == nullptr + ? TEXT("none") + : HyperTwistCoachDashboardWidgetInternal::DescribeGuidanceLane( + SelectedHandoffHistoryEntry->PreferredGuidanceLane); + const FString SelectedHandoffMemorySourceLine = + SelectedHandoffHistoryEntry == nullptr + ? TEXT("n/a") + : HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel( + SelectedHandoffHistoryEntry->PreferredGuidanceSourceLabel); + const FString SelectedHandoffRecoveryActionLine = + SelectedHandoffHistoryEntry == nullptr + ? TEXT("none") + : (SelectedHandoffHistoryEntry->PreferredRecoveryAction + == EHyperTwistTrainingQueueRecoveryAction::None + ? TEXT("none") + : HyperTwistCoachDashboardWidgetInternal::EnumDisplayName( + SelectedHandoffHistoryEntry->PreferredRecoveryAction)); + const FString SelectedHandoffRecoverySourceLine = + SelectedHandoffHistoryEntry == nullptr + ? TEXT("n/a") + : HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel( + SelectedHandoffHistoryEntry->PreferredRecoveryActionSourceLabel); const FString HandoffHistoryStatusLine = SelectedHandoffHistoryEntry != nullptr ? FString::Printf( @@ -10259,25 +10599,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() SelectedHandoffHistoryEntry->RecommendedHandoffKindLabel.IsEmpty() ? TEXT("none") : *SelectedHandoffHistoryEntry->RecommendedHandoffKindLabel, - *HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( - SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture, - SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture), - 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")))), + *SelectedHandoffRetainedPostureLine, + *SelectedHandoffReliablePlanLine, *SelectedHandoffHistoryEntry->RecordedAtUtc ) : TEXT("Handoff history: no retained handoff-pattern shifts recorded yet."); const FString HandoffHistoryDetailLine = SelectedHandoffHistoryEntry != nullptr ? FString::Printf( - TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | deferred-first suppression recommendation used: %s | drill weighting used: %s | retained posture: %s | reliable trusted plan: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"), + TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | aligned reliable handoff outcomes tight/broad %d/%d avg %.1f/%.1f | deferred-first suppression recommendation used: %s | drill weighting used: %s | reliable trusted plan: %s | retained posture: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"), SelectedHandoffHistoryEntry->AcceptedQueuedHandoffCount, SelectedHandoffHistoryEntry->AcceptedFollowUpHandoffCount, SelectedHandoffHistoryEntry->AcceptedRecommendedHandoffCount, @@ -10287,34 +10617,19 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() SelectedHandoffHistoryEntry->AcceptedMethodDrillQueuedHandoffCount, SelectedHandoffHistoryEntry->AcceptedMethodDrillFollowUpHandoffCount, SelectedHandoffHistoryEntry->AcceptedMethodDrillRecommendedHandoffCount, + SelectedHandoffHistoryEntry->ReliableAlignedTrustedTightPlanOutcomeHistoryCount, + SelectedHandoffHistoryEntry->ReliableAlignedTrustedBroadPlanOutcomeHistoryCount, + SelectedHandoffHistoryEntry->ReliableAlignedTrustedTightPlanOutcomeAverageScore, + SelectedHandoffHistoryEntry->ReliableAlignedTrustedBroadPlanOutcomeAverageScore, SelectedHandoffHistoryEntry->bUsedDeferredFirstSuppressionSignal ? TEXT("yes") : TEXT("no"), SelectedHandoffHistoryEntry->bUsedMethodDrillWeighting ? TEXT("yes") : TEXT("no"), - *HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture( - SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture, - SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture), - 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, - *HyperTwistCoachDashboardWidgetInternal::DescribeGuidanceLane( - SelectedHandoffHistoryEntry->PreferredGuidanceLane), - *HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel( - SelectedHandoffHistoryEntry->PreferredGuidanceSourceLabel), - SelectedHandoffHistoryEntry->PreferredRecoveryAction - == EHyperTwistTrainingQueueRecoveryAction::None - ? TEXT("none") - : *HyperTwistCoachDashboardWidgetInternal::EnumDisplayName( - SelectedHandoffHistoryEntry->PreferredRecoveryAction), - *HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel( - SelectedHandoffHistoryEntry->PreferredRecoveryActionSourceLabel), + *SelectedHandoffReliablePlanLine, + *SelectedHandoffRetainedPostureLine, + *SelectedHandoffQueueSourceLine, + *SelectedHandoffPreferredLaneLine, + *SelectedHandoffMemorySourceLine, + *SelectedHandoffRecoveryActionLine, + *SelectedHandoffRecoverySourceLine, SelectedHandoffHistoryEntry->ClosureContinuationBias, SelectedHandoffHistoryEntry->ClosureSuppressionBias, SelectedHandoffHistoryEntry->bQueueReady ? TEXT("yes") : TEXT("no"), @@ -10536,6 +10851,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() ? TEXT(" | Retained drill-recovery packet history is reinforcing launch recovery.") : TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery."); } + if (QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanHandoffOutcomeSignal) + { + return QueueRecoveryWeighting.PreferredActionKind + == FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery + ? TEXT(" | Aligned reliable trusted tight launched-plan outcomes are reinforcing launch recovery.") + : TEXT(" | Aligned reliable trusted broad launched-plan outcomes are reinforcing promote-deferred recovery."); + } if (QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanOutcomeSignal) { return QueueRecoveryWeighting.PreferredActionKind @@ -10652,7 +10974,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 | 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"), + 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 handoff-outcome 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 outcome 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 | retained drill-recovery stance: %s"), CachedCoachQueueExecutionSummary.DeferredEventCount, CachedCoachQueueExecutionSummary.PromotedEventCount, CachedCoachQueueExecutionSummary.ManualRescheduleEventCount, @@ -10695,6 +11017,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteCount, QueueRecoveryWeighting.MethodDrillPromoteBiasCount, QueueRecoveryWeighting.MethodDrillLaunchBiasCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanOutcomeBiasCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanOutcomeBiasCount, QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanBiasCount, QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanBiasCount, QueueRecoveryWeighting.ReliableTrustedBroadPlanBiasCount, @@ -10724,6 +11048,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() QueueRecoveryWeighting.MethodDrillUpstreamWeakCount, QueueRecoveryWeighting.MethodDrillUpstreamHistoryCount, QueueRecoveryWeighting.MethodDrillUpstreamAverageOutcomeScore, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanOutcomeHistoryCount, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanOutcomeHistoryCount, + QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanOutcomeAverageScore, + QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanOutcomeAverageScore, QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanHistoryCount, QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanHistoryCount, QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore, @@ -11064,6 +11392,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() { return TEXT("n/a"); } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedTightStructurePlanOutcomeDominant) + { + return TEXT("aligned reliable trusted tight launched-plan continuation"); + } + if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedBroadStructurePlanOutcomeDominant) + { + return TEXT("aligned reliable trusted broad launched-plan redirect"); + } if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedTightStructurePlanDominant) { return TEXT("aligned reliable trusted tight continuation"); @@ -11105,7 +11441,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 | 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"), + 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 outcome 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, @@ -11127,6 +11463,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() ->TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore, SelectedMethodDrillRecoveryMemoryHistoryEntry ->TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore, + SelectedMethodDrillRecoveryMemoryHistoryEntry + ->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore, SelectedMethodDrillRecoveryMemoryHistoryEntry ->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount, SelectedMethodDrillRecoveryMemoryHistoryEntry diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp index 0ad65f8..1b333cc 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp @@ -775,6 +775,46 @@ FHyperTwistTrainingCoachPanelState UHyperTwistTrainingSubsystem::GetActiveCoachP ActiveCoachMemorySnapshot.WeakMethodDrillRecoveryHistoryCount; PanelState.MethodDrillRecoveryAverageOutcomeScore = ActiveCoachMemorySnapshot.MethodDrillRecoveryAverageOutcomeScore; + PanelState.TrustedTightMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot.TrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot.TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount; + PanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore; + PanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + PanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount; + PanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore; + PanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = + ActiveCoachMemorySnapshot + .ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore; PanelState.bRepositoryVerificationPassed = ActiveRepositoryRoundTripVerification.bDidRoundTripPass; PanelState.bRepositoryVerificationNeedsAttention = ActiveRepositoryRoundTripVerification.ResolvedPath.IsEmpty() || !ActiveRepositoryRoundTripVerification.bDidRoundTripPass; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index 4714362..2b0cb61 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -211,6 +211,10 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting int32 ReliableAlignedTrustedBroadPlanPromoteReducedCount = 0; int32 ReliableAlignedTrustedTightPlanBiasCount = 0; int32 ReliableAlignedTrustedBroadPlanBiasCount = 0; + int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0; + int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0; + int32 ReliableAlignedTrustedTightPlanOutcomeBiasCount = 0; + int32 ReliableAlignedTrustedBroadPlanOutcomeBiasCount = 0; float PromoteAveragePressureDelta = 0.0f; float LaunchAveragePressureDelta = 0.0f; float MethodDrillUpstreamAverageOutcomeScore = 0.0f; @@ -218,6 +222,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting float ReliableTrustedBroadPlanAverageOutcomeScore = 0.0f; float ReliableAlignedTrustedTightPlanAverageOutcomeScore = 0.0f; float ReliableAlignedTrustedBroadPlanAverageOutcomeScore = 0.0f; + float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f; + float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f; FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind PreferredActionKind = FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::None; bool bHasSignal = false; @@ -229,6 +235,7 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting bool bHasReliableTrustedPlanOutcomeSignal = false; bool bHasReliableAlignedTrustedPlanSignal = false; bool bHasReliableAlignedTrustedPlanOutcomeSignal = false; + bool bHasReliableAlignedTrustedPlanHandoffOutcomeSignal = false; bool IsStructurallyValid() const { @@ -311,6 +318,10 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry int32 AcceptedMethodDrillQueuedHandoffCount = 0; int32 AcceptedMethodDrillFollowUpHandoffCount = 0; int32 AcceptedMethodDrillRecommendedHandoffCount = 0; + int32 ReliableAlignedTrustedTightPlanOutcomeHistoryCount = 0; + int32 ReliableAlignedTrustedBroadPlanOutcomeHistoryCount = 0; + float ReliableAlignedTrustedTightPlanOutcomeAverageScore = 0.0f; + float ReliableAlignedTrustedBroadPlanOutcomeAverageScore = 0.0f; int32 ClosureContinuationBias = 0; int32 ClosureSuppressionBias = 0; bool bQueueReady = false; @@ -324,6 +335,8 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry bool bUsedReliableTrustedBroadStructurePlanHistory = false; bool bUsedReliableAlignedTrustedTightStructurePlanHistory = false; bool bUsedReliableAlignedTrustedBroadStructurePlanHistory = false; + bool bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory = false; + bool bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory = false; bool IsStructurallyValid() const { @@ -409,6 +422,10 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0; float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0; + int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0; + float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f; + float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f; float MethodDrillRecoveryAverageOutcomeScore = 0.0f; bool bStrongPressureDominant = false; bool bWeakPressureDominant = false; @@ -418,6 +435,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry bool bReliableTrustedBroadStructurePlanDominant = false; bool bReliableAlignedTrustedTightStructurePlanDominant = false; bool bReliableAlignedTrustedBroadStructurePlanDominant = false; + bool bReliableAlignedTrustedTightStructurePlanOutcomeDominant = false; + bool bReliableAlignedTrustedBroadStructurePlanOutcomeDominant = false; bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false; bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false; @@ -1491,7 +1510,9 @@ private: bool bUsedReliableTrustedTightStructurePlanHistory, bool bUsedReliableTrustedBroadStructurePlanHistory, bool bUsedReliableAlignedTrustedTightStructurePlanHistory, - bool bUsedReliableAlignedTrustedBroadStructurePlanHistory + bool bUsedReliableAlignedTrustedBroadStructurePlanHistory, + bool bUsedReliableAlignedTrustedTightStructurePlanOutcomeHistory, + bool bUsedReliableAlignedTrustedBroadStructurePlanOutcomeHistory ); void RecordQueueSuppressionSnapshot(); void RecordClosureRecoverySnapshot(); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index 8c144d9..7656050 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -5134,6 +5134,18 @@ struct FHyperTwistTrainingCoachPanelState UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 SignalCount = 0;