Explain drill-driven recovery in coach brief

This commit is contained in:
axiomlogicnexus 2026-04-29 04:00:00 +02:00
parent 0ce447e4ea
commit bcb69d171d
2 changed files with 68 additions and 39 deletions

View file

@ -36,6 +36,14 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| IsDeferredFirstContinuationSource(SourceLabel);
}
bool IsMethodDrillDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel.StartsWith(TEXT("coach-memory-dashboard-method-drill-"))
|| SourceLabel == TEXT("dashboard-handoff-method-drill-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recommended");
}
FString DescribeCoachHandoffKind(const EHyperTwistTrainingCoachHandoffKind HandoffKind)
{
switch (HandoffKind)
@ -1104,6 +1112,10 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
HyperTwistTrainingCoachLibraryInternal::IsDeferredOverflowDashboardHandoffSource(
CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
);
const bool bMethodDrillDashboardHandoff =
HyperTwistTrainingCoachLibraryInternal::IsMethodDrillDashboardHandoffSource(
CoachMemorySnapshot.PreferredCoachHandoffSourceLabel
);
const bool bExplicitDashboardHandoffPreference =
CoachMemorySnapshot.PreferredCoachHandoffKind != EHyperTwistTrainingCoachHandoffKind::None;
const bool bQueueRecoverySource =
@ -1121,6 +1133,10 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
const bool bLaunchQueueRecovery =
CoachMemorySnapshot.PreferredQueueRecoveryAction
== EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery;
const bool bMethodDrillRecoveryActionSource =
HyperTwistTrainingCoachLibraryInternal::IsMethodDrillDashboardHandoffSource(
CoachMemorySnapshot.PreferredQueueRecoveryActionSourceLabel
);
const float Score = 66.0f
+ FMath::Min(CoachMemorySnapshot.ScheduleExecutionPressureScore * 0.25f, 20.0f)
+ (bArchiveAware ? 5.0f : 0.0f)
@ -1128,7 +1144,8 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
+ (bRepeatManualReschedule ? 5.0f : 0.0f)
+ (CoachMemorySnapshot.bHasQueueExecutionCompletionGap ? 4.0f : 0.0f)
+ (bQueueRecoverySource ? 2.0f : 0.0f)
+ (bExplicitDashboardHandoffPreference ? 2.0f : 0.0f);
+ (bExplicitDashboardHandoffPreference ? 2.0f : 0.0f)
+ (bMethodDrillRecoveryActionSource ? 2.0f : 0.0f);
const EHyperTwistCoachFocusLane FocusLane = bArchiveAware
? EHyperTwistCoachFocusLane::Stability
@ -1136,45 +1153,65 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
FString Headline;
if (bDashboardQueuedHandoff)
{
Headline = bDeferredOverflowDashboardHandoff
Headline = bMethodDrillDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted drill-driven queued handoffs keep drill-tipped queued recovery work active")
: TEXT("Accepted drill-driven queued handoffs favor a queue-first drill recovery launch"))
: (bDeferredOverflowDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted deferred-overflow queued handoffs favor promoting narrowed queued work first")
: TEXT("Accepted deferred-overflow queued handoffs favor a queue-first narrowed recovery launch"))
: (bPromoteQueueRecovery
? TEXT("Accepted queued handoffs favor promoting queued work first")
: TEXT("Accepted queued handoffs favor a queue-first recovery launch"));
: TEXT("Accepted queued handoffs favor a queue-first recovery launch")));
}
else if (bDashboardFollowUpHandoff)
{
Headline = bDeferredOverflowDashboardHandoff
Headline = bMethodDrillDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted drill-driven follow-up handoffs keep the drill-derived follow-up lane active")
: TEXT("Accepted drill-driven follow-up handoffs favor recovering the drill-derived follow-up lane next"))
: (bDeferredOverflowDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted deferred-overflow follow-up handoffs keep narrowed follow-up work active")
: TEXT("Accepted deferred-overflow follow-up handoffs favor recovering narrowed follow-up work next"))
: (bPromoteQueueRecovery
? TEXT("Accepted follow-up handoffs keep the deferred follow-up lane active")
: TEXT("Accepted follow-up handoffs favor recovering the follow-up lane next"));
: TEXT("Accepted follow-up handoffs favor recovering the follow-up lane next")));
}
else if (bDashboardRecommendedHandoff)
{
Headline = bDeferredOverflowDashboardHandoff
Headline = bMethodDrillDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted drill-driven recommended handoffs keep drill-tipped recommended recovery work active")
: TEXT("Accepted drill-driven recommended handoffs favor restoring drill-tipped recommended work next"))
: (bDeferredOverflowDashboardHandoff
? (bPromoteQueueRecovery
? TEXT("Accepted deferred-overflow recommended handoffs keep narrowed recommended work active")
: TEXT("Accepted deferred-overflow recommended handoffs favor restoring narrowed recommended work next"))
: (bPromoteQueueRecovery
? TEXT("Accepted recommended handoffs keep the deferred recommended lane active")
: TEXT("Accepted recommended handoffs favor restoring the recommended lane next"));
: TEXT("Accepted recommended handoffs favor restoring the recommended lane next")));
}
else if (bQueueRecoveryFollowUp)
{
Headline = bPromoteQueueRecovery
? TEXT("Promote the deferred follow-up lane back into active queue flow")
: TEXT("Recover the deferred follow-up lane before the queue drifts further");
Headline = bMethodDrillRecoveryActionSource
? (bPromoteQueueRecovery
? TEXT("Promote the deferred drill-derived follow-up lane back into active queue flow")
: TEXT("Recover the drill-derived follow-up lane before the queue drifts further"))
: (bPromoteQueueRecovery
? TEXT("Promote the deferred follow-up lane back into active queue flow")
: TEXT("Recover the deferred follow-up lane before the queue drifts further"));
}
else if (bQueueRecoveryRecommended)
{
Headline = bPromoteQueueRecovery
? TEXT("Promote the deferred recommended lane back into the active queue")
: TEXT("Recover the deferred recommended lane and restore queue cadence");
Headline = bMethodDrillRecoveryActionSource
? (bPromoteQueueRecovery
? TEXT("Promote the deferred drill-tipped recommended lane back into the active queue")
: TEXT("Recover the drill-tipped recommended lane and restore queue cadence"))
: (bPromoteQueueRecovery
? TEXT("Promote the deferred recommended lane back into the active queue")
: TEXT("Recover the deferred recommended lane and restore queue cadence"));
}
else if (bBlockedFollowUp)
{
@ -1254,7 +1291,7 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
Score,
Headline,
FString::Printf(
TEXT("deferred=%d, manual=%d, archiveAware=%d, blockedFollowUp=%d, completionGap=%d, deferralReason=%s, recoverySource=%s, recoveryAction=%s, recoveryActionSource=%s, handoffPreference=%s, handoffSource=%s, deferredOverflowHandoff=%d"),
TEXT("deferred=%d, manual=%d, archiveAware=%d, blockedFollowUp=%d, completionGap=%d, deferralReason=%s, recoverySource=%s, recoveryAction=%s, recoveryActionSource=%s, handoffPreference=%s, handoffSource=%s, deferredOverflowHandoff=%d, methodDrillHandoff=%d, methodDrillRecoverySource=%d"),
CoachMemorySnapshot.ScheduleDeferredEventCount,
CoachMemorySnapshot.ScheduleManualRescheduleEventCount,
CoachMemorySnapshot.ScheduleArchiveAwareEventCount,
@ -1266,7 +1303,9 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
*RecoveryActionSourceLabel,
*HandoffPreferenceLabel,
*HandoffSourceLabel,
bTightenedDeferredOverflowHandoff ? 1 : 0),
bTightenedDeferredOverflowHandoff ? 1 : 0,
bMethodDrillDashboardHandoff ? 1 : 0,
bMethodDrillRecoveryActionSource ? 1 : 0),
bTightenedDeferredOverflowHandoff
? (CoachMemorySnapshot.DominantCoachSuggestedMode
== EHyperTwistTrainingDeliveryMode::RecognitionAssisted

View file

@ -587,7 +587,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
+ static_cast<float>(ExplicitQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredOverflowQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredFirstQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredFirstFollowUpHandoffSignal) * 0.5f;
+ static_cast<float>(ExplicitDeferredFirstFollowUpHandoffSignal) * 0.5f
+ static_cast<float>(ExplicitMethodDrillQueuedHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillFollowUpHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillRecommendedHandoffSignal) * 0.5f;
if (PromoteRecoveryActionPressure > 0.0f || LaunchRecoveryActionPressure > 0.0f)
{
if (PromoteRecoveryActionPressure > LaunchRecoveryActionPressure)
@ -601,17 +604,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
Snapshot.PreferredQueueRecoveryAction =
EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery;
Snapshot.PreferredQueueRecoveryActionSourceLabel =
ExplicitQueuedHandoffSignal > 0
? (ExplicitDeferredFirstQueuedHandoffSignal > 0
? TEXT("dashboard-handoff-deferred-first-queued")
: (ExplicitDeferredOverflowQueuedHandoffSignal > 0
? TEXT("dashboard-guidance-outcome-deferred-overflow-queued")
: TEXT("dashboard-handoff-queued")))
: (ExplicitDeferredFirstFollowUpHandoffSignal > 0
? TEXT("dashboard-handoff-deferred-first-follow-up")
: (ExplicitFollowUpHandoffSignal > 0
? TEXT("dashboard-handoff-follow-up")
: TEXT("queue-history-launch-pressure")));
!Snapshot.PreferredCoachHandoffSourceLabel.IsEmpty()
? Snapshot.PreferredCoachHandoffSourceLabel
: TEXT("queue-history-launch-pressure");
}
else
{
@ -6545,7 +6540,10 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
+ static_cast<float>(ExplicitQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredOverflowQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredFirstQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredFirstFollowUpHandoffSignal) * 0.5f;
+ static_cast<float>(ExplicitDeferredFirstFollowUpHandoffSignal) * 0.5f
+ static_cast<float>(ExplicitMethodDrillQueuedHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillFollowUpHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillRecommendedHandoffSignal) * 0.5f;
if (PromoteRecoveryActionPressure > 0.0f || LaunchRecoveryActionPressure > 0.0f)
{
if (PromoteRecoveryActionPressure > LaunchRecoveryActionPressure)
@ -6559,17 +6557,9 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
Snapshot.PreferredQueueRecoveryAction =
EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery;
Snapshot.PreferredQueueRecoveryActionSourceLabel =
ExplicitQueuedHandoffSignal > 0
? (ExplicitDeferredFirstQueuedHandoffSignal > 0
? TEXT("dashboard-handoff-deferred-first-queued")
: (ExplicitDeferredOverflowQueuedHandoffSignal > 0
? TEXT("dashboard-guidance-outcome-deferred-overflow-queued")
: TEXT("dashboard-handoff-queued")))
: (ExplicitDeferredFirstFollowUpHandoffSignal > 0
? TEXT("dashboard-handoff-deferred-first-follow-up")
: (ExplicitFollowUpHandoffSignal > 0
? TEXT("dashboard-handoff-follow-up")
: TEXT("queue-history-launch-pressure")));
!Snapshot.PreferredCoachHandoffSourceLabel.IsEmpty()
? Snapshot.PreferredCoachHandoffSourceLabel
: TEXT("queue-history-launch-pressure");
}
else
{