Learn reliable drill recovery plan trust in dashboard history

This commit is contained in:
axiomlogicnexus 2026-04-29 19:42:10 +02:00
parent f6be5c54ae
commit 6a3f8be08b
2 changed files with 268 additions and 35 deletions

View file

@ -67,6 +67,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
int32 WeakRetainedMethodDrillQueueRecommendationCount = 0;
int32 WeakRetainedMethodDrillFollowUpRecommendationCount = 0;
int32 WeakRetainedMethodDrillRecommendedRecommendationCount = 0;
int32 ReliableTrustedTightQueueAcceptedDeltaCount = 0;
int32 ReliableTrustedTightFollowUpAcceptedDeltaCount = 0;
int32 ReliableTrustedTightRecommendedAcceptedDeltaCount = 0;
int32 ReliableTrustedBroadQueueAcceptedDeltaCount = 0;
int32 ReliableTrustedBroadFollowUpAcceptedDeltaCount = 0;
int32 ReliableTrustedBroadRecommendedAcceptedDeltaCount = 0;
int32 ReliableTrustedTightQueueRecommendationCount = 0;
int32 ReliableTrustedTightFollowUpRecommendationCount = 0;
int32 ReliableTrustedTightRecommendedRecommendationCount = 0;
int32 ReliableTrustedBroadQueueRecommendationCount = 0;
int32 ReliableTrustedBroadFollowUpRecommendationCount = 0;
int32 ReliableTrustedBroadRecommendedRecommendationCount = 0;
int32 QueueScore = 0;
int32 FollowUpScore = 0;
int32 RecommendedScore = 0;
@ -80,6 +92,8 @@ namespace HyperTwistCoachDashboardWidgetInternal
bool bHasMethodDrillRecommendationSignal = false;
bool bHasStrongRetainedMethodDrillPostureSignal = false;
bool bHasWeakRetainedMethodDrillPostureSignal = false;
bool bHasReliableTrustedTightPlanHistorySignal = false;
bool bHasReliableTrustedBroadPlanHistorySignal = false;
bool bHasSignal = false;
};
@ -1303,18 +1317,54 @@ namespace HyperTwistCoachDashboardWidgetInternal
Bias.QueueAcceptedDeltaCount += QueuedDelta;
Bias.QueueScore += QueuedDelta * 3;
Bias.bHasAcceptedSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
Bias.ReliableTrustedTightQueueAcceptedDeltaCount += QueuedDelta;
Bias.QueueScore += QueuedDelta * 2;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
Bias.ReliableTrustedBroadQueueAcceptedDeltaCount += QueuedDelta;
++Bias.QueueScore;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
}
if (FollowUpDelta > 0)
{
Bias.FollowUpAcceptedDeltaCount += FollowUpDelta;
Bias.FollowUpScore += FollowUpDelta * 3;
Bias.bHasAcceptedSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
Bias.ReliableTrustedTightFollowUpAcceptedDeltaCount += FollowUpDelta;
Bias.FollowUpScore += FollowUpDelta * 2;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
Bias.ReliableTrustedBroadFollowUpAcceptedDeltaCount += FollowUpDelta;
++Bias.FollowUpScore;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
}
if (RecommendedDelta > 0)
{
Bias.RecommendedAcceptedDeltaCount += RecommendedDelta;
Bias.RecommendedScore += RecommendedDelta * 3;
Bias.bHasAcceptedSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
Bias.ReliableTrustedTightRecommendedAcceptedDeltaCount += RecommendedDelta;
++Bias.RecommendedScore;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
Bias.ReliableTrustedBroadRecommendedAcceptedDeltaCount += RecommendedDelta;
Bias.RecommendedScore += RecommendedDelta * 2;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
}
if (DeferredOverflowQueuedDelta > 0)
{
@ -1402,6 +1452,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
++Bias.QueueRecommendationCount;
++Bias.QueueScore;
Bias.bHasRecommendationSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
++Bias.ReliableTrustedTightQueueRecommendationCount;
Bias.QueueScore += 2;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
++Bias.ReliableTrustedBroadQueueRecommendationCount;
++Bias.QueueScore;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
if (Entry.bUsedMethodDrillWeighting)
{
++Bias.MethodDrillQueueRecommendationCount;
@ -1432,6 +1494,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
++Bias.FollowUpRecommendationCount;
++Bias.FollowUpScore;
Bias.bHasRecommendationSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
++Bias.ReliableTrustedTightFollowUpRecommendationCount;
Bias.FollowUpScore += 2;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
++Bias.ReliableTrustedBroadFollowUpRecommendationCount;
++Bias.FollowUpScore;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
if (Entry.bUsedMethodDrillWeighting)
{
++Bias.MethodDrillFollowUpRecommendationCount;
@ -1462,6 +1536,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
++Bias.RecommendedRecommendationCount;
++Bias.RecommendedScore;
Bias.bHasRecommendationSignal = true;
if (Entry.bUsedReliableTrustedTightStructurePlanHistory)
{
++Bias.ReliableTrustedTightRecommendedRecommendationCount;
++Bias.RecommendedScore;
Bias.bHasReliableTrustedTightPlanHistorySignal = true;
}
if (Entry.bUsedReliableTrustedBroadStructurePlanHistory)
{
++Bias.ReliableTrustedBroadRecommendedRecommendationCount;
Bias.RecommendedScore += 2;
Bias.bHasReliableTrustedBroadPlanHistorySignal = true;
}
if (Entry.bUsedMethodDrillWeighting)
{
++Bias.MethodDrillRecommendedRecommendationCount;
@ -1945,7 +2031,9 @@ namespace HyperTwistCoachDashboardWidgetInternal
if (Outcome.IsStructurallyValid()
&& (Outcome.bUsedMethodDrillHandoffSignal
|| Outcome.bUsedNarrowMethodDrillPacketStructureRecovery
|| Outcome.bUsedBroadMethodDrillPacketStructureRecovery))
|| Outcome.bUsedBroadMethodDrillPacketStructureRecovery
|| Outcome.bUsedReliableTrustedTightStructurePlanRecovery
|| Outcome.bUsedReliableTrustedBroadStructurePlanRecovery))
{
OutIndices.Add(Index);
}
@ -2239,6 +2327,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanComparisonSummary(
MethodDrillRecoveryMemoryHistoryEntries
);
const int32 MethodDrillRecoveryPlanTightTrust =
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanTightTrust(
MethodDrillRecoveryPlanComparisonSummary);
const int32 MethodDrillRecoveryPlanBroadTrust =
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanBroadTrust(
MethodDrillRecoveryPlanComparisonSummary);
const bool bUseTrustedTightMethodDrillRecoveryStructurePlan =
bUseTightMethodDrillRecoveryStructurePlan
&& (HyperTwistCoachDashboardWidgetInternal::IsTrustedTightMethodDrillRecoveryPlanSourceLabel(
@ -2251,6 +2345,20 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|| HyperTwistCoachDashboardWidgetInternal::PrefersMethodDrillRecoveryPlanBroadRedirect(
MethodDrillRecoveryPlanComparisonSummary));
const bool bUseReliableTrustedTightMethodDrillRecoveryStructurePlan =
bUseTrustedTightMethodDrillRecoveryStructurePlan
&& (HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|| (MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanSourceCount > 0
&& MethodDrillRecoveryPlanTightTrust > 0
&& MethodDrillRecoveryPlanTightTrust >= MethodDrillRecoveryPlanBroadTrust));
const bool bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan =
bUseTrustedBroadMethodDrillRecoveryStructurePlan
&& (HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|| (MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanSourceCount > 0
&& MethodDrillRecoveryPlanBroadTrust > 0
&& MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust));
auto StartRunAndRefresh = [this](const FHyperTwistTrainingRunState& RunState)
{
@ -2274,7 +2382,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
bUseNarrowMethodDrillPacketStructureRecovery,
bUseBroadMethodDrillPacketStructureRecovery,
bUseStrongRetainedMethodDrillRecoveryPosture,
bUseWeakRetainedMethodDrillRecoveryPosture
bUseWeakRetainedMethodDrillRecoveryPosture,
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan,
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
](
const TCHAR* AppliedActionLabel,
const FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind ActionKind,
@ -2303,6 +2413,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
bUseWeakRetainedMethodDrillRecoveryPosture
&& ActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan
&& ActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery,
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
&& ActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
bSucceeded
);
UpdateDashboardPresentation();
@ -6499,6 +6615,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
++Weighting.WeakRetainedMethodDrillPromoteReducedCount;
}
}
if (Outcome.bUsedReliableTrustedBroadStructurePlanRecovery)
{
++Weighting.ReliableTrustedBroadPlanPromoteCount;
Weighting.bHasReliableTrustedPlanOutcomeSignal = true;
if (Outcome.bReducedFriction)
{
++Weighting.ReliableTrustedBroadPlanPromoteReducedCount;
}
}
break;
case FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery:
++Weighting.LaunchCount;
@ -6550,6 +6675,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
++Weighting.StrongRetainedMethodDrillLaunchReducedCount;
}
}
if (Outcome.bUsedReliableTrustedTightStructurePlanRecovery)
{
++Weighting.ReliableTrustedTightPlanLaunchCount;
Weighting.bHasReliableTrustedPlanOutcomeSignal = true;
if (Outcome.bReducedFriction)
{
++Weighting.ReliableTrustedTightPlanLaunchReducedCount;
}
}
break;
default:
break;
@ -6800,6 +6934,18 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
Weighting.BroadMethodDrillPacketStructurePromoteCount
- Weighting.BroadMethodDrillPacketStructurePromoteReducedCount,
0)) * 0.5f;
const float ReliableTrustedTightPlanLaunchScore =
static_cast<float>(Weighting.ReliableTrustedTightPlanLaunchReducedCount) * 3.0f
+ static_cast<float>(FMath::Max(
Weighting.ReliableTrustedTightPlanLaunchCount
- Weighting.ReliableTrustedTightPlanLaunchReducedCount,
0)) * 0.5f;
const float ReliableTrustedBroadPlanPromoteScore =
static_cast<float>(Weighting.ReliableTrustedBroadPlanPromoteReducedCount) * 3.0f
+ static_cast<float>(FMath::Max(
Weighting.ReliableTrustedBroadPlanPromoteCount
- Weighting.ReliableTrustedBroadPlanPromoteReducedCount,
0)) * 0.5f;
const float AdjustedPromoteScore =
PromoteScore
+ (Weighting.bHasDeferredFirstSignal ? DeferredFirstPromoteScore * 1.5f : 0.0f)
@ -6807,6 +6953,9 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
+ (Weighting.BroadMethodDrillPacketStructurePromoteCount > 0
? BroadMethodDrillPacketStructurePromoteScore * 1.2f
: 0.0f)
+ (Weighting.ReliableTrustedBroadPlanPromoteCount > 0
? ReliableTrustedBroadPlanPromoteScore * 1.25f
: 0.0f)
+ (Weighting.WeakRetainedMethodDrillPromoteCount > 0
? WeakRetainedMethodDrillPromoteScore * 1.1f
: 0.0f)
@ -6818,6 +6967,9 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
+ (Weighting.NarrowMethodDrillPacketStructureLaunchCount > 0
? NarrowMethodDrillPacketStructureLaunchScore * 1.2f
: 0.0f)
+ (Weighting.ReliableTrustedTightPlanLaunchCount > 0
? ReliableTrustedTightPlanLaunchScore * 1.25f
: 0.0f)
+ (Weighting.StrongRetainedMethodDrillLaunchCount > 0
? StrongRetainedMethodDrillLaunchScore * 1.1f
: 0.0f)
@ -7161,6 +7313,8 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
const bool bUsedBroadMethodDrillPacketStructureRecovery,
const bool bUsedStrongRetainedMethodDrillRecoveryPosture,
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
const bool bUsedReliableTrustedTightStructurePlanRecovery,
const bool bUsedReliableTrustedBroadStructurePlanRecovery,
const bool bSucceeded)
{
QueueRecoveryOutcome.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
@ -7205,6 +7359,10 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
bUsedStrongRetainedMethodDrillRecoveryPosture;
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture =
bUsedWeakRetainedMethodDrillRecoveryPosture;
QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery =
bUsedReliableTrustedTightStructurePlanRecovery;
QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery =
bUsedReliableTrustedBroadStructurePlanRecovery;
bHasQueueRecoveryOutcome = QueueRecoveryOutcome.IsStructurallyValid();
if (bHasQueueRecoveryOutcome)
{
@ -7232,7 +7390,9 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
const bool bUsedDeferredFirstSuppressionSignal,
const bool bUsedMethodDrillWeighting,
const bool bUsedStrongRetainedMethodDrillRecoveryPosture,
const bool bUsedWeakRetainedMethodDrillRecoveryPosture)
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
const bool bUsedReliableTrustedTightStructurePlanHistory,
const bool bUsedReliableTrustedBroadStructurePlanHistory)
{
FHyperTwistCoachDashboardHandoffHistoryEntry Entry;
Entry.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
@ -7275,6 +7435,10 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
bUsedStrongRetainedMethodDrillRecoveryPosture;
Entry.bUsedWeakRetainedMethodDrillRecoveryPosture =
bUsedWeakRetainedMethodDrillRecoveryPosture;
Entry.bUsedReliableTrustedTightStructurePlanHistory =
bUsedReliableTrustedTightStructurePlanHistory;
Entry.bUsedReliableTrustedBroadStructurePlanHistory =
bUsedReliableTrustedBroadStructurePlanHistory;
if (!Entry.IsStructurallyValid())
{
return;
@ -7327,7 +7491,11 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
&& HandoffHistoryEntries.Last().bUsedStrongRetainedMethodDrillRecoveryPosture
== Entry.bUsedStrongRetainedMethodDrillRecoveryPosture
&& HandoffHistoryEntries.Last().bUsedWeakRetainedMethodDrillRecoveryPosture
== Entry.bUsedWeakRetainedMethodDrillRecoveryPosture;
== Entry.bUsedWeakRetainedMethodDrillRecoveryPosture
&& HandoffHistoryEntries.Last().bUsedReliableTrustedTightStructurePlanHistory
== Entry.bUsedReliableTrustedTightStructurePlanHistory
&& HandoffHistoryEntries.Last().bUsedReliableTrustedBroadStructurePlanHistory
== Entry.bUsedReliableTrustedBroadStructurePlanHistory;
if (bMatchesLastEntry)
{
return;
@ -9505,6 +9673,24 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
CachedCoachPanelState.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
CachedCoachPanelState.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore
);
CoachHandoffRecommendationDetailLine += FString::Printf(
TEXT(" | reliable trusted tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"),
HandoffHistoryBias.ReliableTrustedTightQueueAcceptedDeltaCount,
HandoffHistoryBias.ReliableTrustedTightFollowUpAcceptedDeltaCount,
HandoffHistoryBias.ReliableTrustedTightRecommendedAcceptedDeltaCount,
HandoffHistoryBias.ReliableTrustedBroadQueueAcceptedDeltaCount,
HandoffHistoryBias.ReliableTrustedBroadFollowUpAcceptedDeltaCount,
HandoffHistoryBias.ReliableTrustedBroadRecommendedAcceptedDeltaCount
);
CoachHandoffRecommendationDetailLine += FString::Printf(
TEXT(" | reliable trusted tight recommendation q/f/r %d/%d/%d, broad recommendation q/f/r %d/%d/%d"),
HandoffHistoryBias.ReliableTrustedTightQueueRecommendationCount,
HandoffHistoryBias.ReliableTrustedTightFollowUpRecommendationCount,
HandoffHistoryBias.ReliableTrustedTightRecommendedRecommendationCount,
HandoffHistoryBias.ReliableTrustedBroadQueueRecommendationCount,
HandoffHistoryBias.ReliableTrustedBroadFollowUpRecommendationCount,
HandoffHistoryBias.ReliableTrustedBroadRecommendedRecommendationCount
);
CoachHandoffRecommendationDetailLine += FString::Printf(
TEXT(" | strong posture q/f/r %d/%d/%d, weak posture q/f/r %d/%d/%d"),
HandoffHistoryBias.StrongRetainedMethodDrillQueueAcceptedDeltaCount,
@ -9546,6 +9732,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
CoachHandoffRecommendationDetailLine += MethodDrillUpstreamMemoryLine;
}
}
const bool bHandoffRecommendationUsedReliableTrustedTightPlanHistory =
bHandoffRecommendationUsedPlanComparisonHistory
&& bPlanComparisonPrefersTightContinuation
&& bHasReliableTrustedTightPlanComparisonHistory;
const bool bHandoffRecommendationUsedReliableTrustedBroadPlanHistory =
bHandoffRecommendationUsedPlanComparisonHistory
&& bPlanComparisonPrefersBroadRedirect
&& bHasReliableTrustedBroadPlanComparisonHistory;
RecordCoachHandoffHistorySnapshot(
HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind(
HandoffRecommendationKind),
@ -9560,7 +9754,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
bHandoffRecommendationUsedDeferredFirstSuppressionSignal,
bHandoffRecommendationUsedMethodDrillWeighting,
bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture,
bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture
bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture,
bHandoffRecommendationUsedReliableTrustedTightPlanHistory,
bHandoffRecommendationUsedReliableTrustedBroadPlanHistory
);
FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty()
? TEXT("Start Queue")
@ -9593,7 +9789,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
const FString HandoffHistoryStatusLine =
SelectedHandoffHistoryEntry != nullptr
? FString::Printf(
TEXT("Handoff history: %d entries | selected %d/%d | Recommendation: %s | Stance: %s | Recorded: %s"),
TEXT("Handoff history: %d entries | selected %d/%d | Recommendation: %s | Stance: %s | Reliable plan: %s | Recorded: %s"),
HandoffHistoryEntries.Num(),
SelectedHandoffHistoryIndex + 1,
HandoffHistoryEntries.Num(),
@ -9603,13 +9799,18 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
? TEXT("trusted tight continuation")
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
? TEXT("trusted broad redirect")
: TEXT("none")),
*SelectedHandoffHistoryEntry->RecordedAtUtc
)
: TEXT("Handoff history: no retained handoff-pattern shifts recorded yet.");
const FString HandoffHistoryDetailLine =
SelectedHandoffHistoryEntry != nullptr
? FString::Printf(
TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | deferred-first suppression recommendation used: %s | drill weighting used: %s | retained posture: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"),
TEXT("Accepted queued/follow-up/recommended: %d/%d/%d | deferred-overflow queued/follow-up/recommended: %d/%d/%d | drill-driven queued/follow-up/recommended: %d/%d/%d | deferred-first suppression recommendation used: %s | drill weighting used: %s | retained posture: %s | reliable trusted plan: %s | queue source: %s | preferred lane: %s | memory source: %s | recovery action: %s | recovery source: %s | closure continuation bias %d | closure suppression bias %d | readiness queue/follow-up/recommended: %s/%s/%s || %s"),
SelectedHandoffHistoryEntry->AcceptedQueuedHandoffCount,
SelectedHandoffHistoryEntry->AcceptedFollowUpHandoffCount,
SelectedHandoffHistoryEntry->AcceptedRecommendedHandoffCount,
@ -9624,6 +9825,11 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
? TEXT("trusted tight continuation")
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
? TEXT("trusted broad redirect")
: TEXT("none")),
SelectedHandoffHistoryEntry->QueueSourceLabel.IsEmpty()
? TEXT("n/a")
: *SelectedHandoffHistoryEntry->QueueSourceLabel,
@ -9856,31 +10062,36 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
>= MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias
? TEXT(" | Retained drill-recovery packet history is reinforcing launch recovery.")
: TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery."))
: (QueueRecoveryWeighting.bHasReliableTrustedPlanOutcomeSignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Prior reliable trusted tight plan recovery outcomes are reinforcing launch recovery.")
: TEXT(" | Prior reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery."))
: (bQueueRecoveryUsedPlanComparisonHistory
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? (bHasReliableTrustedPlanComparisonHistory
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.")
: TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery."))
: (bHasReliableTrustedPlanComparisonHistory
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.")
: TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery.")))
: (QueueRecoveryWeighting.bHasMethodDrillMemorySignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.")
: TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery."))
: (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.")
: TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery."))
: (QueueRecoveryWeighting.bHasMethodDrillSignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.")
: TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds."))
: TEXT("")))));
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? (bHasReliableTrustedPlanComparisonHistory
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.")
: TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery."))
: (bHasReliableTrustedPlanComparisonHistory
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.")
: TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery.")))
: (QueueRecoveryWeighting.bHasMethodDrillMemorySignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Upstream drill-driven recovery memory is reinforcing launch recovery.")
: TEXT(" | Upstream drill-driven recovery memory is reinforcing promote-deferred recovery."))
: (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Prior drill-weighted recovery outcomes are reinforcing launch recovery.")
: TEXT(" | Prior drill-weighted recovery outcomes are reinforcing promote-deferred recovery."))
: (QueueRecoveryWeighting.bHasMethodDrillSignal
? (QueueRecoveryWeighting.PreferredActionKind
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery
? TEXT(" | Drill-driven accepted handoff history is reinforcing launch recovery.")
: TEXT(" | Drill-driven accepted handoff history is present, but promote-deferred recovery still holds."))
: TEXT(""))))));
const bool bHasQueueRecoveryFriction =
CachedCoachSchedulePolicySummary.bHasBlockedFollowUpDeferrals
|| CachedCoachSchedulePolicySummary.bHasArchiveAwareDeferrals
@ -9939,7 +10150,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
: *QueueDeferredFirstSuppressionSignal->Detail)
: TEXT("");
FString QueueRecoveryDetailLine = FString::Printf(
TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"),
TEXT("Deferred events %d | Promoted %d | Manual %d | Pressure %.2f | Dominant reason: %s | Follow-up deferrals: %s | Archive-aware deferrals: %s | Completion gap: %s | Upstream action source: %s%s || Learned promote %d/%d reduced, %d failed, avg delta %.2f | launch %d/%d reduced, %d failed, avg delta %.2f | deferred-first promote/launch reduced %d/%d over %d/%d | drill-driven outcome promote/launch reduced %d/%d over %d/%d | reliable trusted outcome promote/launch reduced %d/%d over %d/%d | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | reliable trusted plan bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | plan-source tight aligned/diverged %d/%d | broad aligned/diverged %d/%d | reliable trusted tight aligned/diverged %d/%d | reliable trusted broad aligned/diverged %d/%d | plan preferred: %s | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"),
CachedCoachQueueExecutionSummary.DeferredEventCount,
CachedCoachQueueExecutionSummary.PromotedEventCount,
CachedCoachQueueExecutionSummary.ManualRescheduleEventCount,
@ -9968,6 +10179,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
QueueRecoveryWeighting.MethodDrillLaunchReducedCount,
QueueRecoveryWeighting.MethodDrillPromoteCount,
QueueRecoveryWeighting.MethodDrillLaunchCount,
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteReducedCount,
QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchReducedCount,
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteCount,
QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchCount,
QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchReducedCount,
QueueRecoveryWeighting.StrongRetainedMethodDrillLaunchCount,
QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteReducedCount,
@ -10124,7 +10339,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
const FString QueueRecoveryOutcomeDetailLine = !bHasQueueRecoveryOutcome || !QueueRecoveryOutcome.IsStructurallyValid()
? TEXT("Outcome detail: apply a queue-recovery action to compare before/after pressure, deferred count, blocked follow-up state, and completion-gap state.")
: FString::Printf(
TEXT("Recorded: %s | Pressure %.2f -> %.2f | Deferred %d -> %d | Blocked follow-up %s -> %s | Outstanding deferred %s -> %s | Completion gap %s -> %s | deferred-first weighted: %s | drill-weighted: %s | packet-structure recovery: %s | retained posture: %s"),
TEXT("Recorded: %s | Pressure %.2f -> %.2f | Deferred %d -> %d | Blocked follow-up %s -> %s | Outstanding deferred %s -> %s | Completion gap %s -> %s | deferred-first weighted: %s | drill-weighted: %s | packet-structure recovery: %s | retained posture: %s | reliable trusted plan recovery: %s"),
*QueueRecoveryOutcome.RecordedAtUtc,
QueueRecoveryOutcome.BeforePressureScore,
QueueRecoveryOutcome.AfterPressureScore,
@ -10145,7 +10360,12 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
: TEXT("none")),
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
QueueRecoveryOutcome.bUsedStrongRetainedMethodDrillRecoveryPosture,
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture)
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture),
QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery
? TEXT("trusted tight continuation")
: (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery
? TEXT("trusted broad redirect")
: TEXT("none"))
);
TArray<int32> MethodDrillRecoveryHistoryIndices;
HyperTwistCoachDashboardWidgetInternal::CollectMethodDrillRecoveryOutcomeIndices(

View file

@ -153,6 +153,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryOutcome
bool bUsedBroadMethodDrillPacketStructureRecovery = false;
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
bool bUsedReliableTrustedTightStructurePlanRecovery = false;
bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
bool IsStructurallyValid() const
{
@ -193,6 +195,10 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
int32 MethodDrillUpstreamWeakCount = 0;
int32 ReliableTrustedTightPlanHistoryCount = 0;
int32 ReliableTrustedBroadPlanHistoryCount = 0;
int32 ReliableTrustedTightPlanLaunchCount = 0;
int32 ReliableTrustedTightPlanLaunchReducedCount = 0;
int32 ReliableTrustedBroadPlanPromoteCount = 0;
int32 ReliableTrustedBroadPlanPromoteReducedCount = 0;
int32 ReliableTrustedTightPlanBiasCount = 0;
int32 ReliableTrustedBroadPlanBiasCount = 0;
float PromoteAveragePressureDelta = 0.0f;
@ -208,6 +214,7 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
bool bHasMethodDrillOutcomeSignal = false;
bool bHasMethodDrillMemorySignal = false;
bool bHasReliableTrustedPlanSignal = false;
bool bHasReliableTrustedPlanOutcomeSignal = false;
bool IsStructurallyValid() const
{
@ -299,6 +306,8 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry
bool bUsedMethodDrillWeighting = false;
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
bool bUsedReliableTrustedTightStructurePlanHistory = false;
bool bUsedReliableTrustedBroadStructurePlanHistory = false;
bool IsStructurallyValid() const
{
@ -1429,6 +1438,8 @@ private:
bool bUsedBroadMethodDrillPacketStructureRecovery,
bool bUsedStrongRetainedMethodDrillRecoveryPosture,
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
bool bUsedReliableTrustedTightStructurePlanRecovery,
bool bUsedReliableTrustedBroadStructurePlanRecovery,
bool bSucceeded
);
void RecordCoachHandoffHistorySnapshot(
@ -1444,7 +1455,9 @@ private:
bool bUsedDeferredFirstSuppressionSignal,
bool bUsedMethodDrillWeighting,
bool bUsedStrongRetainedMethodDrillRecoveryPosture,
bool bUsedWeakRetainedMethodDrillRecoveryPosture
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
bool bUsedReliableTrustedTightStructurePlanHistory,
bool bUsedReliableTrustedBroadStructurePlanHistory
);
void RecordQueueSuppressionSnapshot();
void RecordClosureRecoverySnapshot();