diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp index a69ed46..001dd07 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp @@ -1939,19 +1939,28 @@ FHyperTwistCoachSignal UHyperTwistTrainingCoachLibrary::DeriveQueueSuppressionSi const bool bLaunchRecovery = CoachMemorySnapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery; + const bool bDeferredFirstFollowUpSource = + CoachMemorySnapshot.PreferredGuidanceSourceLabel + == TEXT("recommendation-history-deferred-first-follow-up") + || CoachMemorySnapshot.PreferredCoachHandoffSourceLabel + == TEXT("recommendation-history-deferred-first-follow-up"); const bool bFollowUpPreferred = CoachMemorySnapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::FollowUp; const bool bRecommendedPreferred = CoachMemorySnapshot.PreferredGuidanceLane == EHyperTwistTrainingCoachGuidanceLane::Recommended; const FString SignalId = - bSuppressedPrimaryQueueCreation && bSuppressedFollowUpQueueCreation + bDeferredFirstFollowUpSource && bSuppressedPrimaryQueueCreation + ? TEXT("queue_suppression_deferred_first_follow_up") + : (bSuppressedPrimaryQueueCreation && bSuppressedFollowUpQueueCreation ? TEXT("queue_suppression_competing_guidance") : (bSuppressedPrimaryQueueCreation ? TEXT("queue_suppression_recommended") - : TEXT("queue_suppression_follow_up")); + : TEXT("queue_suppression_follow_up"))); const FString Headline = - bSuppressedPrimaryQueueCreation && bSuppressedFollowUpQueueCreation + bDeferredFirstFollowUpSource && bSuppressedPrimaryQueueCreation + ? TEXT("Keep the narrowed follow-up slice ahead of broader recommendation work") + : (bSuppressedPrimaryQueueCreation && bSuppressedFollowUpQueueCreation ? TEXT("Queue recovery is suppressing competing guidance lanes") : (bSuppressedPrimaryQueueCreation ? (bPromoteDeferredRecovery @@ -1959,9 +1968,15 @@ FHyperTwistCoachSignal UHyperTwistTrainingCoachLibrary::DeriveQueueSuppressionSi : TEXT("Follow-up recovery remains primary while recommended queue work is intentionally held back")) : (bLaunchRecovery ? TEXT("Keep recommended recovery primary while follow-up queue regeneration stays suppressed") - : TEXT("Recommended recovery remains primary while follow-up queue work is intentionally held back"))); + : TEXT("Recommended recovery remains primary while follow-up queue work is intentionally held back")))); + const FString DeferredFirstSourceLabel = + bDeferredFirstFollowUpSource + ? HyperTwistTrainingCoachLibraryInternal::DescribeCoachMemorySourceLabel( + TEXT("recommendation-history-deferred-first-follow-up") + ) + : TEXT("n/a"); const FString Detail = FString::Printf( - TEXT("primarySuppressed=%s, followUpSuppressed=%s, preferredLane=%s, recoveryAction=%s, pressure=%.2f, primaryReason=%s, followUpReason=%s"), + TEXT("primarySuppressed=%s, followUpSuppressed=%s, preferredLane=%s, recoveryAction=%s, pressure=%.2f, deferredFirstHistory=%d, deferredFirstSource=%s, primaryReason=%s, followUpReason=%s"), bSuppressedPrimaryQueueCreation ? TEXT("yes") : TEXT("no"), bSuppressedFollowUpQueueCreation ? TEXT("yes") : TEXT("no"), bFollowUpPreferred @@ -1971,6 +1986,8 @@ FHyperTwistCoachSignal UHyperTwistTrainingCoachLibrary::DeriveQueueSuppressionSi ? TEXT("promote-deferred") : (bLaunchRecovery ? TEXT("launch-recovery") : TEXT("none")), CoachMemorySnapshot.ScheduleExecutionPressureScore, + CoachMemorySnapshot.DeferredFirstFollowUpPacketHistoryCount, + *DeferredFirstSourceLabel, QueueSummary.PrimaryQueueSuppressionReason.IsEmpty() ? TEXT("n/a") : *QueueSummary.PrimaryQueueSuppressionReason, @@ -1983,6 +2000,7 @@ FHyperTwistCoachSignal UHyperTwistTrainingCoachLibrary::DeriveQueueSuppressionSi + (CoachMemorySnapshot.bHasBlockedFollowUpScheduleFriction ? 6.0f : 0.0f) + (CoachMemorySnapshot.bHasOutstandingDeferredScheduleWork ? 4.0f : 0.0f) + (bSuppressedPrimaryQueueCreation && bSuppressedFollowUpQueueCreation ? 5.0f : 0.0f) + + (bDeferredFirstFollowUpSource ? 4.0f : 0.0f) + (bPromoteDeferredRecovery ? 2.0f : 0.0f); const EHyperTwistCoachFocusLane FocusLane = CoachMemorySnapshot.bHasArchiveAwareScheduleFriction