Retain drill recovery plan posture history

This commit is contained in:
axiomlogicnexus 2026-04-29 17:55:13 +02:00
parent 4420dba93e
commit ba04128d39
2 changed files with 173 additions and 22 deletions

View file

@ -91,6 +91,8 @@ namespace HyperTwistCoachDashboardWidgetInternal
int32 StrongQueueEntryCount = 0;
int32 StrongFollowUpPacketCount = 0;
int32 WeakRecommendedBriefCount = 0;
int32 TightContinuationPlanCount = 0;
int32 BroadRedirectPlanCount = 0;
int32 LaunchRecoveryBias = 0;
int32 PromoteRecoveryBias = 0;
int32 QueueHandoffBias = 0;
@ -113,6 +115,47 @@ namespace HyperTwistCoachDashboardWidgetInternal
return TEXT("Unknown");
}
bool IsTightCoachPlanPosture(
const EHyperTwistTrainingDeliveryMode SuggestedMode,
const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy)
{
return SuggestedSelectionPolicy == EHyperTwistTrainingSelectionPolicy::Scripted
&& (SuggestedMode == EHyperTwistTrainingDeliveryMode::CoachReviewed
|| SuggestedMode == EHyperTwistTrainingDeliveryMode::RecognitionAssisted);
}
bool IsBroadCoachPlanPosture(
const EHyperTwistTrainingDeliveryMode SuggestedMode,
const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy)
{
return SuggestedSelectionPolicy != EHyperTwistTrainingSelectionPolicy::Scripted
&& SuggestedMode != EHyperTwistTrainingDeliveryMode::CoachReviewed;
}
FString DescribeCoachPlanPosture(
const EHyperTwistTrainingDeliveryMode SuggestedMode,
const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy)
{
if (IsTightCoachPlanPosture(SuggestedMode, SuggestedSelectionPolicy))
{
return TEXT("tight reviewed/scripted continuation");
}
if (IsBroadCoachPlanPosture(SuggestedMode, SuggestedSelectionPolicy))
{
return TEXT("broad redirect default");
}
if (SuggestedSelectionPolicy == EHyperTwistTrainingSelectionPolicy::Scripted)
{
return TEXT("scripted mixed posture");
}
if (SuggestedMode == EHyperTwistTrainingDeliveryMode::CoachReviewed)
{
return TEXT("reviewed mixed posture");
}
return TEXT("neutral default posture");
}
FString DescribeGuidanceLane(const EHyperTwistTrainingCoachGuidanceLane Lane)
{
switch (Lane)
@ -1402,14 +1445,20 @@ namespace HyperTwistCoachDashboardWidgetInternal
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
}
else if (bNarrowStructureRecovery)
else if (bNarrowStructureRecovery)
{
Bias.StrongQueueEntryCount += HistoryWeight;
Bias.QueueHandoffBias += HistoryWeight * 2;
Bias.LaunchRecoveryBias += HistoryWeight * 2;
if (Entry.bGeneratedPlanUsedTightStructureContinuationPosture)
{
Bias.StrongQueueEntryCount += HistoryWeight;
Bias.QueueHandoffBias += HistoryWeight * 2;
Bias.LaunchRecoveryBias += HistoryWeight * 2;
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
Bias.TightContinuationPlanCount += HistoryWeight;
Bias.QueueHandoffBias += HistoryWeight;
Bias.LaunchRecoveryBias += HistoryWeight;
}
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
}
else if (bGenericPacket)
{
Bias.QueueHandoffBias += HistoryWeight;
@ -1431,14 +1480,20 @@ namespace HyperTwistCoachDashboardWidgetInternal
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
}
else if (bNarrowStructureRecovery)
else if (bNarrowStructureRecovery)
{
Bias.StrongFollowUpPacketCount += HistoryWeight;
Bias.FollowUpHandoffBias += HistoryWeight * 3;
Bias.LaunchRecoveryBias += HistoryWeight * 2;
if (Entry.bGeneratedPlanUsedTightStructureContinuationPosture)
{
Bias.StrongFollowUpPacketCount += HistoryWeight;
Bias.FollowUpHandoffBias += HistoryWeight * 3;
Bias.LaunchRecoveryBias += HistoryWeight * 2;
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
Bias.TightContinuationPlanCount += HistoryWeight;
Bias.FollowUpHandoffBias += HistoryWeight;
Bias.LaunchRecoveryBias += HistoryWeight;
}
Bias.bHasStrongContinuationSignal = true;
Bias.bHasSignal = true;
}
else if (bGenericPacket)
{
Bias.FollowUpHandoffBias += HistoryWeight;
@ -1460,14 +1515,20 @@ namespace HyperTwistCoachDashboardWidgetInternal
Bias.bHasWeakRedirectSignal = true;
Bias.bHasSignal = true;
}
else if (bBroadStructureRecovery)
else if (bBroadStructureRecovery)
{
Bias.WeakRecommendedBriefCount += HistoryWeight;
Bias.RecommendedHandoffBias += HistoryWeight * 3;
Bias.PromoteRecoveryBias += HistoryWeight * 2;
if (Entry.bGeneratedPlanUsedBroadStructureRedirectPosture)
{
Bias.WeakRecommendedBriefCount += HistoryWeight;
Bias.RecommendedHandoffBias += HistoryWeight * 3;
Bias.PromoteRecoveryBias += HistoryWeight * 2;
Bias.bHasWeakRedirectSignal = true;
Bias.bHasSignal = true;
Bias.BroadRedirectPlanCount += HistoryWeight;
Bias.RecommendedHandoffBias += HistoryWeight;
Bias.PromoteRecoveryBias += HistoryWeight;
}
Bias.bHasWeakRedirectSignal = true;
Bias.bHasSignal = true;
}
else if (bGenericPacket)
{
Bias.RecommendedHandoffBias += HistoryWeight;
@ -7097,6 +7158,28 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
|| SourceLabel.Contains(TEXT("method-drill-recovery-memory-weak"));
};
const FString GuidanceSourceLabel = CachedCoachPanelState.PreferredGuidanceSourceLabel;
const auto ApplyGeneratedPlanSnapshot =
[&Entry](
const EHyperTwistTrainingDeliveryMode SuggestedMode,
const EHyperTwistTrainingSelectionPolicy SuggestedSelectionPolicy)
{
Entry.GeneratedPlanSuggestedMode = SuggestedMode;
Entry.GeneratedPlanSuggestedSelectionPolicy = SuggestedSelectionPolicy;
Entry.GeneratedPlanPostureLabel =
HyperTwistCoachDashboardWidgetInternal::DescribeCoachPlanPosture(
SuggestedMode,
SuggestedSelectionPolicy);
Entry.bGeneratedPlanUsedTightStructureContinuationPosture =
Entry.bNarrowPacketStructureRecoveryDominant
&& HyperTwistCoachDashboardWidgetInternal::IsTightCoachPlanPosture(
SuggestedMode,
SuggestedSelectionPolicy);
Entry.bGeneratedPlanUsedBroadStructureRedirectPosture =
Entry.bBroadPacketStructureRecoveryDominant
&& HyperTwistCoachDashboardWidgetInternal::IsBroadCoachPlanPosture(
SuggestedMode,
SuggestedSelectionPolicy);
};
const bool bStrongPacketPosture =
SourceUsesStrongRetainedMethodDrillRecoveryPosture(GuidanceSourceLabel)
|| SourceUsesStrongRetainedMethodDrillRecoveryPosture(
@ -7132,6 +7215,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
? SelectedQueueEntry->SourceLabel
: SelectedQueueEntry->Headline;
Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
SelectedQueueEntry->SuggestedMode,
SelectedQueueEntry->SuggestedSelectionPolicy);
}
}
else if (Entry.RecommendedHandoffKindLabel.Equals(TEXT("follow-up"), ESearchCase::IgnoreCase))
@ -7141,6 +7227,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
Entry.GeneratedGuidancePacketHeadline = CachedCoachFollowUpBrief.Headline;
Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel;
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
CachedCoachFollowUpBrief.SuggestedMode,
CachedCoachFollowUpBrief.SuggestedSelectionPolicy);
}
else if (Entry.RecommendedHandoffKindLabel.Equals(TEXT("recommended"), ESearchCase::IgnoreCase))
{
@ -7149,6 +7238,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
Entry.GeneratedGuidancePacketHeadline = CachedCoachBrief.Headline;
Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel;
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
CachedCoachBrief.SuggestedMode,
CachedCoachBrief.SuggestedSelectionPolicy);
}
if (Entry.GeneratedGuidancePacketKindLabel.IsEmpty())
{
@ -7161,6 +7253,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
Entry.GeneratedGuidancePacketHeadline = CachedCoachFollowUpBrief.Headline;
Entry.GeneratedGuidancePacketActionLabel = CachedCoachFollowUpBrief.PrimaryActionLabel;
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachFollowUpBrief.FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
CachedCoachFollowUpBrief.SuggestedMode,
CachedCoachFollowUpBrief.SuggestedSelectionPolicy);
}
else if (const FHyperTwistTrainingCoachSessionQueueStateEntry* SelectedQueueEntry =
FindSelectedQueueEntry())
@ -7173,6 +7268,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
? SelectedQueueEntry->SourceLabel
: SelectedQueueEntry->Headline;
Entry.GeneratedGuidancePacketFocusCaseCount = SelectedQueueEntry->FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
SelectedQueueEntry->SuggestedMode,
SelectedQueueEntry->SuggestedSelectionPolicy);
}
else if (!CachedCoachBrief.Headline.IsEmpty()
|| !CachedCoachBrief.PrimaryActionLabel.IsEmpty()
@ -7183,6 +7281,9 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
Entry.GeneratedGuidancePacketHeadline = CachedCoachBrief.Headline;
Entry.GeneratedGuidancePacketActionLabel = CachedCoachBrief.PrimaryActionLabel;
Entry.GeneratedGuidancePacketFocusCaseCount = CachedCoachBrief.FocusCaseIds.Num();
ApplyGeneratedPlanSnapshot(
CachedCoachBrief.SuggestedMode,
CachedCoachBrief.SuggestedSelectionPolicy);
}
}
if (!Entry.IsStructurallyValid())
@ -7236,12 +7337,22 @@ void UHyperTwistCoachDashboardWidget::RecordMethodDrillRecoveryMemoryHistorySnap
== Entry.GeneratedGuidancePacketActionLabel
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedGuidancePacketFocusCaseCount
== Entry.GeneratedGuidancePacketFocusCaseCount
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanSuggestedMode
== Entry.GeneratedPlanSuggestedMode
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanSuggestedSelectionPolicy
== Entry.GeneratedPlanSuggestedSelectionPolicy
&& MethodDrillRecoveryMemoryHistoryEntries.Last().GeneratedPlanPostureLabel
== Entry.GeneratedPlanPostureLabel
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture
== Entry.bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture
== Entry.bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPacketUsedGenericMethodDrillRecoveryMemory
== Entry.bGeneratedPacketUsedGenericMethodDrillRecoveryMemory
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedTightStructureContinuationPosture
== Entry.bGeneratedPlanUsedTightStructureContinuationPosture
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bGeneratedPlanUsedBroadStructureRedirectPosture
== Entry.bGeneratedPlanUsedBroadStructureRedirectPosture
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForRecovery
== Entry.bUsedMethodDrillRecoveryMemoryForRecovery
&& MethodDrillRecoveryMemoryHistoryEntries.Last().bUsedMethodDrillRecoveryMemoryForHandoff
@ -8625,13 +8736,15 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
EffectiveMethodDrillRecoveryMemoryHandoffBias)
);
CoachHandoffRecommendationDetailLine += FString::Printf(
TEXT(" | packet history queue/follow-up/recommended %d/%d/%d | strong packet queue/follow-up %d/%d | weak packet recommended %d | packet preferred: %s"),
TEXT(" | packet history queue/follow-up/recommended %d/%d/%d | strong packet queue/follow-up %d/%d | weak packet recommended %d | tight/broad plan posture %d/%d | packet preferred: %s"),
MethodDrillRecoveryPacketHandoffBias.QueueEntryHistoryCount,
MethodDrillRecoveryPacketHandoffBias.FollowUpPacketHistoryCount,
MethodDrillRecoveryPacketHandoffBias.RecommendedBriefHistoryCount,
MethodDrillRecoveryPacketHandoffBias.StrongQueueEntryCount,
MethodDrillRecoveryPacketHandoffBias.StrongFollowUpPacketCount,
MethodDrillRecoveryPacketHandoffBias.WeakRecommendedBriefCount,
MethodDrillRecoveryPacketHandoffBias.TightContinuationPlanCount,
MethodDrillRecoveryPacketHandoffBias.BroadRedirectPlanCount,
*HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind(
MethodDrillRecoveryPacketHandoffBias.PreferredHandoffKind)
);
@ -9053,7 +9166,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
: *QueueDeferredFirstSuppressionSignal->Detail)
: TEXT("");
const 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 | packet history queue/follow-up/recommended %d/%d/%d | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.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 | retained strong-launch %d/%d, weak-promote %d/%d | drill-driven bias promote/launch %d/%d | packet history queue/follow-up/recommended %d/%d/%d | packet-plan posture tight/broad %d/%d | packet bias promote/launch %d/%d | upstream drill recovery strong/weak/history %d/%d/%d avg %.1f | retained drill-recovery stance: %s"),
CachedCoachQueueExecutionSummary.DeferredEventCount,
CachedCoachQueueExecutionSummary.PromotedEventCount,
CachedCoachQueueExecutionSummary.ManualRescheduleEventCount,
@ -9091,6 +9204,8 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
MethodDrillRecoveryPacketQueueBias.QueueEntryHistoryCount,
MethodDrillRecoveryPacketQueueBias.FollowUpPacketHistoryCount,
MethodDrillRecoveryPacketQueueBias.RecommendedBriefHistoryCount,
MethodDrillRecoveryPacketQueueBias.TightContinuationPlanCount,
MethodDrillRecoveryPacketQueueBias.BroadRedirectPlanCount,
MethodDrillRecoveryPacketQueueBias.PromoteRecoveryBias,
MethodDrillRecoveryPacketQueueBias.LaunchRecoveryBias,
QueueRecoveryWeighting.MethodDrillUpstreamStrongCount,
@ -9363,6 +9478,23 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
|| SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketActionLabel.IsEmpty()
? TEXT("n/a")
: SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketActionLabel;
const FString MethodDrillRecoveryMemoryGeneratedPlanModeLine =
SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr
|| SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketKindLabel.IsEmpty()
? TEXT("n/a")
: HyperTwistCoachDashboardWidgetInternal::EnumDisplayName(
SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanSuggestedMode);
const FString MethodDrillRecoveryMemoryGeneratedPlanSelectionLine =
SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr
|| SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketKindLabel.IsEmpty()
? TEXT("n/a")
: HyperTwistCoachDashboardWidgetInternal::EnumDisplayName(
SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanSuggestedSelectionPolicy);
const FString MethodDrillRecoveryMemoryGeneratedPlanPostureLine =
SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr
|| SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanPostureLabel.IsEmpty()
? TEXT("n/a")
: SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedPlanPostureLabel;
const FString MethodDrillRecoveryMemoryGeneratedPacketStanceLine =
SelectedMethodDrillRecoveryMemoryHistoryEntry == nullptr
? TEXT("n/a")
@ -9377,7 +9509,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
SelectedMethodDrillRecoveryMemoryHistoryEntry != nullptr
&& SelectedMethodDrillRecoveryMemoryHistoryEntry->IsStructurallyValid()
? FString::Printf(
TEXT("Drill recovery memory history: %d entries | selected %d/%d | %s | %s | Packet: %s | Stance: %s | Recorded: %s"),
TEXT("Drill recovery memory history: %d entries | selected %d/%d | %s | %s | Packet: %s | Stance: %s | Plan: %s | Recorded: %s"),
MethodDrillRecoveryMemoryHistoryEntries.Num(),
SelectedMethodDrillRecoveryMemoryHistoryIndex + 1,
MethodDrillRecoveryMemoryHistoryEntries.Num(),
@ -9386,13 +9518,14 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
*MethodDrillRecoveryMemoryGeneratedPacketKindLine,
*HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryMemoryBias(
SelectedMethodDrillRecoveryMemoryHistoryBias),
*MethodDrillRecoveryMemoryGeneratedPlanPostureLine,
*SelectedMethodDrillRecoveryMemoryHistoryEntry->RecordedAtUtc)
: TEXT("Drill recovery memory history: no retained upstream drill-recovery memory shifts recorded yet.");
const FString MethodDrillRecoveryMemoryHistoryDetailLine =
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 | Dominant pressure: %s | Structure bias: %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 | 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 | Dominant pressure: %s | Structure bias: %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 | Tight/broad structure plan: %s/%s | Packet stance: %s | Recovery posture: %s | Handoff posture: %s"),
*MethodDrillRecoveryMemorySourceLine,
SelectedMethodDrillRecoveryMemoryHistoryEntry->StrongMethodDrillRecoveryHistoryCount,
SelectedMethodDrillRecoveryMemoryHistoryEntry->WeakMethodDrillRecoveryHistoryCount,
@ -9426,6 +9559,17 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation()
*MethodDrillRecoveryMemoryGeneratedPacketHeadlineLine,
*MethodDrillRecoveryMemoryGeneratedPacketActionLine,
SelectedMethodDrillRecoveryMemoryHistoryEntry->GeneratedGuidancePacketFocusCaseCount,
*MethodDrillRecoveryMemoryGeneratedPlanModeLine,
*MethodDrillRecoveryMemoryGeneratedPlanSelectionLine,
*MethodDrillRecoveryMemoryGeneratedPlanPostureLine,
SelectedMethodDrillRecoveryMemoryHistoryEntry
->bGeneratedPlanUsedTightStructureContinuationPosture
? TEXT("yes")
: TEXT("no"),
SelectedMethodDrillRecoveryMemoryHistoryEntry
->bGeneratedPlanUsedBroadStructureRedirectPosture
? TEXT("yes")
: TEXT("no"),
*MethodDrillRecoveryMemoryGeneratedPacketStanceLine,
*SelectedMethodDrillRecoveryMemoryHistoryEntry->QueueRecoveryStatusLine,
*SelectedMethodDrillRecoveryMemoryHistoryEntry->HandoffRecommendationStatusLine)

View file

@ -353,6 +353,11 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
FString GeneratedGuidancePacketHeadline;
FString GeneratedGuidancePacketActionLabel;
int32 GeneratedGuidancePacketFocusCaseCount = 0;
EHyperTwistTrainingDeliveryMode GeneratedPlanSuggestedMode =
EHyperTwistTrainingDeliveryMode::Timer;
EHyperTwistTrainingSelectionPolicy GeneratedPlanSuggestedSelectionPolicy =
EHyperTwistTrainingSelectionPolicy::Weighted;
FString GeneratedPlanPostureLabel;
int32 MethodDrillRecoveryHistoryCount = 0;
int32 StrongMethodDrillRecoveryHistoryCount = 0;
int32 WeakMethodDrillRecoveryHistoryCount = 0;
@ -368,6 +373,8 @@ struct FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry
bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false;
bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false;
bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false;
bool bGeneratedPlanUsedTightStructureContinuationPosture = false;
bool bGeneratedPlanUsedBroadStructureRedirectPosture = false;
bool bUsedMethodDrillRecoveryMemoryForRecovery = false;
bool bUsedMethodDrillRecoveryMemoryForHandoff = false;