Persist drill recovery packet sources upstream

This commit is contained in:
axiomlogicnexus 2026-04-29 15:52:55 +02:00
parent 29da2611ea
commit 957f7d06e5
4 changed files with 501 additions and 58 deletions

View file

@ -242,6 +242,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued"))
{
return TEXT("accepted strong drill-recovery-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-strong-queued"))
{
return TEXT("accepted strong retained drill-recovery-posture queued handoff history");
@ -250,6 +254,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-strong-follow-up"))
{
return TEXT("accepted strong retained drill-recovery-posture follow-up handoff history");
@ -258,6 +266,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-strong-recommended"))
{
return TEXT("accepted strong retained drill-recovery-posture recommended handoff history");
@ -266,6 +278,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued"))
{
return TEXT("accepted weak drill-recovery-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-weak-queued"))
{
return TEXT("accepted weak retained drill-recovery-posture queued handoff history");
@ -274,6 +290,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-weak-follow-up"))
{
return TEXT("accepted weak retained drill-recovery-posture follow-up handoff history");
@ -282,6 +302,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-weak-recommended"))
{
return TEXT("accepted weak retained drill-recovery-posture recommended handoff history");
@ -346,6 +370,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued"))
{
return TEXT("accepted strong drill-recovery-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued"))
{
return TEXT("accepted strong retained drill-recovery-posture queued dashboard handoff");
@ -354,6 +382,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up"))
{
return TEXT("accepted strong retained drill-recovery-posture follow-up dashboard handoff");
@ -362,6 +394,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended"))
{
return TEXT("accepted strong retained drill-recovery-posture recommended dashboard handoff");
@ -370,6 +406,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued"))
{
return TEXT("accepted weak drill-recovery-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued"))
{
return TEXT("accepted weak retained drill-recovery-posture queued dashboard handoff");
@ -378,6 +418,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up"))
{
return TEXT("accepted weak retained drill-recovery-posture follow-up dashboard handoff");
@ -386,6 +430,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended"))
{
return TEXT("accepted weak retained drill-recovery-posture recommended dashboard handoff");
@ -450,6 +498,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("successful retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong"))
{
return TEXT("successful retained drill-recovery-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong"))
{
return TEXT("successful retained drill-recovery-posture history");
@ -458,6 +510,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("weak retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak"))
{
return TEXT("weak retained drill-recovery-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak"))
{
return TEXT("weak retained drill-recovery-posture history");
@ -486,21 +542,34 @@ namespace HyperTwistCoachDashboardWidgetInternal
const bool bMethodDrillDriven = false,
const EMethodDrillRecoveryMemoryBias MethodDrillRecoveryMemoryBias =
EMethodDrillRecoveryMemoryBias::None,
const bool bRetainedMethodDrillRecoveryPostureDriven = false)
const bool bRetainedMethodDrillRecoveryPostureDriven = false,
const bool bMethodDrillRecoveryPacketDriven = false)
{
if (MethodDrillRecoveryMemoryBias == EMethodDrillRecoveryMemoryBias::Strong)
{
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
: TEXT("dashboard-handoff-method-drill-recovery-strong-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
: TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
: TEXT("dashboard-handoff-method-drill-recovery-strong-recommended");
@ -513,14 +582,26 @@ namespace HyperTwistCoachDashboardWidgetInternal
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
: TEXT("dashboard-handoff-method-drill-recovery-weak-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
: TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended");
}
return bRetainedMethodDrillRecoveryPostureDriven
? TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")
: TEXT("dashboard-handoff-method-drill-recovery-weak-recommended");
@ -1459,6 +1540,21 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
MethodDrillRecoveryMemoryHistoryEntries,
true
);
const HyperTwistCoachDashboardWidgetInternal::FMethodDrillRecoveryPacketDashboardBias
MethodDrillRecoveryPacketQueueBias =
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPacketDashboardBias(
MethodDrillRecoveryMemoryHistoryEntries
);
const HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias
MethodDrillRecoveryPacketLaunchBias =
MethodDrillRecoveryPacketQueueBias.bHasStrongContinuationSignal
&& (!MethodDrillRecoveryPacketQueueBias.bHasWeakRedirectSignal
|| MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias
>= MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias)
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong
: (MethodDrillRecoveryPacketQueueBias.bHasWeakRedirectSignal
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Weak
: HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None);
const bool bUseStrongRetainedMethodDrillRecoveryPosture =
!bHasDeferredFirstSuppressionSignal
&& QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchCount > 0
@ -1478,6 +1574,11 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
&& (QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteReducedCount > 0
|| QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteCount
>= QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchCount);
const bool bUseMethodDrillRecoveryPacketSignal =
!bHasDeferredFirstSuppressionSignal
&& MethodDrillRecoveryPacketQueueBias.bHasSignal
&& MethodDrillRecoveryPacketLaunchBias
!= HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None;
auto StartRunAndRefresh = [this](const FHyperTwistTrainingRunState& RunState)
{
@ -1532,7 +1633,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
bHasDeferredFirstSuppressionSignal,
bUseMethodDrillRecoverySignal,
RetainedMethodDrillRecoveryMemoryBias,
bUseStrongRetainedMethodDrillRecoveryPosture
MethodDrillRecoveryPacketLaunchBias,
bUseStrongRetainedMethodDrillRecoveryPosture,
bUseMethodDrillRecoveryPacketSignal
](
const EHyperTwistTrainingCoachHandoffKind HandoffKind)
{
@ -1550,17 +1653,37 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
false,
false,
HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong,
true,
bUseMethodDrillRecoveryPacketSignal
);
}
if (bUseMethodDrillRecoveryPacketSignal)
{
return HyperTwistCoachDashboardWidgetInternal::DashboardHandoffSourceLabel(
HandoffKind,
false,
false,
MethodDrillRecoveryPacketLaunchBias,
false,
true
);
}
if (bUseMethodDrillRecoverySignal)
{
const HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias
EffectiveRecoverySourceBias =
RetainedMethodDrillRecoveryMemoryBias
!= HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None
? RetainedMethodDrillRecoveryMemoryBias
: MethodDrillRecoveryPacketLaunchBias;
return HyperTwistCoachDashboardWidgetInternal::DashboardHandoffSourceLabel(
HandoffKind,
false,
RetainedMethodDrillRecoveryMemoryBias
EffectiveRecoverySourceBias
== HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None,
RetainedMethodDrillRecoveryMemoryBias
EffectiveRecoverySourceBias,
false,
bUseMethodDrillRecoveryPacketSignal
);
}
@ -6526,11 +6649,13 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
bUsedMethodDrillRecoveryMemoryForHandoff;
auto SourceUsesStrongRetainedMethodDrillRecoveryPosture = [](const FString& SourceLabel)
{
return SourceLabel.Contains(TEXT("method-drill-recovery-posture-strong"));
return SourceLabel.Contains(TEXT("method-drill-recovery-posture-strong"))
|| SourceLabel.Contains(TEXT("method-drill-recovery-packet-strong"));
};
auto SourceUsesWeakRetainedMethodDrillRecoveryPosture = [](const FString& SourceLabel)
{
return SourceLabel.Contains(TEXT("method-drill-recovery-posture-weak"));
return SourceLabel.Contains(TEXT("method-drill-recovery-posture-weak"))
|| SourceLabel.Contains(TEXT("method-drill-recovery-packet-weak"));
};
auto SourceUsesGenericMethodDrillRecoveryMemory = [](const FString& SourceLabel)
{
@ -7302,6 +7427,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
bool bHandoffRecommendationUsedDeferredFirstSuppressionSignal = false;
bool bHandoffRecommendationUsedMethodDrillWeighting = false;
bool bHandoffRecommendationUsedMethodDrillRecoveryMemory = false;
bool bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = false;
bool bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture = false;
bool bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture = false;
const HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias
@ -7391,6 +7517,13 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
MethodDrillRecoveryPacketHandoffBias.PreferredHandoffKind
== HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended
&& bRecommendedReadyForHandoff;
const HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias
MethodDrillRecoveryPacketHandoffSourceBias =
(bPacketPrefersQueueContinuation || bPacketPrefersFollowUpContinuation)
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong
: ((bPacketPrefersQueueRedirect || bPacketPrefersRecommendedRedirect)
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Weak
: HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None);
if (!bCanUseCoachHandoff)
{
CoachHandoffRecommendationStatusLine =
@ -7452,12 +7585,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue;
bHandoffRecommendationUsedMethodDrillWeighting = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (bPacketPrefersFollowUpContinuation)
{
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp;
bHandoffRecommendationUsedMethodDrillWeighting = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (HandoffHistoryBias.PreferredKind
== HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue
@ -7500,12 +7635,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue;
bHandoffRecommendationUsedMethodDrillRecoveryMemory = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (bPacketPrefersFollowUpContinuation)
{
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::FollowUp;
bHandoffRecommendationUsedMethodDrillRecoveryMemory = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (HandoffHistoryBias.PreferredKind
== HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue
@ -7559,12 +7696,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended;
bHandoffRecommendationUsedMethodDrillWeighting = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (bPacketPrefersQueueRedirect)
{
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue;
bHandoffRecommendationUsedMethodDrillWeighting = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (HandoffHistoryBias.PreferredKind
== HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue
@ -7607,12 +7746,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended;
bHandoffRecommendationUsedMethodDrillRecoveryMemory = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (bPacketPrefersQueueRedirect)
{
HandoffRecommendationKind =
HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Queue;
bHandoffRecommendationUsedMethodDrillRecoveryMemory = true;
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory = true;
}
else if (HandoffHistoryBias.PreferredKind
== HyperTwistCoachDashboardWidgetInternal::EHandoffRecommendationKind::Recommended
@ -7877,7 +8018,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong
: HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Weak,
true
true,
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory
);
}
else if (bHandoffRecommendationUsedMethodDrillRecoveryMemory
@ -7889,12 +8031,28 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
DisplayedCoachHandoffRecommendationKind,
false,
false,
EffectiveMethodDrillRecoveryMemoryHandoffBias
EffectiveMethodDrillRecoveryMemoryHandoffBias,
false,
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory
);
}
else if (bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory
&& MethodDrillRecoveryPacketHandoffSourceBias
!= HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None)
{
DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel =
HyperTwistCoachDashboardWidgetInternal::DashboardHandoffSourceLabel(
DisplayedCoachHandoffRecommendationKind,
false,
false,
MethodDrillRecoveryPacketHandoffSourceBias,
false,
true
);
}
CoachHandoffRecommendationDetailLine = FString::Printf(
TEXT("Closure continuation bias %d | Closure suppression bias %d | Queue ready: %s | Follow-up ready: %s | Recommended ready: %s | Preferred lane: %s | Memory source: %s%s%s%s%s%s%s | Launch bias: %s from %s | broadened/tightened history %d/%d | deferred tightened launches %d | deferred launch cases %d%s | Handoff history preferred: %s | accepted q/f/r %d/%d/%d | deferred-overflow accepted q/f/r %d/%d/%d | deferred-first recommendation q/f/r %d/%d/%d | recommended q/f/r %d/%d/%d"),
TEXT("Closure continuation bias %d | Closure suppression bias %d | Queue ready: %s | Follow-up ready: %s | Recommended ready: %s | Preferred lane: %s | Memory source: %s%s%s%s%s%s%s%s | Launch bias: %s from %s | broadened/tightened history %d/%d | deferred tightened launches %d | deferred launch cases %d%s | Handoff history preferred: %s"),
HandoffClosureBias.ContinuationBias,
HandoffClosureBias.SuppressionBias,
bQueueReadyForHandoff ? TEXT("yes") : TEXT("no"),
@ -7922,6 +8080,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
? TEXT(" | Upstream strong drill-driven recovery memory directly tipped this handoff toward narrow continuation.")
: TEXT(" | Upstream weak drill-driven recovery memory directly tipped this handoff back toward broader coach guidance."))
: TEXT(""),
bHandoffRecommendationUsedMethodDrillRecoveryPacketHistory
? TEXT(" | Retained drill-recovery packet history directly tipped this handoff branch.")
: TEXT(""),
bHandoffRecommendationUsedDeferredFirstSuppressionSignal
? (bDeferredFirstSuppressionSignalPromoted
? TEXT(" | Deferred-first queue suppression is promoted and keeping narrowed follow-up continuation ahead.")
@ -7940,7 +8101,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
? TEXT(" | Deferred overflow memory is directly reinforcing this handoff.")
: TEXT(""),
*HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind(
HandoffHistoryBias.PreferredKind),
HandoffHistoryBias.PreferredKind)
);
CoachHandoffRecommendationDetailLine += FString::Printf(
TEXT(" | accepted q/f/r %d/%d/%d | deferred-overflow accepted q/f/r %d/%d/%d | deferred-first recommendation q/f/r %d/%d/%d | recommended q/f/r %d/%d/%d"),
HandoffHistoryBias.QueueAcceptedDeltaCount,
HandoffHistoryBias.FollowUpAcceptedDeltaCount,
HandoffHistoryBias.RecommendedAcceptedDeltaCount,

View file

@ -45,9 +45,15 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
@ -61,6 +67,8 @@ namespace HyperTwistTrainingCoachLibraryInternal
return IsMethodDrillDashboardHandoffSource(SourceLabel)
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong")
@ -70,14 +78,19 @@ namespace HyperTwistTrainingCoachLibraryInternal
bool IsStrongMethodDrillRecoveryMemorySource(const FString& SourceLabel)
{
return SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-strong-"))
|| SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-"))
|| SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-posture-strong-"))
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong");
}
@ -85,14 +98,19 @@ namespace HyperTwistTrainingCoachLibraryInternal
bool IsWeakMethodDrillRecoveryMemorySource(const FString& SourceLabel)
{
return SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-weak-"))
|| SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-"))
|| SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-recovery-posture-weak-"))
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak");
}
@ -186,14 +204,26 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("accepted strong drill-recovery-memory queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued"))
{
return TEXT("accepted strong drill-recovery-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-memory follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-memory recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-strong-queued"))
{
return TEXT("accepted strong retained drill-recovery-posture queued handoff history");
@ -210,14 +240,26 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("accepted weak drill-recovery-memory queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued"))
{
return TEXT("accepted weak drill-recovery-packet queued handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-memory follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-packet follow-up handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-memory recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-packet recommended handoff history");
}
if (SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-posture-weak-queued"))
{
return TEXT("accepted weak retained drill-recovery-posture queued handoff history");
@ -278,14 +320,26 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("accepted strong drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued"))
{
return TEXT("accepted strong drill-recovery-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued"))
{
return TEXT("accepted strong retained drill-recovery-posture queued dashboard handoff");
@ -302,14 +356,26 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("accepted weak drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued"))
{
return TEXT("accepted weak drill-recovery-packet queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-packet follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-packet recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued"))
{
return TEXT("accepted weak retained drill-recovery-posture queued dashboard handoff");
@ -382,10 +448,18 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("successful retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong"))
{
return TEXT("successful retained drill-recovery-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak"))
{
return TEXT("weak retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak"))
{
return TEXT("weak retained drill-recovery-packet history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong"))
{
return TEXT("successful retained drill-recovery-posture history");

View file

@ -79,12 +79,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")
@ -96,21 +102,41 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended");
}
bool IsStrongMethodDrillRecoveryPacketDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended");
}
bool IsWeakMethodDrillRecoveryDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended");
}
bool IsWeakMethodDrillRecoveryPacketDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended");
}
bool IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource(
const FString& SourceLabel)
{
@ -131,12 +157,34 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
{
return SourceLabel == TEXT("coach-memory-method-drill-recovery-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak");
}
bool IsStrongMethodDrillRecoveryPacketCoachMemorySource(const FString& SourceLabel)
{
return SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued")
|| SourceLabel
== TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel
== TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong");
}
bool IsWeakMethodDrillRecoveryPacketCoachMemorySource(const FString& SourceLabel)
{
return SourceLabel == TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued")
|| SourceLabel
== TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel
== TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak");
}
EHyperTwistTrainingCoachHandoffKind DashboardHandoffKindFromSourceLabel(const FString& SourceLabel)
{
if (SourceLabel == TEXT("dashboard-handoff-queued")
@ -144,7 +192,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued"))
{
@ -155,7 +205,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up"))
{
@ -166,7 +218,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-deferred-first-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended"))
{
@ -176,6 +230,32 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
return EHyperTwistTrainingCoachHandoffKind::None;
}
FString CoachMemoryDashboardSourceLabelFromDashboardStartSource(const FString& SourceLabel)
{
if (SourceLabel.StartsWith(TEXT("coach-memory-dashboard-")))
{
return SourceLabel;
}
if (SourceLabel.StartsWith(TEXT("dashboard-handoff-")))
{
return FString(TEXT("coach-memory-dashboard-"))
+ SourceLabel.RightChop(FString(TEXT("dashboard-handoff-")).Len());
}
if (SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-queued"))
{
return TEXT("coach-memory-dashboard-deferred-overflow-queued");
}
if (SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-follow-up"))
{
return TEXT("coach-memory-dashboard-deferred-overflow-follow-up");
}
if (SourceLabel == TEXT("dashboard-guidance-outcome-deferred-overflow-recommended"))
{
return TEXT("coach-memory-dashboard-deferred-overflow-recommended");
}
return FString();
}
enum class EMethodDrillRecoveryMemoryBias : uint8
{
None,
@ -759,6 +839,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
1,
3)
: 0;
const bool bStrongMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
if (ExplicitQueuedHandoffSignal > 0
|| ExplicitFollowUpHandoffSignal > 0
|| ExplicitRecommendedHandoffSignal > 0)
@ -778,14 +870,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
: EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Queue;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Queue,
ExplicitDeferredOverflowQueuedHandoffSignal > 0,
ExplicitDeferredFirstQueuedHandoffSignal > 0,
ExplicitMethodDrillQueuedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued")
: (bWeakMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Queue,
ExplicitDeferredOverflowQueuedHandoffSignal > 0,
ExplicitDeferredFirstQueuedHandoffSignal > 0,
ExplicitMethodDrillQueuedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
else if (ExplicitFollowUpHandoffSignal >= ExplicitRecommendedHandoffSignal)
{
@ -801,14 +897,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
: EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::FollowUp;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::FollowUp,
ExplicitDeferredOverflowFollowUpHandoffSignal > 0,
ExplicitDeferredFirstFollowUpHandoffSignal > 0,
ExplicitMethodDrillFollowUpHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up")
: (bWeakMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::FollowUp,
ExplicitDeferredOverflowFollowUpHandoffSignal > 0,
ExplicitDeferredFirstFollowUpHandoffSignal > 0,
ExplicitMethodDrillFollowUpHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
else
{
@ -824,14 +924,18 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
: EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Recommended;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Recommended,
ExplicitDeferredOverflowRecommendedHandoffSignal > 0,
ExplicitDeferredFirstRecommendedHandoffSignal > 0,
ExplicitMethodDrillRecommendedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended")
: (bWeakMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Recommended,
ExplicitDeferredOverflowRecommendedHandoffSignal > 0,
ExplicitDeferredFirstRecommendedHandoffSignal > 0,
ExplicitMethodDrillRecommendedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
}
const int32 WeightedFollowUpRecoverySignal =
@ -918,6 +1022,21 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
}
}
if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketCoachMemorySource(
Snapshot.PreferredCoachHandoffSourceLabel))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-strong");
}
else if (Snapshot.PreferredQueueRecoveryAction
== EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred
&& HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryPacketCoachMemorySource(
Snapshot.PreferredCoachHandoffSourceLabel))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-weak");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& RetainedMethodDrillRecoveryPostureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
@ -6999,6 +7118,18 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
1,
3)
: 0;
const bool bStrongMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketFollowUpHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount > 0;
const bool bWeakMethodDrillRecoveryPacketRecommendedHandoff =
QueueExecutionSummary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount > 0;
if (ExplicitQueuedHandoffSignal > 0
|| ExplicitFollowUpHandoffSignal > 0
|| ExplicitRecommendedHandoffSignal > 0)
@ -7019,14 +7150,18 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Queue;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Queue,
ExplicitDeferredOverflowQueuedHandoffSignal > 0,
ExplicitDeferredFirstQueuedHandoffSignal > 0,
ExplicitMethodDrillQueuedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-queued")
: (bWeakMethodDrillRecoveryPacketQueuedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-queued")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Queue,
ExplicitDeferredOverflowQueuedHandoffSignal > 0,
ExplicitDeferredFirstQueuedHandoffSignal > 0,
ExplicitMethodDrillQueuedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
else if (ExplicitFollowUpHandoffSignal >= ExplicitRecommendedHandoffSignal)
{
@ -7043,14 +7178,18 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::FollowUp;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::FollowUp,
ExplicitDeferredOverflowFollowUpHandoffSignal > 0,
ExplicitDeferredFirstFollowUpHandoffSignal > 0,
ExplicitMethodDrillFollowUpHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-follow-up")
: (bWeakMethodDrillRecoveryPacketFollowUpHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-follow-up")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::FollowUp,
ExplicitDeferredOverflowFollowUpHandoffSignal > 0,
ExplicitDeferredFirstFollowUpHandoffSignal > 0,
ExplicitMethodDrillFollowUpHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
else
{
@ -7067,14 +7206,18 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
: HyperTwistTrainingRepositoryLibraryInternal::EMethodDrillRecoveryMemoryBias::None);
Snapshot.PreferredCoachHandoffKind = EHyperTwistTrainingCoachHandoffKind::Recommended;
Snapshot.PreferredCoachHandoffSourceLabel =
HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Recommended,
ExplicitDeferredOverflowRecommendedHandoffSignal > 0,
ExplicitDeferredFirstRecommendedHandoffSignal > 0,
ExplicitMethodDrillRecommendedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
);
bStrongMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-strong-recommended")
: (bWeakMethodDrillRecoveryPacketRecommendedHandoff
? TEXT("coach-memory-dashboard-method-drill-recovery-packet-weak-recommended")
: HyperTwistTrainingRepositoryLibraryInternal::CoachMemoryDashboardSourceLabel(
EHyperTwistTrainingCoachHandoffKind::Recommended,
ExplicitDeferredOverflowRecommendedHandoffSignal > 0,
ExplicitDeferredFirstRecommendedHandoffSignal > 0,
ExplicitMethodDrillRecommendedHandoffSignal > 0,
MethodDrillRecoveryMemoryBias,
bRetainedMethodDrillRecoveryPostureDriven
));
}
}
const int32 WeightedFollowUpRecoverySignal =
@ -7161,6 +7304,20 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
}
}
if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketCoachMemorySource(
Snapshot.PreferredCoachHandoffSourceLabel))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-strong");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred
&& HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryPacketCoachMemorySource(
Snapshot.PreferredCoachHandoffSourceLabel))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-weak");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& RetainedMethodDrillRecoveryPostureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
@ -9052,9 +9209,15 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
const bool bStrongMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
@ -9076,6 +9239,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillQueuedHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount += 1;
}
}
else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::FollowUp)
{
@ -9092,6 +9263,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillFollowUpHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1;
}
}
else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::Recommended)
{
@ -9108,6 +9287,14 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedMethodDrillRecommendedHandoffEventCount += 1;
}
if (bStrongMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1;
}
}
if (bStrongMethodDrillRecoveryDashboardHandoff)
{

View file

@ -3669,6 +3669,24 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedMethodDrillRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 CompletedMethodDrillQueuedHandoffEventCount = 0;