Learn aligned drill recovery plan trust history
This commit is contained in:
parent
5a208a670c
commit
4348129d42
4 changed files with 565 additions and 67 deletions
|
|
@ -126,12 +126,18 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
int32 ReliableTrustedTightPlanSourceCount = 0;
|
||||
int32 ReliableTrustedTightPlanAlignedCount = 0;
|
||||
int32 ReliableTrustedTightPlanDivergedCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanSourceCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanAlignedCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanDivergedCount = 0;
|
||||
int32 BroadPlanSourceCount = 0;
|
||||
int32 BroadPlanAlignedCount = 0;
|
||||
int32 BroadPlanDivergedCount = 0;
|
||||
int32 ReliableTrustedBroadPlanSourceCount = 0;
|
||||
int32 ReliableTrustedBroadPlanAlignedCount = 0;
|
||||
int32 ReliableTrustedBroadPlanDivergedCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanSourceCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanAlignedCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanDivergedCount = 0;
|
||||
bool bHasSignal = false;
|
||||
};
|
||||
|
||||
|
|
@ -835,6 +841,11 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
return SourceLabel.Contains(TEXT("structure-plan-tight-trusted-reliable"));
|
||||
}
|
||||
|
||||
bool IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel)
|
||||
{
|
||||
return SourceLabel.Contains(TEXT("structure-plan-tight-trusted-reliable-aligned"));
|
||||
}
|
||||
|
||||
bool IsBroadMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel)
|
||||
{
|
||||
return SourceLabel.Contains(TEXT("structure-plan-broad"));
|
||||
|
|
@ -850,8 +861,21 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
return SourceLabel.Contains(TEXT("structure-plan-broad-trusted-reliable"));
|
||||
}
|
||||
|
||||
bool IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel)
|
||||
{
|
||||
return SourceLabel.Contains(TEXT("structure-plan-broad-trusted-reliable-aligned"));
|
||||
}
|
||||
|
||||
FString DescribeMethodDrillRecoveryPlanSourceLabel(const FString& SourceLabel)
|
||||
{
|
||||
if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(SourceLabel))
|
||||
{
|
||||
return TEXT("aligned reliable trusted tight retained drill-recovery plan");
|
||||
}
|
||||
if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(SourceLabel))
|
||||
{
|
||||
return TEXT("aligned reliable trusted broad retained drill-recovery plan");
|
||||
}
|
||||
if (IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(SourceLabel))
|
||||
{
|
||||
return TEXT("reliable trusted tight retained drill-recovery plan");
|
||||
|
|
@ -1946,6 +1970,19 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
{
|
||||
++Summary.ReliableTrustedTightPlanDivergedCount;
|
||||
}
|
||||
if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedTightPlanSourceCount;
|
||||
if (Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture)
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedTightPlanAlignedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedTightPlanDivergedCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (IsBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
|
|
@ -1973,6 +2010,19 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
{
|
||||
++Summary.ReliableTrustedBroadPlanDivergedCount;
|
||||
}
|
||||
if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedBroadPlanSourceCount;
|
||||
if (Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture)
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedBroadPlanAlignedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
++Summary.ReliableAlignedTrustedBroadPlanDivergedCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1985,6 +2035,17 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
{
|
||||
if (IsTightMethodDrillRecoveryPlanSourceLabel(Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
if (IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
return Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture
|
||||
? TEXT("aligned reliable-tight continuation")
|
||||
: (Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture
|
||||
? TEXT("diverged to aligned reliable-broad redirect")
|
||||
: (Entry.bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture
|
||||
? TEXT("diverged to reliable broad redirect")
|
||||
: TEXT("aligned reliable-tight source, plan unresolved")));
|
||||
}
|
||||
if (IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
|
|
@ -2004,6 +2065,17 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
}
|
||||
if (IsBroadMethodDrillRecoveryPlanSourceLabel(Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
if (IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
return Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture
|
||||
? TEXT("aligned reliable-broad redirect")
|
||||
: (Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture
|
||||
? TEXT("diverged to aligned reliable-tight continuation")
|
||||
: (Entry.bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture
|
||||
? TEXT("diverged to reliable tight continuation")
|
||||
: TEXT("aligned reliable-broad source, plan unresolved")));
|
||||
}
|
||||
if (IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel))
|
||||
{
|
||||
|
|
@ -2036,6 +2108,24 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
const int32 ReliableBroadScore =
|
||||
Summary.ReliableTrustedBroadPlanAlignedCount
|
||||
- Summary.ReliableTrustedBroadPlanDivergedCount;
|
||||
const int32 ReliableAlignedTightScore =
|
||||
Summary.ReliableAlignedTrustedTightPlanAlignedCount
|
||||
- Summary.ReliableAlignedTrustedTightPlanDivergedCount;
|
||||
const int32 ReliableAlignedBroadScore =
|
||||
Summary.ReliableAlignedTrustedBroadPlanAlignedCount
|
||||
- Summary.ReliableAlignedTrustedBroadPlanDivergedCount;
|
||||
if (ReliableAlignedTightScore > ReliableAlignedBroadScore
|
||||
&& ReliableAlignedTightScore > 0
|
||||
&& Summary.ReliableAlignedTrustedTightPlanSourceCount > 0)
|
||||
{
|
||||
return TEXT("aligned reliable tight continuation");
|
||||
}
|
||||
if (ReliableAlignedBroadScore > ReliableAlignedTightScore
|
||||
&& ReliableAlignedBroadScore > 0
|
||||
&& Summary.ReliableAlignedTrustedBroadPlanSourceCount > 0)
|
||||
{
|
||||
return TEXT("aligned reliable broad redirect");
|
||||
}
|
||||
if (ReliableTightScore > ReliableBroadScore
|
||||
&& ReliableTightScore > 0
|
||||
&& Summary.ReliableTrustedTightPlanSourceCount > 0)
|
||||
|
|
@ -2069,7 +2159,9 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
{
|
||||
return Summary.TightPlanAlignedCount - Summary.TightPlanDivergedCount
|
||||
+ Summary.ReliableTrustedTightPlanAlignedCount
|
||||
- Summary.ReliableTrustedTightPlanDivergedCount;
|
||||
- Summary.ReliableTrustedTightPlanDivergedCount
|
||||
+ (Summary.ReliableAlignedTrustedTightPlanAlignedCount * 2)
|
||||
- Summary.ReliableAlignedTrustedTightPlanDivergedCount;
|
||||
}
|
||||
|
||||
int32 DeriveMethodDrillRecoveryPlanBroadTrust(
|
||||
|
|
@ -2077,7 +2169,9 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
{
|
||||
return Summary.BroadPlanAlignedCount - Summary.BroadPlanDivergedCount
|
||||
+ Summary.ReliableTrustedBroadPlanAlignedCount
|
||||
- Summary.ReliableTrustedBroadPlanDivergedCount;
|
||||
- Summary.ReliableTrustedBroadPlanDivergedCount
|
||||
+ (Summary.ReliableAlignedTrustedBroadPlanAlignedCount * 2)
|
||||
- Summary.ReliableAlignedTrustedBroadPlanDivergedCount;
|
||||
}
|
||||
|
||||
bool PrefersMethodDrillRecoveryPlanTightContinuation(
|
||||
|
|
@ -2441,12 +2535,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
&& MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust));
|
||||
const bool bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan =
|
||||
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanTightTrust > 0
|
||||
&& MethodDrillRecoveryPlanTightTrust >= MethodDrillRecoveryPlanBroadTrust;
|
||||
const bool bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan =
|
||||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0
|
||||
&& MethodDrillRecoveryPlanBroadTrust > 0
|
||||
&& MethodDrillRecoveryPlanBroadTrust >= MethodDrillRecoveryPlanTightTrust;
|
||||
|
||||
|
|
@ -2474,7 +2568,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
bUseStrongRetainedMethodDrillRecoveryPosture,
|
||||
bUseWeakRetainedMethodDrillRecoveryPosture,
|
||||
bUseReliableTrustedTightMethodDrillRecoveryStructurePlan,
|
||||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan,
|
||||
bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan,
|
||||
bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
](
|
||||
const TCHAR* AppliedActionLabel,
|
||||
const FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind ActionKind,
|
||||
|
|
@ -2509,6 +2605,12 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
|
|||
bUseReliableTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
|
||||
bUseReliableAlignedTrustedTightMethodDrillRecoveryStructurePlan
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery,
|
||||
bUseReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlan
|
||||
&& ActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
|
||||
bSucceeded
|
||||
);
|
||||
UpdateDashboardPresentation();
|
||||
|
|
@ -6728,6 +6830,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
++Weighting.ReliableTrustedBroadPlanPromoteReducedCount;
|
||||
}
|
||||
}
|
||||
if (Outcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery)
|
||||
{
|
||||
++Weighting.ReliableAlignedTrustedBroadPlanPromoteCount;
|
||||
Weighting.bHasReliableAlignedTrustedPlanOutcomeSignal = true;
|
||||
if (Outcome.bReducedFriction)
|
||||
{
|
||||
++Weighting.ReliableAlignedTrustedBroadPlanPromoteReducedCount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery:
|
||||
++Weighting.LaunchCount;
|
||||
|
|
@ -6788,6 +6899,15 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
++Weighting.ReliableTrustedTightPlanLaunchReducedCount;
|
||||
}
|
||||
}
|
||||
if (Outcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery)
|
||||
{
|
||||
++Weighting.ReliableAlignedTrustedTightPlanLaunchCount;
|
||||
Weighting.bHasReliableAlignedTrustedPlanOutcomeSignal = true;
|
||||
if (Outcome.bReducedFriction)
|
||||
{
|
||||
++Weighting.ReliableAlignedTrustedTightPlanLaunchReducedCount;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -6846,6 +6966,16 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Weighting.ReliableTrustedBroadPlanAverageOutcomeScore =
|
||||
CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Weighting.ReliableAlignedTrustedTightPlanHistoryCount =
|
||||
CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Weighting.ReliableAlignedTrustedBroadPlanHistoryCount =
|
||||
CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore =
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore =
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
const bool bStrongMethodDrillRecoveryMemory =
|
||||
Weighting.MethodDrillUpstreamHistoryCount >= 2
|
||||
&& Weighting.MethodDrillUpstreamStrongCount >= Weighting.MethodDrillUpstreamWeakCount
|
||||
|
|
@ -6873,6 +7003,30 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
);
|
||||
Weighting.bHasMethodDrillMemorySignal = true;
|
||||
}
|
||||
const int32 ReliableAlignedTrustedTightPlanSignalScore =
|
||||
(HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| (Weighting.ReliableAlignedTrustedTightPlanHistoryCount >= 2
|
||||
&& Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore >= 60.0f))
|
||||
? FMath::Clamp(
|
||||
Weighting.ReliableAlignedTrustedTightPlanHistoryCount
|
||||
- Weighting.ReliableAlignedTrustedBroadPlanHistoryCount
|
||||
+ (Weighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore >= 80.0f ? 1 : 0),
|
||||
1,
|
||||
4)
|
||||
: 0;
|
||||
const int32 ReliableAlignedTrustedBroadPlanSignalScore =
|
||||
(HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| (Weighting.ReliableAlignedTrustedBroadPlanHistoryCount >= 2
|
||||
&& Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore >= 60.0f))
|
||||
? FMath::Clamp(
|
||||
Weighting.ReliableAlignedTrustedBroadPlanHistoryCount
|
||||
- Weighting.ReliableAlignedTrustedTightPlanHistoryCount
|
||||
+ (Weighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore >= 80.0f ? 1 : 0),
|
||||
1,
|
||||
4)
|
||||
: 0;
|
||||
const int32 ReliableTrustedTightPlanSignalScore =
|
||||
(HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|
|
@ -6897,7 +7051,22 @@ FHyperTwistCoachDashboardQueueRecoveryWeighting UHyperTwistCoachDashboardWidget:
|
|||
1,
|
||||
3)
|
||||
: 0;
|
||||
if (ReliableTrustedTightPlanSignalScore > ReliableTrustedBroadPlanSignalScore)
|
||||
if (ReliableAlignedTrustedTightPlanSignalScore > ReliableAlignedTrustedBroadPlanSignalScore)
|
||||
{
|
||||
Weighting.ReliableAlignedTrustedTightPlanBiasCount =
|
||||
ReliableAlignedTrustedTightPlanSignalScore;
|
||||
Weighting.MethodDrillLaunchBiasCount += ReliableAlignedTrustedTightPlanSignalScore;
|
||||
Weighting.bHasReliableAlignedTrustedPlanSignal = true;
|
||||
}
|
||||
else if (ReliableAlignedTrustedBroadPlanSignalScore
|
||||
> ReliableAlignedTrustedTightPlanSignalScore)
|
||||
{
|
||||
Weighting.ReliableAlignedTrustedBroadPlanBiasCount =
|
||||
ReliableAlignedTrustedBroadPlanSignalScore;
|
||||
Weighting.MethodDrillPromoteBiasCount += ReliableAlignedTrustedBroadPlanSignalScore;
|
||||
Weighting.bHasReliableAlignedTrustedPlanSignal = true;
|
||||
}
|
||||
else if (ReliableTrustedTightPlanSignalScore > ReliableTrustedBroadPlanSignalScore)
|
||||
{
|
||||
Weighting.ReliableTrustedTightPlanBiasCount = ReliableTrustedTightPlanSignalScore;
|
||||
Weighting.MethodDrillLaunchBiasCount += ReliableTrustedTightPlanSignalScore;
|
||||
|
|
@ -7419,6 +7588,8 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
|
|||
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedReliableTrustedTightStructurePlanRecovery,
|
||||
const bool bUsedReliableTrustedBroadStructurePlanRecovery,
|
||||
const bool bUsedReliableAlignedTrustedTightStructurePlanRecovery,
|
||||
const bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery,
|
||||
const bool bSucceeded)
|
||||
{
|
||||
QueueRecoveryOutcome.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
|
||||
|
|
@ -7467,6 +7638,10 @@ void UHyperTwistCoachDashboardWidget::RecordQueueRecoveryOutcome(
|
|||
bUsedReliableTrustedTightStructurePlanRecovery;
|
||||
QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery =
|
||||
bUsedReliableTrustedBroadStructurePlanRecovery;
|
||||
QueueRecoveryOutcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery =
|
||||
bUsedReliableAlignedTrustedTightStructurePlanRecovery;
|
||||
QueueRecoveryOutcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery =
|
||||
bUsedReliableAlignedTrustedBroadStructurePlanRecovery;
|
||||
bHasQueueRecoveryOutcome = QueueRecoveryOutcome.IsStructurallyValid();
|
||||
if (bHasQueueRecoveryOutcome)
|
||||
{
|
||||
|
|
@ -7496,7 +7671,9 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
const bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
const bool bUsedReliableTrustedTightStructurePlanHistory,
|
||||
const bool bUsedReliableTrustedBroadStructurePlanHistory)
|
||||
const bool bUsedReliableTrustedBroadStructurePlanHistory,
|
||||
const bool bUsedReliableAlignedTrustedTightStructurePlanHistory,
|
||||
const bool bUsedReliableAlignedTrustedBroadStructurePlanHistory)
|
||||
{
|
||||
FHyperTwistCoachDashboardHandoffHistoryEntry Entry;
|
||||
Entry.RecordedAtUtc = FDateTime::UtcNow().ToIso8601();
|
||||
|
|
@ -7543,6 +7720,10 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
bUsedReliableTrustedTightStructurePlanHistory;
|
||||
Entry.bUsedReliableTrustedBroadStructurePlanHistory =
|
||||
bUsedReliableTrustedBroadStructurePlanHistory;
|
||||
Entry.bUsedReliableAlignedTrustedTightStructurePlanHistory =
|
||||
bUsedReliableAlignedTrustedTightStructurePlanHistory;
|
||||
Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory =
|
||||
bUsedReliableAlignedTrustedBroadStructurePlanHistory;
|
||||
if (!Entry.IsStructurallyValid())
|
||||
{
|
||||
return;
|
||||
|
|
@ -7599,7 +7780,11 @@ void UHyperTwistCoachDashboardWidget::RecordCoachHandoffHistorySnapshot(
|
|||
&& HandoffHistoryEntries.Last().bUsedReliableTrustedTightStructurePlanHistory
|
||||
== Entry.bUsedReliableTrustedTightStructurePlanHistory
|
||||
&& HandoffHistoryEntries.Last().bUsedReliableTrustedBroadStructurePlanHistory
|
||||
== Entry.bUsedReliableTrustedBroadStructurePlanHistory;
|
||||
== Entry.bUsedReliableTrustedBroadStructurePlanHistory
|
||||
&& HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedTightStructurePlanHistory
|
||||
== Entry.bUsedReliableAlignedTrustedTightStructurePlanHistory
|
||||
&& HandoffHistoryEntries.Last().bUsedReliableAlignedTrustedBroadStructurePlanHistory
|
||||
== Entry.bUsedReliableAlignedTrustedBroadStructurePlanHistory;
|
||||
if (bMatchesLastEntry)
|
||||
{
|
||||
return;
|
||||
|
|
@ -7848,13 +8033,20 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel);
|
||||
const bool bReliableAlignedTrustedPlanRecoverySourceActive =
|
||||
HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
CachedCoachPanelState.PreferredQueueRecoveryActionSourceLabel);
|
||||
if (!bHasMethodDrillRecoveryHistory
|
||||
&& !QueueRecoveryWeighting.bHasMethodDrillMemorySignal
|
||||
&& !QueueRecoveryWeighting.bHasReliableTrustedPlanSignal
|
||||
&& !QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanSignal
|
||||
&& !bUsedMethodDrillRecoveryMemoryForHandoff
|
||||
&& !bDrillRecoverySourceActive
|
||||
&& !bPacketStructureRecoverySourceActive
|
||||
&& !bReliableTrustedPlanRecoverySourceActive
|
||||
&& !bReliableAlignedTrustedPlanRecoverySourceActive
|
||||
&& QueueRecoveryWeighting.NarrowMethodDrillPacketStructureLaunchCount <= 0
|
||||
&& QueueRecoveryWeighting.BroadMethodDrillPacketStructurePromoteCount <= 0)
|
||||
{
|
||||
|
|
@ -7902,6 +8094,16 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Entry.bStrongPressureDominant =
|
||||
Entry.MethodDrillRecoveryHistoryCount >= 2
|
||||
&& Entry.StrongMethodDrillRecoveryHistoryCount
|
||||
|
|
@ -7934,6 +8136,18 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
&& Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore >= 60.0f
|
||||
&& Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
>= Entry.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Entry.bReliableAlignedTrustedTightStructurePlanDominant =
|
||||
Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount >= 2
|
||||
&& Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore
|
||||
>= 60.0f
|
||||
&& Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount
|
||||
>= Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Entry.bReliableAlignedTrustedBroadStructurePlanDominant =
|
||||
Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount >= 2
|
||||
&& Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore
|
||||
>= 60.0f
|
||||
&& Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
>= Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Entry.bUsedMethodDrillRecoveryMemoryForRecovery =
|
||||
QueueRecoveryWeighting.bHasMethodDrillMemorySignal;
|
||||
Entry.bUsedMethodDrillRecoveryMemoryForHandoff =
|
||||
|
|
@ -7958,6 +8172,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
const FString GuidanceSourceLabel = CachedCoachPanelState.PreferredGuidanceSourceLabel;
|
||||
const auto ApplyGeneratedPlanSnapshot =
|
||||
[&Entry](
|
||||
const bool bUseReliableAlignedTrustedTightPlanSource,
|
||||
const bool bUseReliableAlignedTrustedBroadPlanSource,
|
||||
const bool bUseReliableTrustedTightPlanSource,
|
||||
const bool bUseReliableTrustedBroadPlanSource,
|
||||
const EHyperTwistTrainingDeliveryMode SuggestedMode,
|
||||
|
|
@ -7989,6 +8205,16 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
&& HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture(
|
||||
SuggestedMode,
|
||||
SuggestedSelectionPolicy);
|
||||
Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture =
|
||||
bUseReliableAlignedTrustedTightPlanSource
|
||||
&& HyperTwistCoachDashboardWidgetInternal::IsTightCoachPlanPosture(
|
||||
SuggestedMode,
|
||||
SuggestedSelectionPolicy);
|
||||
Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture =
|
||||
bUseReliableAlignedTrustedBroadPlanSource
|
||||
&& HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture(
|
||||
SuggestedMode,
|
||||
SuggestedSelectionPolicy);
|
||||
};
|
||||
const bool bStrongPacketPosture =
|
||||
SourceUsesStrongRetainedMethodDrillRecoveryPosture(GuidanceSourceLabel)
|
||||
|
|
@ -8014,11 +8240,21 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
GuidanceSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel);
|
||||
const bool bReliableAlignedTrustedTightPlanSource =
|
||||
HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
GuidanceSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedTightMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel);
|
||||
const bool bReliableTrustedBroadPlanSource =
|
||||
HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
GuidanceSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel);
|
||||
const bool bReliableAlignedTrustedBroadPlanSource =
|
||||
HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
GuidanceSourceLabel)
|
||||
|| HyperTwistCoachDashboardWidgetInternal::IsReliableAlignedTrustedBroadMethodDrillRecoveryPlanSourceLabel(
|
||||
Entry.PreferredRecoveryActionSourceLabel);
|
||||
Entry.bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = bStrongPacketPosture;
|
||||
Entry.bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = bWeakPacketPosture;
|
||||
Entry.bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = bGenericRecoveryPacket;
|
||||
|
|
@ -8036,6 +8272,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
: SelectedQueueEntry->Headline;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
SelectedQueueEntry->SuggestedMode,
|
||||
|
|
@ -8050,6 +8288,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
CachedCoachFollowUpBrief.SuggestedMode,
|
||||
|
|
@ -8063,6 +8303,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
CachedCoachBrief.SuggestedMode,
|
||||
|
|
@ -8080,6 +8322,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
CachedCoachFollowUpBrief.SuggestedMode,
|
||||
|
|
@ -8097,6 +8341,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
: SelectedQueueEntry->Headline;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
SelectedQueueEntry->SuggestedMode,
|
||||
|
|
@ -8112,6 +8358,8 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel;
|
||||
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num();
|
||||
ApplyGeneratedPlanSnapshot(
|
||||
bReliableAlignedTrustedTightPlanSource,
|
||||
bReliableAlignedTrustedBroadPlanSource,
|
||||
bReliableTrustedTightPlanSource,
|
||||
bReliableTrustedBroadPlanSource,
|
||||
CachedCoachBrief.SuggestedMode,
|
||||
|
|
@ -8156,6 +8404,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
== Entry.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
== Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount
|
||||
== Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
== Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount
|
||||
&& FMath::IsNearlyEqual(
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Last().MethodDrillRecoveryAverageOutcomeScore,
|
||||
Entry.MethodDrillRecoveryAverageOutcomeScore)
|
||||
|
|
@ -8171,6 +8423,12 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
&& FMath::IsNearlyEqual(
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
Entry.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore)
|
||||
&& FMath::IsNearlyEqual(
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
Entry.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore)
|
||||
&& FMath::IsNearlyEqual(
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Last().ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
Entry.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore)
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bStrongPressureDominant
|
||||
== Entry.bStrongPressureDominant
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bWeakPressureDominant
|
||||
|
|
@ -8183,6 +8441,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
== Entry.bReliableTrustedTightStructurePlanDominant
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableTrustedBroadStructurePlanDominant
|
||||
== Entry.bReliableTrustedBroadStructurePlanDominant
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedTightStructurePlanDominant
|
||||
== Entry.bReliableAlignedTrustedTightStructurePlanDominant
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bReliableAlignedTrustedBroadStructurePlanDominant
|
||||
== Entry.bReliableAlignedTrustedBroadStructurePlanDominant
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketKindLabel
|
||||
== Entry.GeneratedGuidancePacketKindLabel
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketSourceLabel
|
||||
|
|
@ -8213,6 +8475,10 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|
|||
== Entry.bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture
|
||||
== Entry.bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture
|
||||
== Entry.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture
|
||||
== Entry.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForRecovery
|
||||
== Entry.bUsedMethodDrillRecoveryMemoryForRecovery
|
||||
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForHandoff
|
||||
|
|
@ -9851,6 +10117,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
CachedCoachPanelState.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
CachedCoachPanelState.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore
|
||||
);
|
||||
CoachHandoffRecommendationDetailLine += FString::Printf(
|
||||
TEXT(" | aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f"),
|
||||
CachedCoachPanelState.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
CachedCoachPanelState.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
CachedCoachPanelState
|
||||
.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore
|
||||
);
|
||||
CoachHandoffRecommendationDetailLine += FString::Printf(
|
||||
TEXT(" | reliable trusted tight accepted q/f/r %d/%d/%d, broad accepted q/f/r %d/%d/%d"),
|
||||
HandoffHistoryBias.ReliableTrustedTightQueueAcceptedDeltaCount,
|
||||
|
|
@ -9918,6 +10193,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
bHandoffRecommendationUsedPlanComparisonHistory
|
||||
&& bPlanComparisonPrefersBroadRedirect
|
||||
&& bHasReliableTrustedBroadPlanComparisonHistory;
|
||||
const bool bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory =
|
||||
bHandoffRecommendationUsedPlanComparisonHistory
|
||||
&& bPlanComparisonPrefersTightContinuation
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0;
|
||||
const bool bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory =
|
||||
bHandoffRecommendationUsedPlanComparisonHistory
|
||||
&& bPlanComparisonPrefersBroadRedirect
|
||||
&& MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0;
|
||||
RecordCoachHandoffHistorySnapshot(
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind(
|
||||
HandoffRecommendationKind),
|
||||
|
|
@ -9934,7 +10217,9 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bHandoffRecommendationUsedReliableTrustedTightPlanHistory,
|
||||
bHandoffRecommendationUsedReliableTrustedBroadPlanHistory
|
||||
bHandoffRecommendationUsedReliableTrustedBroadPlanHistory,
|
||||
bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory,
|
||||
bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory
|
||||
);
|
||||
FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty()
|
||||
? TEXT("Start Queue")
|
||||
|
|
@ -9977,11 +10262,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none")),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanHistory
|
||||
? TEXT("aligned trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanHistory
|
||||
? TEXT("aligned trusted broad redirect")
|
||||
: (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.");
|
||||
|
|
@ -10003,11 +10292,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
SelectedHandoffHistoryEntry->bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
SelectedHandoffHistoryEntry->bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none")),
|
||||
SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedTightStructurePlanHistory
|
||||
? TEXT("aligned trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableAlignedTrustedBroadStructurePlanHistory
|
||||
? TEXT("aligned trusted broad redirect")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedTightStructurePlanHistory
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedHandoffHistoryEntry->bUsedReliableTrustedBroadStructurePlanHistory
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none")))),
|
||||
SelectedHandoffHistoryEntry->QueueSourceLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: *SelectedHandoffHistoryEntry->QueueSourceLabel,
|
||||
|
|
@ -10234,42 +10527,73 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
: (bUpstreamPrefersLaunchRecovery
|
||||
? TEXT("prefer launch-recovery")
|
||||
: TEXT("no upstream preference"));
|
||||
const FString QueueRecoveryMethodDrillStatus =
|
||||
MethodDrillRecoveryPacketQueueBias.bHasSignal
|
||||
? (MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias
|
||||
const FString QueueRecoveryMethodDrillStatus = [&]() -> FString
|
||||
{
|
||||
if (MethodDrillRecoveryPacketQueueBias.bHasSignal)
|
||||
{
|
||||
return MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias
|
||||
>= 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
|
||||
: TEXT(" | Retained drill-recovery packet history is reinforcing promote-deferred recovery.");
|
||||
}
|
||||
if (QueueRecoveryWeighting.bHasReliableAlignedTrustedPlanOutcomeSignal)
|
||||
{
|
||||
return 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
|
||||
? TEXT(" | Prior aligned reliable trusted tight plan recovery outcomes are reinforcing launch recovery.")
|
||||
: TEXT(" | Prior aligned reliable trusted broad plan recovery outcomes are reinforcing promote-deferred recovery.");
|
||||
}
|
||||
if (QueueRecoveryWeighting.bHasReliableTrustedPlanOutcomeSignal)
|
||||
{
|
||||
return 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(""))))));
|
||||
? 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.");
|
||||
}
|
||||
if (bQueueRecoveryUsedPlanComparisonHistory)
|
||||
{
|
||||
if (QueueRecoveryWeighting.PreferredActionKind
|
||||
== FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::LaunchRecovery)
|
||||
{
|
||||
if (MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanSourceCount > 0)
|
||||
{
|
||||
return TEXT(" | Aligned reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.");
|
||||
}
|
||||
return bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted tight continuation recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted tight continuation recovery.");
|
||||
}
|
||||
if (MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanSourceCount > 0)
|
||||
{
|
||||
return TEXT(" | Aligned reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.");
|
||||
}
|
||||
return bHasReliableTrustedPlanComparisonHistory
|
||||
? TEXT(" | Reliable retained plan-alignment history is reinforcing trusted broad redirect recovery.")
|
||||
: TEXT(" | Retained plan-alignment history is reinforcing trusted broad redirect recovery.");
|
||||
}
|
||||
if (QueueRecoveryWeighting.bHasMethodDrillMemorySignal)
|
||||
{
|
||||
return 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.");
|
||||
}
|
||||
if (QueueRecoveryWeighting.bHasMethodDrillOutcomeSignal)
|
||||
{
|
||||
return 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.");
|
||||
}
|
||||
if (QueueRecoveryWeighting.bHasMethodDrillSignal)
|
||||
{
|
||||
return 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.");
|
||||
}
|
||||
return TEXT("");
|
||||
}();
|
||||
const bool bHasQueueRecoveryFriction =
|
||||
CachedCoachSchedulePolicySummary.bHasBlockedFollowUpDeferrals
|
||||
|| CachedCoachSchedulePolicySummary.bHasArchiveAwareDeferrals
|
||||
|
|
@ -10328,7 +10652,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 | 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"),
|
||||
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 | aligned reliable 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 | aligned reliable plan 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 | aligned reliable tight aligned/diverged %d/%d | aligned reliable 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 | aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f | reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | retained drill-recovery stance: %s"),
|
||||
CachedCoachQueueExecutionSummary.DeferredEventCount,
|
||||
CachedCoachQueueExecutionSummary.PromotedEventCount,
|
||||
CachedCoachQueueExecutionSummary.ManualRescheduleEventCount,
|
||||
|
|
@ -10357,6 +10681,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
QueueRecoveryWeighting.MethodDrillLaunchReducedCount,
|
||||
QueueRecoveryWeighting.MethodDrillPromoteCount,
|
||||
QueueRecoveryWeighting.MethodDrillLaunchCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanPromoteReducedCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanLaunchReducedCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanPromoteCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanLaunchCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteReducedCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanLaunchReducedCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanPromoteCount,
|
||||
|
|
@ -10367,6 +10695,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
QueueRecoveryWeighting.WeakRetainedMethodDrillPromoteCount,
|
||||
QueueRecoveryWeighting.MethodDrillPromoteBiasCount,
|
||||
QueueRecoveryWeighting.MethodDrillLaunchBiasCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanBiasCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanBiasCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanBiasCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanBiasCount,
|
||||
MethodDrillRecoveryPacketQueueBias.QueueEntryHistoryCount,
|
||||
|
|
@ -10378,6 +10708,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
MethodDrillRecoveryPlanComparisonSummary.TightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.BroadPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.BroadPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanAlignedCount,
|
||||
|
|
@ -10390,6 +10724,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
QueueRecoveryWeighting.MethodDrillUpstreamWeakCount,
|
||||
QueueRecoveryWeighting.MethodDrillUpstreamHistoryCount,
|
||||
QueueRecoveryWeighting.MethodDrillUpstreamAverageOutcomeScore,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanHistoryCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanHistoryCount,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedTightPlanAverageOutcomeScore,
|
||||
QueueRecoveryWeighting.ReliableAlignedTrustedBroadPlanAverageOutcomeScore,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanHistoryCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedBroadPlanHistoryCount,
|
||||
QueueRecoveryWeighting.ReliableTrustedTightPlanAverageOutcomeScore,
|
||||
|
|
@ -10539,11 +10877,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
*HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
QueueRecoveryOutcome.bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
QueueRecoveryOutcome.bUsedWeakRetainedMethodDrillRecoveryPosture),
|
||||
QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery
|
||||
? TEXT("trusted tight continuation")
|
||||
: (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none"))
|
||||
QueueRecoveryOutcome.bUsedReliableAlignedTrustedTightStructurePlanRecovery
|
||||
? TEXT("aligned reliable tight continuation")
|
||||
: (QueueRecoveryOutcome.bUsedReliableAlignedTrustedBroadStructurePlanRecovery
|
||||
? TEXT("aligned reliable broad redirect")
|
||||
: (QueueRecoveryOutcome.bUsedReliableTrustedTightStructurePlanRecovery
|
||||
? TEXT("trusted tight continuation")
|
||||
: (QueueRecoveryOutcome.bUsedReliableTrustedBroadStructurePlanRecovery
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none"))))
|
||||
);
|
||||
TArray<int32> MethodDrillRecoveryHistoryIndices;
|
||||
HyperTwistCoachDashboardWidgetInternal::CollectMethodDrillRecoveryOutcomeIndices(
|
||||
|
|
@ -10716,14 +11058,30 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
: (SelectedMethodDrillRecoveryMemoryHistoryEntry->bGeneratedPacketUsedGenericMethodDrillRecoveryMemory
|
||||
? TEXT("generic drill-recovery memory")
|
||||
: TEXT("none"))));
|
||||
const FString MethodDrillRecoveryMemoryReliablePlanLine =
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr
|
||||
? TEXT("n/a")
|
||||
: (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedTightStructurePlanDominant
|
||||
? TEXT("reliable trusted tight continuation")
|
||||
: (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedBroadStructurePlanDominant
|
||||
? TEXT("reliable trusted broad redirect")
|
||||
: TEXT("none")));
|
||||
const FString MethodDrillRecoveryMemoryReliablePlanLine = [&]() -> FString
|
||||
{
|
||||
if (SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr)
|
||||
{
|
||||
return TEXT("n/a");
|
||||
}
|
||||
if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedTightStructurePlanDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted tight continuation");
|
||||
}
|
||||
if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableAlignedTrustedBroadStructurePlanDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted broad redirect");
|
||||
}
|
||||
if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedTightStructurePlanDominant)
|
||||
{
|
||||
return TEXT("reliable trusted tight continuation");
|
||||
}
|
||||
if (SelectedMethodDrillRecoveryMemoryHistoryEntry->bReliableTrustedBroadStructurePlanDominant)
|
||||
{
|
||||
return TEXT("reliable trusted broad redirect");
|
||||
}
|
||||
return TEXT("none");
|
||||
}();
|
||||
const FString MethodDrillRecoveryMemoryHistoryStatusLine =
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr
|
||||
&& SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid()
|
||||
|
|
@ -10747,7 +11105,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr
|
||||
&& SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid()
|
||||
? FString::Printf(
|
||||
TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Trusted plan history tight/broad %d/%d avg %.1f/%.1f | Reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | Dominant pressure: %s | Structure bias: %s | Reliable stance: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Plan mode: %s | Plan selection: %s | Plan posture: %s | Plan source: %s | Plan alignment: %s | Plan comparison tight aligned/diverged %d/%d broad aligned/diverged %d/%d reliable tight aligned/diverged %d/%d reliable broad aligned/diverged %d/%d | Plan preferred: %s | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"),
|
||||
TEXT("Source: %s | Strong/weak/history %d/%d/%d avg %.1f | Structure recovery narrow %d/%d broad %d/%d | Trusted plan history tight/broad %d/%d avg %.1f/%.1f | Aligned reliable plan history tight/broad %d/%d avg %.1f/%.1f | Reliable trusted plan history tight/broad %d/%d avg %.1f/%.1f | Dominant pressure: %s | Structure bias: %s | Reliable stance: %s | Stance: %s | Recovery memory tipped: %s | Handoff memory tipped: %s | Packet kind: %s | Packet source: %s | Packet headline: %s | Packet action: %s | Packet focus %d | Plan mode: %s | Plan selection: %s | Plan posture: %s | Plan source: %s | Plan alignment: %s | Plan comparison tight aligned/diverged %d/%d broad aligned/diverged %d/%d aligned reliable tight aligned/diverged %d/%d aligned reliable broad aligned/diverged %d/%d reliable tight aligned/diverged %d/%d reliable broad aligned/diverged %d/%d | Plan preferred: %s | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"),
|
||||
*MethodDrillRecoveryMemorySourceLine,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry->StrongMethodDrillRecoveryHistoryCount,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry->WeakMethodDrillRecoveryHistoryCount,
|
||||
|
|
@ -10769,6 +11127,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
->TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
->ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedMethodDrillRecoveryMemoryHistoryEntry
|
||||
|
|
@ -10807,6 +11173,10 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|
|||
MethodDrillRecoveryPlanComparisonSummary.TightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.BroadPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.BroadPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedTightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableAlignedTrustedBroadPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanAlignedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedTightPlanDivergedCount,
|
||||
MethodDrillRecoveryPlanComparisonSummary.ReliableTrustedBroadPlanAlignedCount,
|
||||
|
|
|
|||
|
|
@ -1297,6 +1297,43 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|
|||
* 100.0f)
|
||||
/ static_cast<float>(ReliableTrustedBroadMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
if ((ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount)
|
||||
> 0)
|
||||
{
|
||||
const int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount =
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount;
|
||||
Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount +=
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount;
|
||||
Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
(static_cast<float>(
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanCompletedCount)
|
||||
* 100.0f)
|
||||
/ static_cast<float>(ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
if ((ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount)
|
||||
> 0)
|
||||
{
|
||||
const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount =
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount;
|
||||
const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount =
|
||||
FMath::Max(
|
||||
0,
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount
|
||||
- ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanCompletedCount
|
||||
);
|
||||
Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount +=
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount;
|
||||
Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
(static_cast<float>(
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount)
|
||||
* 100.0f)
|
||||
/ static_cast<float>(ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
const bool bStrongMethodDrillRecoveryHistory =
|
||||
MethodDrillRecoveryStartedCount >= 2
|
||||
&& MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount
|
||||
|
|
@ -8270,6 +8307,45 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
|
|||
* 100.0f)
|
||||
/ static_cast<float>(ReliableTrustedBroadMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
if ((ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount)
|
||||
> 0)
|
||||
{
|
||||
const int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount =
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanPromotedCount;
|
||||
Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount +=
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount;
|
||||
Snapshot.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
(static_cast<float>(
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanCompletedCount)
|
||||
* 100.0f)
|
||||
/ static_cast<float>(
|
||||
ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
if ((ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount)
|
||||
> 0)
|
||||
{
|
||||
const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount =
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanStartedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount;
|
||||
const int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount =
|
||||
FMath::Max(
|
||||
0,
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanPromotedCount
|
||||
+ ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutstandingCount
|
||||
- ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanCompletedCount
|
||||
);
|
||||
Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount +=
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount;
|
||||
Snapshot.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
(static_cast<float>(
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanRedirectCount)
|
||||
* 100.0f)
|
||||
/ static_cast<float>(
|
||||
ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanEventCount);
|
||||
}
|
||||
const bool bStrongMethodDrillRecoveryHistory =
|
||||
MethodDrillRecoveryStartedCount >= 2
|
||||
&& MethodDrillRecoveryCompletedCount >= MethodDrillRecoveryOutstandingCount
|
||||
|
|
|
|||
|
|
@ -155,6 +155,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryOutcome
|
|||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery = false;
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanRecovery = false;
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -201,11 +203,21 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
|
|||
int32 ReliableTrustedBroadPlanPromoteReducedCount = 0;
|
||||
int32 ReliableTrustedTightPlanBiasCount = 0;
|
||||
int32 ReliableTrustedBroadPlanBiasCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanHistoryCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanHistoryCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanLaunchCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanLaunchReducedCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanPromoteCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanPromoteReducedCount = 0;
|
||||
int32 ReliableAlignedTrustedTightPlanBiasCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadPlanBiasCount = 0;
|
||||
float PromoteAveragePressureDelta = 0.0f;
|
||||
float LaunchAveragePressureDelta = 0.0f;
|
||||
float MethodDrillUpstreamAverageOutcomeScore = 0.0f;
|
||||
float ReliableTrustedTightPlanAverageOutcomeScore = 0.0f;
|
||||
float ReliableTrustedBroadPlanAverageOutcomeScore = 0.0f;
|
||||
float ReliableAlignedTrustedTightPlanAverageOutcomeScore = 0.0f;
|
||||
float ReliableAlignedTrustedBroadPlanAverageOutcomeScore = 0.0f;
|
||||
FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind PreferredActionKind =
|
||||
FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::None;
|
||||
bool bHasSignal = false;
|
||||
|
|
@ -215,6 +227,8 @@ struct FHyperTwistCoachDashboardQueueRecoveryWeighting
|
|||
bool bHasMethodDrillMemorySignal = false;
|
||||
bool bHasReliableTrustedPlanSignal = false;
|
||||
bool bHasReliableTrustedPlanOutcomeSignal = false;
|
||||
bool bHasReliableAlignedTrustedPlanSignal = false;
|
||||
bool bHasReliableAlignedTrustedPlanOutcomeSignal = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -308,6 +322,8 @@ struct FHyperTwistCoachDashboardHandoffHistoryEntry
|
|||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bUsedReliableTrustedTightStructurePlanHistory = false;
|
||||
bool bUsedReliableTrustedBroadStructurePlanHistory = false;
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanHistory = false;
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanHistory = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
|
|
@ -389,6 +405,10 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
|
|||
int32 ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
float ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
float MethodDrillRecoveryAverageOutcomeScore = 0.0f;
|
||||
bool bStrongPressureDominant = false;
|
||||
bool bWeakPressureDominant = false;
|
||||
|
|
@ -396,6 +416,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
|
|||
bool bBroadPacketStructureRecoveryDominant = false;
|
||||
bool bReliableTrustedTightStructurePlanDominant = false;
|
||||
bool bReliableTrustedBroadStructurePlanDominant = false;
|
||||
bool bReliableAlignedTrustedTightStructurePlanDominant = false;
|
||||
bool bReliableAlignedTrustedBroadStructurePlanDominant = false;
|
||||
bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false;
|
||||
|
|
@ -403,6 +425,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
|
|||
bool bGeneratedPlanUsedBroadStructureRedirectPosture = false;
|
||||
bool bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture = false;
|
||||
bool bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture = false;
|
||||
bool bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture = false;
|
||||
bool bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture = false;
|
||||
bool bUsedMethodDrillRecoveryMemoryForRecovery = false;
|
||||
bool bUsedMethodDrillRecoveryMemoryForHandoff = false;
|
||||
|
||||
|
|
@ -1446,6 +1470,8 @@ private:
|
|||
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery,
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery,
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanRecovery,
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery,
|
||||
bool bSucceeded
|
||||
);
|
||||
void RecordCoachHandoffHistorySnapshot(
|
||||
|
|
@ -1463,7 +1489,9 @@ private:
|
|||
bool bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture,
|
||||
bool bUsedReliableTrustedTightStructurePlanHistory,
|
||||
bool bUsedReliableTrustedBroadStructurePlanHistory
|
||||
bool bUsedReliableTrustedBroadStructurePlanHistory,
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanHistory,
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanHistory
|
||||
);
|
||||
void RecordQueueSuppressionSnapshot();
|
||||
void RecordClosureRecoverySnapshot();
|
||||
|
|
|
|||
|
|
@ -1983,6 +1983,18 @@ struct FHyperTwistTrainingCoachMemorySnapshot
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bNeedsCoachIntervention = false;
|
||||
|
||||
|
|
@ -5086,6 +5098,18 @@ struct FHyperTwistTrainingCoachPanelState
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SignalCount = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue