From 2d30fd602bae4285a5450f6e7c0d9ea0b8dc9922 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Thu, 30 Apr 2026 02:43:39 +0200 Subject: [PATCH] Learn reliable accepted packet handoff reliability upstream --- .../HyperTwistCoachDashboardWidget.cpp | 152 +++++++++++++++ .../HyperTwistTrainingCoachLibrary.cpp | 14 ++ .../HyperTwistTrainingRepositoryLibrary.cpp | 175 ++++++++++++++++++ .../HyperTwistTrainingSubsystem.cpp | 12 ++ .../HyperTwistTrainingTypes.h | 36 ++++ 5 files changed, 389 insertions(+) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 4e75dc8..3e26513 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -7500,6 +7500,44 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: FMath::Max( AcceptedAlignedBroadPacketReliableTrustBias, AcceptedAlignedBroadPacketReliableOutcomeBias); + const int32 ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 62.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + - CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias = + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount >= 2 + && CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 60.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + - CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 78.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketOutcomeTrustBias * 4; @@ -7551,6 +7589,28 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketReliableCompositeBias * 2; } } + if (ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias) + { + HandoffHistoryBias.FollowUpScore += + ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias * 4; + if (bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias * 2; + } + } + else if (ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias) + { + HandoffHistoryBias.RecommendedScore += + ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias * 4; + if (bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias * 2; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -10349,6 +10409,44 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() FMath::Max( AcceptedAlignedBroadPacketReliableTrustBias, AcceptedAlignedBroadPacketReliableOutcomeBias); + const int32 ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 62.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + - CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias = + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount >= 2 + && CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 60.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + - CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 78.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { @@ -10403,6 +10501,28 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketReliableCompositeBias * 2; } } + if (ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias) + { + HandoffHistoryBias.FollowUpScore += + ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias * 4; + if (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias * 2; + } + } + else if (ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias) + { + HandoffHistoryBias.RecommendedScore += + ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias * 4; + if (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias * 2; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -11488,6 +11608,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAverageScore, CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | reliable accepted packet handoff completion tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + ); CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | reliable accepted aligned packet handoff history follow-up/recommended %d/%d"), HandoffHistoryBias.ReliableAcceptedAlignedTightFollowUpPacketAcceptedDeltaCount, @@ -11554,6 +11681,18 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CoachHandoffRecommendationDetailLine += TEXT(" | Reliable accepted aligned broad launched-plan outcomes are reinforcing accepted broader redirect."); } + if (ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Reliable accepted aligned tight packet completion history is now reinforcing narrow continuation."); + } + else if (ReliableAcceptedAlignedBroadPacketOutcomeAcceptedBias + > ReliableAcceptedAlignedTightPacketOutcomeAcceptedBias) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Reliable accepted aligned broad packet completion history is now reinforcing broader redirect."); + } CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f"), CachedCoachPanelState.StrongMethodDrillRecoveryHistoryCount, @@ -12180,6 +12319,19 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore ); } + if (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + > 0 + || CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount > 0) + { + GuidancePreferenceDetailLine += FString::Printf( + TEXT(" | Reliable accepted aligned packet handoff completion: tight follow-up-first %d (avg %.2f) | broad recommended-first %d (avg %.2f)"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + ); + } const bool bQueueRecoveryMemorySource = HyperTwistCoachDashboardWidgetInternal::IsQueueRecoveryMemorySource( CachedCoachPanelState.PreferredGuidanceSourceLabel); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index cd8c653..cf8e0d2 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp @@ -415,6 +415,13 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedTightFollowUpGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-"))) + { + return TEXT("reliable accepted aligned tight follow-up-packet launched-plan outcome history"); + } if (SourceLabel.StartsWith( TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-")) || SourceLabel.StartsWith( @@ -448,6 +455,13 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedBroadRecommendedGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-"))) + { + return TEXT("reliable accepted aligned broad recommended-packet launched-plan outcome history"); + } if (SourceLabel.StartsWith( TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-")) || SourceLabel.StartsWith( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index 7b75873..6e1c3d0 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -512,6 +512,15 @@ namespace HyperTwistTrainingRepositoryLibraryInternal TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-")); } + bool IsReliableAcceptedAlignedTightFollowUpPacketOutcomeAcceptedHistorySource( + const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-")); + } + bool IsReliableAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( const FString& SourceLabel) { @@ -521,6 +530,15 @@ namespace HyperTwistTrainingRepositoryLibraryInternal TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-")); } + bool IsReliableAcceptedAlignedBroadRecommendedPacketOutcomeAcceptedHistorySource( + const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-")); + } + FString ResolveMethodDrillFollowUpPacketStructureRecoverySourceLabel( const FString& PreferredCoachHandoffSourceLabel, const FString& PreferredGuidanceSourceLabel) @@ -1451,6 +1469,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal QueueExecutionSummary.StartedAcceptedAlignedBroadRecommendedPacketTrustHandoffEventCount; const int32 AcceptedAlignedBroadPacketTrustCompletedCount = QueueExecutionSummary.CompletedAcceptedAlignedBroadRecommendedPacketTrustHandoffEventCount; + const int32 AcceptedAlignedTightPacketTrustReliableOutcomeStartedCount = + QueueExecutionSummary + .StartedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount; + const int32 AcceptedAlignedTightPacketTrustReliableOutcomeCompletedCount = + QueueExecutionSummary + .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount; + const int32 AcceptedAlignedBroadPacketTrustReliableOutcomeStartedCount = + QueueExecutionSummary + .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount; + const int32 AcceptedAlignedBroadPacketTrustReliableOutcomeCompletedCount = + QueueExecutionSummary + .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount; if (MethodDrillRecoveryStartedCount > 0) { Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount; @@ -1582,6 +1612,24 @@ namespace HyperTwistTrainingRepositoryLibraryInternal (static_cast(AcceptedAlignedBroadPacketTrustCompletedCount) * 100.0f) / static_cast(AcceptedAlignedBroadPacketTrustStartedCount); } + if (AcceptedAlignedTightPacketTrustReliableOutcomeStartedCount > 0) + { + Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount += + AcceptedAlignedTightPacketTrustReliableOutcomeStartedCount; + Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore = + (static_cast(AcceptedAlignedTightPacketTrustReliableOutcomeCompletedCount) + * 100.0f) + / static_cast(AcceptedAlignedTightPacketTrustReliableOutcomeStartedCount); + } + if (AcceptedAlignedBroadPacketTrustReliableOutcomeStartedCount > 0) + { + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount += + AcceptedAlignedBroadPacketTrustReliableOutcomeStartedCount; + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore = + (static_cast(AcceptedAlignedBroadPacketTrustReliableOutcomeCompletedCount) + * 100.0f) + / static_cast(AcceptedAlignedBroadPacketTrustReliableOutcomeStartedCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount @@ -9730,6 +9778,44 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der FMath::Max( AcceptedAlignedBroadPacketReliableTrustSignal, AcceptedAlignedBroadPacketReliableOutcomeSignal); + const int32 ReliableAcceptedAlignedTightPacketAcceptedSignal = + (Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + >= 2 + && Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 62.0f) + ? FMath::Clamp( + Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + - Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + + (Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketAcceptedSignal = + (Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + >= 2 + && Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 60.0f) + ? FMath::Clamp( + Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount + - Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount + + (Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore + >= 78.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustSignal > AcceptedAlignedBroadPacketOutcomeTrustSignal) { @@ -9931,6 +10017,71 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der true); } } + if (ReliableAcceptedAlignedTightPacketAcceptedSignal + > ReliableAcceptedAlignedBroadPacketAcceptedSignal) + { + Snapshot.FollowUpGuidanceContinueBias += + ReliableAcceptedAlignedTightPacketAcceptedSignal; + Snapshot.SuppressedPrimaryQueuePressureCount += FMath::Max( + 1, + ReliableAcceptedAlignedTightPacketAcceptedSignal - 1); + ExplicitFollowUpHandoffSignal = FMath::Clamp( + ExplicitFollowUpHandoffSignal + ReliableAcceptedAlignedTightPacketAcceptedSignal, + 0, + 6); + if (QueueExecutionSummary.bHasOutstandingDeferredWork + || QueueExecutionSummary.StartedQueuedHandoffEventCount > 0) + { + ExplicitQueuedHandoffSignal = FMath::Clamp( + ExplicitQueuedHandoffSignal + 1, + 0, + 5); + } + if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None + || Snapshot.PreferredGuidanceLane + == EHyperTwistTrainingCoachGuidanceLane::Recommended + || Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedTightFollowUpPacketOutcomeTrustSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketOutcomeAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::FollowUp; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-follow-up"); + } + } + else if (ReliableAcceptedAlignedBroadPacketAcceptedSignal + > ReliableAcceptedAlignedTightPacketAcceptedSignal) + { + Snapshot.RecommendedGuidanceContinueBias += + ReliableAcceptedAlignedBroadPacketAcceptedSignal; + Snapshot.SuppressedFollowUpQueuePressureCount += + ReliableAcceptedAlignedBroadPacketAcceptedSignal; + ExplicitRecommendedHandoffSignal = FMath::Clamp( + ExplicitRecommendedHandoffSignal + ReliableAcceptedAlignedBroadPacketAcceptedSignal, + 0, + 6); + if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None + || Snapshot.PreferredGuidanceLane + == EHyperTwistTrainingCoachGuidanceLane::FollowUp + || Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedTightFollowUpPacketOutcomeTrustSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketOutcomeAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::Recommended; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-recommended"); + } + } if (StrongMethodDrillFollowUpPacketStartedCount > 0 && StrongMethodDrillFollowUpPacketStartedCount >= WeakMethodDrillFollowUpPacketStartedCount) @@ -12808,11 +12959,23 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.StartedAcceptedAlignedTightFollowUpPacketTrustHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketOutcomeAcceptedHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .StartedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount += 1; + } if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( HistoryEntry.StartActionSourceLabel)) { Summary.StartedAcceptedAlignedBroadRecommendedPacketTrustHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketOutcomeAcceptedHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount += 1; + } if (Summary.LastStartedAtUtc.IsEmpty() || HyperTwistTrainingRepositoryLibraryInternal::CompareUtcStrings( HistoryEntry.EventAtUtc, @@ -13028,11 +13191,23 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito { Summary.CompletedAcceptedAlignedTightFollowUpPacketTrustHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketOutcomeAcceptedHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount += 1; + } if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( HistoryEntry.StartActionSourceLabel)) { Summary.CompletedAcceptedAlignedBroadRecommendedPacketTrustHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketOutcomeAcceptedHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount += 1; + } CompletedCountsByEntryId.FindOrAdd(HistoryEntry.EntryId) += 1; if (Summary.LastCompletedAtUtc.IsEmpty() || HyperTwistTrainingRepositoryLibraryInternal::CompareUtcStrings( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp index 08f6f3e..58cdae5 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp @@ -904,6 +904,18 @@ FHyperTwistTrainingCoachPanelState UHyperTwistTrainingSubsystem::GetActiveCoachP ActiveCoachMemorySnapshot.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAverageScore; PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore = ActiveCoachMemorySnapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore; + PanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount = + ActiveCoachMemorySnapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount = + ActiveCoachMemorySnapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount; + PanelState.AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore = + ActiveCoachMemorySnapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore = + ActiveCoachMemorySnapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore; PanelState.bRepositoryVerificationPassed = ActiveRepositoryRoundTripVerification.bDidRoundTripPass; PanelState.bRepositoryVerificationNeedsAttention = ActiveRepositoryRoundTripVerification.ResolvedPath.IsEmpty() || !ActiveRepositoryRoundTripVerification.bDidRoundTripPass; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index ed2da84..02b8460 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -2091,6 +2091,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") bool bNeedsCoachIntervention = false; @@ -3861,6 +3873,18 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 CompletedAcceptedAlignedBroadRecommendedPacketTrustHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedAcceptedAlignedTightFollowUpPacketTrustReliableOutcomeHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount = 0; @@ -5404,6 +5428,18 @@ struct FHyperTwistTrainingCoachPanelState UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustReliableOutcomeAcceptedAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeAcceptedAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 SignalCount = 0;