diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 819c8cc..e0af547 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -6688,6 +6688,40 @@ FString UHyperTwistCoachDashboardWidget::ResolveDashboardHandoffStartActionSourc const bool bUseReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistoryLabel = bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistory && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryLabel = + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory + && DisplayedCoachHandoffRecommendationKind == HandoffKind; + const bool bUseReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryLabel = + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory + && DisplayedCoachHandoffRecommendationKind == HandoffKind; + if (bUseReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryLabel) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-recommended"); + default: + return FString(); + } + } + if (bUseReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryLabel) + { + switch (HandoffKind) + { + case EHyperTwistTrainingCoachHandoffKind::Queue: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-queued"); + case EHyperTwistTrainingCoachHandoffKind::FollowUp: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-follow-up"); + case EHyperTwistTrainingCoachHandoffKind::Recommended: + return TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-recommended"); + default: + return FString(); + } + } if (bUseReliableAcceptedAlignedTightPacketExactOutcomeAcceptedHistoryLabel) { switch (HandoffKind) @@ -7807,6 +7841,46 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: 1, 5) : 0; + const int32 ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias = + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 70.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + - CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 86.0f + ? 1 + : 0), + 1, + 6) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias = + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 68.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + - CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 84.0f + ? 1 + : 0), + 1, + 6) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketOutcomeTrustBias * 4; @@ -7960,6 +8034,28 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: ReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistoryBias * 2; } } + if (ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias) + { + HandoffHistoryBias.FollowUpScore += + ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias * 8; + if (bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias * 2; + } + } + else if (ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias) + { + HandoffHistoryBias.RecommendedScore += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias * 8; + if (bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias * 2; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -10630,6 +10726,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeHistory = false; bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeAcceptedHistory = false; bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistory = false; + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory = false; + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory = false; DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel.Reset(); FString CoachHandoffRecommendationStatusLine; FString CoachHandoffRecommendationDetailLine; @@ -10969,6 +11067,46 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() 1, 5) : 0; + const int32 ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias = + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 70.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + - CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 86.0f + ? 1 + : 0), + 1, + 6) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias = + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 68.0f) + ? FMath::Clamp( + CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + - CachedCoachPanelState + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + + (CachedCoachPanelState + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 84.0f + ? 1 + : 0), + 1, + 6) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { @@ -11125,6 +11263,28 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() ReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistoryBias * 2; } } + if (ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias) + { + HandoffHistoryBias.FollowUpScore += + ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias * 8; + if (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias * 2; + } + } + else if (ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias) + { + HandoffHistoryBias.RecommendedScore += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias * 8; + if (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias * 2; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -12026,6 +12186,22 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() || (DisplayedCoachHandoffRecommendationKind == EHyperTwistTrainingCoachHandoffKind::Queue && bQueueLooksRecommendedOrPrimary)); + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory = + ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::FollowUp + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksFollowUpOrRecovery)); + bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory = + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistoryBias + > ReliableAcceptedAlignedTightPacketExactOutcomeReliableHistoryBias + && (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Recommended + || (DisplayedCoachHandoffRecommendationKind + == EHyperTwistTrainingCoachHandoffKind::Queue + && bQueueLooksRecommendedOrPrimary)); const bool bHandoffRecommendationUsedStrongMethodDrillFollowUpPacket = bHandoffRecommendationUsedMethodDrillWeighting && HandoffRecommendationKind @@ -12293,6 +12469,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeAcceptedAverageScore, CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | reliable accepted packet exact branch reliability tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + ); CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | reliable accepted aligned packet handoff history follow-up/recommended %d/%d"), HandoffHistoryBias.ReliableAcceptedAlignedTightFollowUpPacketAcceptedDeltaCount, @@ -12413,6 +12596,16 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CoachHandoffRecommendationDetailLine += TEXT(" | Reliable exact accepted aligned broad packet branch acceptance is now hardening broader redirect beyond raw launched-plan outcomes."); } + if (bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Reliable exact accepted aligned tight packet branch reliability is now hardening narrow continuation beyond acceptance-backed branch history."); + } + else if (bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory) + { + CoachHandoffRecommendationDetailLine += + TEXT(" | Reliable exact accepted aligned broad packet branch reliability is now hardening broader redirect beyond acceptance-backed branch history."); + } CoachHandoffRecommendationDetailLine += FString::Printf( TEXT(" | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f"), CachedCoachPanelState.StrongMethodDrillRecoveryHistoryCount, diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index de6793b..0a2865d 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-reliable-outcome-reliable-reliable-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-"))) + { + return TEXT("reliable exact accepted aligned tight follow-up-packet branch reliability history"); + } if (SourceLabel.StartsWith( TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-")) || SourceLabel.StartsWith( @@ -476,6 +483,13 @@ namespace HyperTwistTrainingCoachLibraryInternal } if (IsAlignedBroadRecommendedGuidanceSourceLabel(SourceLabel)) { + if (SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-"))) + { + return TEXT("reliable exact accepted aligned broad recommended-packet branch reliability history"); + } if (SourceLabel.StartsWith( TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-")) || SourceLabel.StartsWith( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index 5723b97..9580ee6 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -593,6 +593,24 @@ namespace HyperTwistTrainingRepositoryLibraryInternal TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-")); } + bool IsReliableAcceptedAlignedTightFollowUpPacketExactOutcomeReliableHistorySource( + const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-")); + } + + bool IsReliableAcceptedAlignedBroadRecommendedPacketExactOutcomeReliableHistorySource( + const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-")) + || SourceLabel.StartsWith( + TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-")); + } + FString ResolveMethodDrillFollowUpPacketStructureRecoverySourceLabel( const FString& PreferredCoachHandoffSourceLabel, const FString& PreferredGuidanceSourceLabel) @@ -1541,6 +1559,12 @@ namespace HyperTwistTrainingRepositoryLibraryInternal const int32 AcceptedAlignedTightPacketTrustReliableExactOutcomeCompletedCount = QueueExecutionSummary .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeHandoffEventCount; + const int32 AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableStartedCount = + QueueExecutionSummary + .StartedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount; + const int32 AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableCompletedCount = + QueueExecutionSummary + .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount; const int32 AcceptedAlignedBroadPacketTrustReliableOutcomeStartedCount = QueueExecutionSummary .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableOutcomeHandoffEventCount; @@ -1559,6 +1583,12 @@ namespace HyperTwistTrainingRepositoryLibraryInternal const int32 AcceptedAlignedBroadPacketTrustReliableExactOutcomeCompletedCount = QueueExecutionSummary .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeHandoffEventCount; + const int32 AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableStartedCount = + QueueExecutionSummary + .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount; + const int32 AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableCompletedCount = + QueueExecutionSummary + .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount; if (MethodDrillRecoveryStartedCount > 0) { Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount; @@ -1744,6 +1774,24 @@ namespace HyperTwistTrainingRepositoryLibraryInternal * 100.0f) / static_cast(AcceptedAlignedBroadPacketTrustReliableExactOutcomeStartedCount); } + if (AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableStartedCount > 0) + { + Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount += + AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableStartedCount; + Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore = + (static_cast(AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableCompletedCount) + * 100.0f) + / static_cast(AcceptedAlignedTightPacketTrustReliableExactOutcomeReliableStartedCount); + } + if (AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableStartedCount > 0) + { + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount += + AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableStartedCount; + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore = + (static_cast(AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableCompletedCount) + * 100.0f) + / static_cast(AcceptedAlignedBroadPacketTrustReliableExactOutcomeReliableStartedCount); + } const bool bStrongMethodDrillRecoveryHistory = MethodDrillRecoveryStartedCount >= 2 && MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount @@ -10108,6 +10156,44 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der 1, 5) : 0; + const int32 ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal = + (Snapshot.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 70.0f) + ? FMath::Clamp( + Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + - Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + + (Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore + >= 86.0f + ? 1 + : 0), + 1, + 6) + : 0; + const int32 ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal = + (Snapshot.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + >= 2 + && Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 68.0f) + ? FMath::Clamp( + Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount + - Snapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount + + (Snapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore + >= 84.0f + ? 1 + : 0), + 1, + 6) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustSignal > AcceptedAlignedBroadPacketOutcomeTrustSignal) { @@ -10658,6 +10744,86 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-recommended"); } } + if (ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal + > ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal) + { + Snapshot.FollowUpGuidanceContinueBias += + ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal; + Snapshot.SuppressedPrimaryQueuePressureCount += FMath::Max( + 1, + ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal - 1); + ExplicitFollowUpHandoffSignal = FMath::Clamp( + ExplicitFollowUpHandoffSignal + + (ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal * 2), + 0, + 6); + if (QueueExecutionSummary.bHasOutstandingDeferredWork + || QueueExecutionSummary.StartedQueuedHandoffEventCount > 0) + { + ExplicitQueuedHandoffSignal = FMath::Clamp( + ExplicitQueuedHandoffSignal + + FMath::Min(2, ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal), + 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) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketExactAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketExactOutcomeHistorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketExactOutcomeAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::FollowUp; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-reliable-outcome-reliable-outcome-reliable-reliable-follow-up"); + } + } + else if (ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal + > ReliableAcceptedAlignedTightPacketExactOutcomeReliableSignal) + { + Snapshot.RecommendedGuidanceContinueBias += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal; + Snapshot.SuppressedFollowUpQueuePressureCount += + ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal; + ExplicitRecommendedHandoffSignal = FMath::Clamp( + ExplicitRecommendedHandoffSignal + + (ReliableAcceptedAlignedBroadPacketExactOutcomeReliableSignal * 2), + 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) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketExactAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketExactOutcomeHistorySource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketExactOutcomeAcceptedHistorySource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::Recommended; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-reliable-outcome-reliable-outcome-reliable-reliable-recommended"); + } + } if (StrongMethodDrillFollowUpPacketStartedCount > 0 && StrongMethodDrillFollowUpPacketStartedCount >= WeakMethodDrillFollowUpPacketStartedCount) @@ -13553,6 +13719,12 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito Summary .StartedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketExactOutcomeReliableHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .StartedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount += 1; + } if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( HistoryEntry.StartActionSourceLabel)) { @@ -13576,6 +13748,12 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito Summary .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketExactOutcomeReliableHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .StartedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount += 1; + } if (Summary.LastStartedAtUtc.IsEmpty() || HyperTwistTrainingRepositoryLibraryInternal::CompareUtcStrings( HistoryEntry.EventAtUtc, @@ -13809,6 +13987,12 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito Summary .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedTightFollowUpPacketExactOutcomeReliableHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .CompletedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount += 1; + } if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( HistoryEntry.StartActionSourceLabel)) { @@ -13832,6 +14016,12 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito Summary .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeHandoffEventCount += 1; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsReliableAcceptedAlignedBroadRecommendedPacketExactOutcomeReliableHistorySource( + HistoryEntry.StartActionSourceLabel)) + { + Summary + .CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount += 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 33139bc..1002a28 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp @@ -962,6 +962,18 @@ FHyperTwistTrainingCoachPanelState UHyperTwistTrainingSubsystem::GetActiveCoachP PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore = ActiveCoachMemorySnapshot .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore; + PanelState.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount = + ActiveCoachMemorySnapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount = + ActiveCoachMemorySnapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount; + PanelState.AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore = + ActiveCoachMemorySnapshot + .AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore = + ActiveCoachMemorySnapshot + .AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore; 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 b53ea4c..9fb8dd1 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -1634,6 +1634,8 @@ private: bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeHistory = false; bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeAcceptedHistory = false; bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeAcceptedHistory = false; + bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory = false; + bool bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory = false; FString DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel; EHyperTwistCoachDashboardGuidancePreviewLane ActiveGuidancePreviewLane = EHyperTwistCoachDashboardGuidancePreviewLane::None; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index d9a5449..4386e14 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -2151,6 +2151,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") bool bNeedsCoachIntervention = false; @@ -3957,6 +3969,18 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedAcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 StartedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 CompletedAcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHandoffEventCount = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount = 0; @@ -4813,6 +4837,18 @@ struct FHyperTwistTrainingCoachRecommendationHistorySummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") TArray RecurringCaseIds; @@ -5596,6 +5632,18 @@ struct FHyperTwistTrainingCoachPanelState UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeAcceptedAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustReliableExactOutcomeReliableAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 SignalCount = 0;