From bd1ae9e1b54c5ea2c07e18e72c54f92d3c4b53e0 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Thu, 30 Apr 2026 01:25:38 +0200 Subject: [PATCH] Retain accepted packet trust outcomes upstream --- .../HyperTwistCoachDashboardWidget.cpp | 128 +++++++++++- .../HyperTwistTrainingRepositoryLibrary.cpp | 196 ++++++++++++++++++ .../HyperTwistTrainingSubsystem.cpp | 8 + .../HyperTwistTrainingTypes.h | 36 ++++ 4 files changed, 364 insertions(+), 4 deletions(-) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index f0d1607..0aadf69 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -7273,6 +7273,34 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: 1, 4) : 0; + const int32 AcceptedAlignedTightPacketRetainedTrustBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 65.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 82.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 AcceptedAlignedBroadPacketRetainedTrustBias = + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 63.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketOutcomeTrustBias * 4; @@ -7289,6 +7317,23 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 2; } } + if (AcceptedAlignedTightPacketRetainedTrustBias > AcceptedAlignedBroadPacketRetainedTrustBias) + { + HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketRetainedTrustBias * 3; + if (bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedTightPacketRetainedTrustBias; + } + } + else if (AcceptedAlignedBroadPacketRetainedTrustBias + > AcceptedAlignedTightPacketRetainedTrustBias) + { + HandoffHistoryBias.RecommendedScore += AcceptedAlignedBroadPacketRetainedTrustBias * 3; + if (bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketRetainedTrustBias; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -7321,12 +7366,14 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget: HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp, HandoffHistoryBias.FollowUpScore, HandoffHistoryBias.FollowUpAcceptedDeltaCount - + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount); + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount); ConsiderKind( HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended, HandoffHistoryBias.RecommendedScore, HandoffHistoryBias.RecommendedAcceptedDeltaCount - + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount); + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount); } const HyperTwistCoachDashboardWidgetInternal::FMethodDrillRecoveryPacketDashboardBias MethodDrillRecoveryPacketBias = @@ -9960,6 +10007,34 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() 1, 4) : 0; + const int32 AcceptedAlignedTightPacketRetainedTrustBias = + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 65.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 82.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 AcceptedAlignedBroadPacketRetainedTrustBias = + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount >= 2 + && CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 63.0f) + ? FMath::Clamp( + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + - CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + + (CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustBias > AcceptedAlignedBroadPacketOutcomeTrustBias) { @@ -9978,6 +10053,24 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketOutcomeTrustBias * 2; } } + if (AcceptedAlignedTightPacketRetainedTrustBias + > AcceptedAlignedBroadPacketRetainedTrustBias) + { + HandoffHistoryBias.FollowUpScore += AcceptedAlignedTightPacketRetainedTrustBias * 3; + if (bQueueReadyForHandoff && bQueueLooksFollowUpOrRecovery) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedTightPacketRetainedTrustBias; + } + } + else if (AcceptedAlignedBroadPacketRetainedTrustBias + > AcceptedAlignedTightPacketRetainedTrustBias) + { + HandoffHistoryBias.RecommendedScore += AcceptedAlignedBroadPacketRetainedTrustBias * 3; + if (bQueueReadyForHandoff && bQueueLooksRecommendedOrPrimary) + { + HandoffHistoryBias.QueueScore += AcceptedAlignedBroadPacketRetainedTrustBias; + } + } { HandoffHistoryBias.PreferredKind = HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::None; @@ -10010,12 +10103,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp, HandoffHistoryBias.FollowUpScore, HandoffHistoryBias.FollowUpAcceptedDeltaCount - + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount); + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount + + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount); ConsiderKind( HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended, HandoffHistoryBias.RecommendedScore, HandoffHistoryBias.RecommendedAcceptedDeltaCount - + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount); + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount + + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount); } bool bHandoffRecommendationUsedHistory = false; bool bHandoffRecommendationUsedDeferredOverflowHistory = false; @@ -11000,6 +11095,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore, CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore ); + CoachHandoffRecommendationDetailLine += FString::Printf( + TEXT(" | accepted aligned packet trust tight/broad %d/%d avg %.1f/%.1f"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + ); if (HandoffHistoryBias.AlignedTightFollowUpOutcomeAcceptedDeltaCount > 0 && HandoffHistoryBias.PreferredKind == HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp) @@ -11613,6 +11715,24 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() : TEXT("")) ); } + if (CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount > 0 + || CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount > 0) + { + GuidancePreferenceDetailLine += FString::Printf( + TEXT(" | Accepted aligned packet trust outcomes: tight follow-up-first %d (avg %.2f) | broad recommended-first %d (avg %.2f)%s"), + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount, + CachedCoachPanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore, + CachedCoachPanelState.PreferredGuidanceSourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-")) + ? TEXT(" | Follow-up is currently being reinforced by retained accepted aligned tight packet trust.") + : (CachedCoachPanelState.PreferredGuidanceSourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-")) + ? TEXT(" | Recommended is currently being reinforced by retained accepted aligned broad packet trust.") + : TEXT("")) + ); + } const bool bQueueRecoveryMemorySource = HyperTwistCoachDashboardWidgetInternal::IsQueueRecoveryMemorySource( CachedCoachPanelState.PreferredGuidanceSourceLabel); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp index 2b679ec..2794f66 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRepositoryLibrary.cpp @@ -496,6 +496,30 @@ namespace HyperTwistTrainingRepositoryLibraryInternal == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); } + bool IsAcceptedAlignedTightFollowUpPacketOutcomeTrustSource(const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-")) + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-tight-recommended"); + } + + bool IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource(const FString& SourceLabel) + { + return SourceLabel.StartsWith( + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-")) + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-queued") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-follow-up") + || SourceLabel + == TEXT("dashboard-handoff-accepted-aligned-follow-up-packet-broad-recommended"); + } + FString ResolveMethodDrillFollowUpPacketStructureRecoverySourceLabel( const FString& PreferredCoachHandoffSourceLabel, const FString& PreferredGuidanceSourceLabel) @@ -7850,6 +7874,14 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der RecommendationHistory.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore; Snapshot.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore = RecommendationHistory.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore; + Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount = + RecommendationHistory.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount; + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount = + RecommendationHistory.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount; + Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = + RecommendationHistory.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore; + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = + RecommendationHistory.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore; Snapshot.bHasRepeatRecommendationPressure = RecommendationHistory.bHasRepeatRecommendationPressure; const int32 DeferredTightenedLaunchBias = FMath::Clamp( RecommendationHistory.DeferredTightenedLaunchPlanCount, @@ -9545,6 +9577,34 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der 1, 4) : 0; + const int32 AcceptedAlignedTightPacketRetainedTrustSignal = + (Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount >= 2 + && Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 65.0f) + ? FMath::Clamp( + Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + - Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + + (Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore + >= 82.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 AcceptedAlignedBroadPacketRetainedTrustSignal = + (Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount >= 2 + && Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 63.0f) + ? FMath::Clamp( + Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + - Snapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + + (Snapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore + >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeTrustSignal > AcceptedAlignedBroadPacketOutcomeTrustSignal) { @@ -9616,6 +9676,67 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-recommended"); } } + if (AcceptedAlignedTightPacketRetainedTrustSignal + > AcceptedAlignedBroadPacketRetainedTrustSignal) + { + Snapshot.FollowUpGuidanceContinueBias += + AcceptedAlignedTightPacketRetainedTrustSignal; + Snapshot.SuppressedPrimaryQueuePressureCount += FMath::Max( + 1, + AcceptedAlignedTightPacketRetainedTrustSignal - 1); + ExplicitFollowUpHandoffSignal = FMath::Clamp( + ExplicitFollowUpHandoffSignal + AcceptedAlignedTightPacketRetainedTrustSignal, + 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::IsAcceptedAlignedTightFollowUpPacketOutcomeSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeSource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::FollowUp; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-tight-follow-up"); + } + } + else if (AcceptedAlignedBroadPacketRetainedTrustSignal + > AcceptedAlignedTightPacketRetainedTrustSignal) + { + Snapshot.RecommendedGuidanceContinueBias += + AcceptedAlignedBroadPacketRetainedTrustSignal; + Snapshot.SuppressedFollowUpQueuePressureCount += + AcceptedAlignedBroadPacketRetainedTrustSignal; + ExplicitRecommendedHandoffSignal = FMath::Clamp( + ExplicitRecommendedHandoffSignal + AcceptedAlignedBroadPacketRetainedTrustSignal, + 0, + 6); + if (Snapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::None + || Snapshot.PreferredGuidanceLane + == EHyperTwistTrainingCoachGuidanceLane::FollowUp + || Snapshot.PreferredGuidanceSourceLabel.StartsWith(TEXT("recommendation-history")) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedTightFollowUpPacketOutcomeSource( + Snapshot.PreferredGuidanceSourceLabel) + || HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeSource( + Snapshot.PreferredGuidanceSourceLabel)) + { + Snapshot.PreferredGuidanceLane = + EHyperTwistTrainingCoachGuidanceLane::Recommended; + Snapshot.PreferredGuidanceSourceLabel = + TEXT("coach-memory-dashboard-accepted-aligned-follow-up-packet-broad-recommended"); + } + } if (StrongMethodDrillFollowUpPacketStartedCount > 0 && StrongMethodDrillFollowUpPacketStartedCount >= WeakMethodDrillFollowUpPacketStartedCount) @@ -13849,6 +13970,8 @@ FHyperTwistTrainingCoachRecommendationHistorySummary UHyperTwistTrainingReposito float AlignedBroadRecommendedPacketStructureOutcomeAccumulator = 0.0f; float AcceptedAlignedTightFollowUpPacketOutcomeAccumulator = 0.0f; float AcceptedAlignedBroadRecommendedPacketOutcomeAccumulator = 0.0f; + float AcceptedAlignedTightFollowUpPacketTrustOutcomeAccumulator = 0.0f; + float AcceptedAlignedBroadRecommendedPacketTrustOutcomeAccumulator = 0.0f; FString LatestPlanSortUtc; for (const FHyperTwistTrainingCoachActionPlan& Plan : UserPlans) @@ -14083,6 +14206,18 @@ FHyperTwistTrainingCoachRecommendationHistorySummary UHyperTwistTrainingReposito Summary.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount += 1; AcceptedAlignedBroadRecommendedPacketOutcomeAccumulator += OutcomeSummary.OutcomeScore; } + if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedTightFollowUpPacketOutcomeTrustSource( + OutcomeSummary.PreferredCoachHandoffSourceLabel)) + { + Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount += 1; + AcceptedAlignedTightFollowUpPacketTrustOutcomeAccumulator += OutcomeSummary.OutcomeScore; + } + if (HyperTwistTrainingRepositoryLibraryInternal::IsAcceptedAlignedBroadRecommendedPacketOutcomeTrustSource( + OutcomeSummary.PreferredCoachHandoffSourceLabel)) + { + Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount += 1; + AcceptedAlignedBroadRecommendedPacketTrustOutcomeAccumulator += OutcomeSummary.OutcomeScore; + } if (OutcomeSummary.PlannedLaunchCaseCount > 0) { PlannedLaunchCaseCountAccumulator += @@ -14280,6 +14415,19 @@ FHyperTwistTrainingCoachRecommendationHistorySummary UHyperTwistTrainingReposito AcceptedAlignedBroadRecommendedPacketOutcomeAccumulator / static_cast(Summary.AcceptedAlignedBroadRecommendedPacketOutcomeHistoryCount); } + if (Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount > 0) + { + Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = + AcceptedAlignedTightFollowUpPacketTrustOutcomeAccumulator + / static_cast(Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount); + } + if (Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount > 0) + { + Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = + AcceptedAlignedBroadRecommendedPacketTrustOutcomeAccumulator + / static_cast( + Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount); + } const int32 AcceptedAlignedTightPacketOutcomeLaneSignal = (Summary.AcceptedAlignedTightFollowUpPacketOutcomeHistoryCount >= 2 && Summary.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore >= 60.0f) @@ -14300,6 +14448,30 @@ FHyperTwistTrainingCoachRecommendationHistorySummary UHyperTwistTrainingReposito 1, 4) : 0; + const int32 AcceptedAlignedTightPacketTrustOutcomeLaneSignal = + (Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount >= 2 + && Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore >= 65.0f) + ? FMath::Clamp( + Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + - Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + + (Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore >= 82.0f + ? 1 + : 0), + 1, + 3) + : 0; + const int32 AcceptedAlignedBroadPacketTrustOutcomeLaneSignal = + (Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount >= 2 + && Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore >= 63.0f) + ? FMath::Clamp( + Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount + - Summary.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount + + (Summary.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore >= 80.0f + ? 1 + : 0), + 1, + 3) + : 0; if (AcceptedAlignedTightPacketOutcomeLaneSignal > AcceptedAlignedBroadPacketOutcomeLaneSignal) { if (Summary.DominantSuggestedMode == EHyperTwistTrainingDeliveryMode::Timer @@ -14322,6 +14494,30 @@ FHyperTwistTrainingCoachRecommendationHistorySummary UHyperTwistTrainingReposito Summary.DominantSelectionPolicy = EHyperTwistTrainingSelectionPolicy::Weighted; } } + if (AcceptedAlignedTightPacketTrustOutcomeLaneSignal + > AcceptedAlignedBroadPacketTrustOutcomeLaneSignal) + { + if (Summary.DominantSuggestedMode == EHyperTwistTrainingDeliveryMode::Timer + || Summary.DominantSuggestedMode == EHyperTwistTrainingDeliveryMode::VirtualCube) + { + Summary.DominantSuggestedMode = EHyperTwistTrainingDeliveryMode::CoachReviewed; + } + Summary.DominantSelectionPolicy = EHyperTwistTrainingSelectionPolicy::Scripted; + } + else if (AcceptedAlignedBroadPacketTrustOutcomeLaneSignal + > AcceptedAlignedTightPacketTrustOutcomeLaneSignal) + { + if (Summary.DominantSuggestedMode == EHyperTwistTrainingDeliveryMode::CoachReviewed + && Summary.EscalatedSequenceCount == 0 + && Summary.FollowUpReadySequenceCount == 0) + { + Summary.DominantSuggestedMode = EHyperTwistTrainingDeliveryMode::Timer; + } + if (Summary.DominantSelectionPolicy == EHyperTwistTrainingSelectionPolicy::Scripted) + { + Summary.DominantSelectionPolicy = EHyperTwistTrainingSelectionPolicy::Weighted; + } + } Summary.bHasRepeatRecommendationPressure = Summary.RepeatRecommendationSequenceCount > 0 && (Summary.RecurringCaseCount > 0 diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp index 4b313aa..b76d026 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSubsystem.cpp @@ -880,6 +880,14 @@ FHyperTwistTrainingCoachPanelState UHyperTwistTrainingSubsystem::GetActiveCoachP ActiveCoachMemorySnapshot.AcceptedAlignedTightFollowUpPacketOutcomeAverageScore; PanelState.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore = ActiveCoachMemorySnapshot.AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore; + PanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount = + ActiveCoachMemorySnapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount = + ActiveCoachMemorySnapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount; + PanelState.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = + ActiveCoachMemorySnapshot.AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore; + PanelState.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = + ActiveCoachMemorySnapshot.AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore; 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 4d1f4ae..a66c4cb 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -2055,6 +2055,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") bool bNeedsCoachIntervention = false; @@ -4609,6 +4621,18 @@ struct FHyperTwistTrainingCoachRecommendationHistorySummary UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") TArray RecurringCaseIds; @@ -5296,6 +5320,18 @@ struct FHyperTwistTrainingCoachPanelState UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") float AcceptedAlignedBroadRecommendedPacketOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedTightFollowUpPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 AcceptedAlignedBroadRecommendedPacketTrustOutcomeHistoryCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedTightFollowUpPacketTrustOutcomeAverageScore = 0.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + float AcceptedAlignedBroadRecommendedPacketTrustOutcomeAverageScore = 0.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 SignalCount = 0;