Persist drill packet recovery structure upstream

This commit is contained in:
axiomlogicnexus 2026-04-29 17:41:27 +02:00
parent ca9e0425bb
commit 3ee33134c4
13 changed files with 453 additions and 47 deletions

View file

@ -428,6 +428,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued"))
{
return TEXT("accepted narrow drill-recovery-structure queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued"))
{
return TEXT("accepted strong drill-recovery-packet queued dashboard handoff");
@ -440,6 +444,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up"))
{
return TEXT("accepted narrow drill-recovery-structure follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up"))
{
return TEXT("accepted strong drill-recovery-packet follow-up dashboard handoff");
@ -452,6 +460,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted strong drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended"))
{
return TEXT("accepted narrow drill-recovery-structure recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended"))
{
return TEXT("accepted strong drill-recovery-packet recommended dashboard handoff");
@ -464,6 +476,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued"))
{
return TEXT("accepted broad drill-recovery-structure queued dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued"))
{
return TEXT("accepted weak drill-recovery-packet queued dashboard handoff");
@ -476,6 +492,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up"))
{
return TEXT("accepted broad drill-recovery-structure follow-up dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up"))
{
return TEXT("accepted weak drill-recovery-packet follow-up dashboard handoff");
@ -488,6 +508,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("accepted weak drill-recovery-memory recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended"))
{
return TEXT("accepted broad drill-recovery-structure recommended dashboard handoff");
}
if (SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended"))
{
return TEXT("accepted weak drill-recovery-packet recommended dashboard handoff");
@ -556,6 +580,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("successful retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow"))
{
return TEXT("successful narrow drill-recovery-structure history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong"))
{
return TEXT("successful retained drill-recovery-packet history");
@ -568,6 +596,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
{
return TEXT("weak retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad"))
{
return TEXT("successful broad drill-recovery-structure redirect history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak"))
{
return TEXT("weak retained drill-recovery-packet history");
@ -601,13 +633,19 @@ namespace HyperTwistCoachDashboardWidgetInternal
const EMethodDrillRecoveryMemoryBias MethodDrillRecoveryMemoryBias =
EMethodDrillRecoveryMemoryBias::None,
const bool bRetainedMethodDrillRecoveryPostureDriven = false,
const bool bMethodDrillRecoveryPacketDriven = false)
const bool bMethodDrillRecoveryPacketDriven = false,
const bool bNarrowMethodDrillRecoveryStructureDriven = false,
const bool bBroadMethodDrillRecoveryStructureDriven = false)
{
if (MethodDrillRecoveryMemoryBias == EMethodDrillRecoveryMemoryBias::Strong)
{
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
if (bNarrowMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued");
@ -616,6 +654,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
? TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
: TEXT("dashboard-handoff-method-drill-recovery-strong-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
if (bNarrowMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up");
@ -624,6 +666,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
? TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
: TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
if (bNarrowMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended");
@ -640,6 +686,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
switch (HandoffKind)
{
case EHyperTwistTrainingCoachHandoffKind::Queue:
if (bBroadMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued");
@ -648,6 +698,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
? TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
: TEXT("dashboard-handoff-method-drill-recovery-weak-queued");
case EHyperTwistTrainingCoachHandoffKind::FollowUp:
if (bBroadMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up");
@ -656,6 +710,10 @@ namespace HyperTwistCoachDashboardWidgetInternal
? TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
: TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up");
case EHyperTwistTrainingCoachHandoffKind::Recommended:
if (bBroadMethodDrillRecoveryStructureDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended");
}
if (bMethodDrillRecoveryPacketDriven)
{
return TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended");
@ -1588,7 +1646,9 @@ bool UHyperTwistCoachDashboardWidget::DeferDisplayedQueueEntryByDefaultWindow()
return bSucceeded;
}
bool UHyperTwistCoachDashboardWidget::PromoteFirstDeferredQueueEntry()
bool UHyperTwistCoachDashboardWidget::PromoteFirstDeferredQueueEntry(
const FString& StartActionSourceLabel
)
{
FString DeferredEntryId;
if (const FHyperTwistTrainingCoachSessionQueueStateEntry* SelectedEntry = FindSelectedQueueEntry();
@ -1606,7 +1666,7 @@ bool UHyperTwistCoachDashboardWidget::PromoteFirstDeferredQueueEntry()
return false;
}
const bool bSucceeded = PromoteCoachQueueEntry(DeferredEntryId);
const bool bSucceeded = PromoteCoachQueueEntry(DeferredEntryId, StartActionSourceLabel);
SyncSelectedQueueEntry();
UpdateDashboardPresentation();
return bSucceeded;
@ -1782,7 +1842,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
RetainedMethodDrillRecoveryMemoryBias,
MethodDrillRecoveryPacketLaunchBias,
bUseStrongRetainedMethodDrillRecoveryPosture,
bUseMethodDrillRecoveryPacketSignal
bUseMethodDrillRecoveryPacketSignal,
bUseNarrowMethodDrillPacketStructureRecovery,
bUseBroadMethodDrillPacketStructureRecovery
](
const EHyperTwistTrainingCoachHandoffKind HandoffKind)
{
@ -1801,7 +1863,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
false,
HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong,
true,
bUseMethodDrillRecoveryPacketSignal
bUseMethodDrillRecoveryPacketSignal,
bUseNarrowMethodDrillPacketStructureRecovery,
false
);
}
if (bUseMethodDrillRecoveryPacketSignal)
@ -1812,7 +1876,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
false,
MethodDrillRecoveryPacketLaunchBias,
false,
true
true,
bUseNarrowMethodDrillPacketStructureRecovery,
bUseBroadMethodDrillPacketStructureRecovery
);
}
if (bUseMethodDrillRecoverySignal)
@ -1830,12 +1896,38 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
== HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None,
EffectiveRecoverySourceBias,
false,
bUseMethodDrillRecoveryPacketSignal
bUseMethodDrillRecoveryPacketSignal,
bUseNarrowMethodDrillPacketStructureRecovery,
bUseBroadMethodDrillPacketStructureRecovery
);
}
return FString();
};
auto ResolveDeferredRecoveryHandoffKind =
[this](const FString& EntryId) -> EHyperTwistTrainingCoachHandoffKind
{
const FHyperTwistTrainingCoachSessionQueueStateEntry* MatchingEntry =
CachedCoachSessionQueueState.Entries.FindByPredicate(
[&EntryId](const FHyperTwistTrainingCoachSessionQueueStateEntry& Candidate)
{
return Candidate.EntryId == EntryId;
});
if (MatchingEntry == nullptr)
{
return EHyperTwistTrainingCoachHandoffKind::Queue;
}
if (MatchingEntry->bRequiresFollowUp
|| MatchingEntry->SourceLabel == TEXT("follow-up-brief"))
{
return EHyperTwistTrainingCoachHandoffKind::FollowUp;
}
if (MatchingEntry->SourceLabel == TEXT("primary-brief"))
{
return EHyperTwistTrainingCoachHandoffKind::Recommended;
}
return EHyperTwistTrainingCoachHandoffKind::Queue;
};
auto TryPromoteRecovery = [&]() -> bool
{
if (DeferredEntryId.IsEmpty())
@ -1843,7 +1935,9 @@ bool UHyperTwistCoachDashboardWidget::ApplyQueueRecoveryPosture()
return false;
}
const bool bSucceeded = PromoteFirstDeferredQueueEntry();
const FString PromoteActionSourceLabel =
BuildRecoveryLaunchSourceLabel(ResolveDeferredRecoveryHandoffKind(DeferredEntryId));
const bool bSucceeded = PromoteFirstDeferredQueueEntry(PromoteActionSourceLabel);
return RecordAndFinalizeOutcome(
TEXT("promote-deferred-recovery"),
FHyperTwistCoachDashboardQueueRecoveryOutcome::EActionKind::PromoteDeferred,
@ -3013,7 +3107,7 @@ void UHyperTwistCoachDashboardWidget::HandleDeferClicked()
void UHyperTwistCoachDashboardWidget::HandlePromoteClicked()
{
PromoteFirstDeferredQueueEntry();
PromoteFirstDeferredQueueEntry(FString());
}
void UHyperTwistCoachDashboardWidget::HandleApplyQueueRecoveryClicked()

View file

@ -54,12 +54,18 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
@ -80,7 +86,9 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-follow-up-packet-structure-narrow")
|| SourceLabel == TEXT("coach-memory-method-drill-follow-up-packet-structure-broad");
|| SourceLabel == TEXT("coach-memory-method-drill-follow-up-packet-structure-broad")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad");
}
bool IsMethodDrillRecoveryPacketSource(const FString& SourceLabel)
@ -141,7 +149,8 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong")
|| IsNarrowMethodDrillFollowUpPacketStructureSource(SourceLabel);
|| IsNarrowMethodDrillFollowUpPacketStructureSource(SourceLabel)
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow");
}
bool IsWeakMethodDrillRecoveryMemorySource(const FString& SourceLabel)
@ -162,7 +171,8 @@ namespace HyperTwistTrainingCoachLibraryInternal
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak")
|| IsBroadMethodDrillFollowUpPacketStructureSource(SourceLabel);
|| IsBroadMethodDrillFollowUpPacketStructureSource(SourceLabel)
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad");
}
FString DescribeRetainedMethodDrillRecoveryStanceLabel(const FString& SourceLabel)
@ -624,6 +634,10 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("successful retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow"))
{
return TEXT("successful narrow drill-recovery-structure history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-strong"))
{
return TEXT("successful retained drill-recovery-packet history");
@ -632,6 +646,10 @@ namespace HyperTwistTrainingCoachLibraryInternal
{
return TEXT("weak retained drill-recovery-memory history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad"))
{
return TEXT("successful broad drill-recovery-structure redirect history");
}
if (SourceLabel == TEXT("coach-memory-method-drill-recovery-packet-weak"))
{
return TEXT("weak retained drill-recovery-packet history");

View file

@ -241,9 +241,16 @@ bool UHyperTwistTrainingPanelWidget::DeferDisplayedCoachQueueEntry(
);
}
bool UHyperTwistTrainingPanelWidget::PromoteCoachQueueEntry(const FString& EntryId)
bool UHyperTwistTrainingPanelWidget::PromoteCoachQueueEntry(
const FString& EntryId,
const FString& StartActionSourceLabel
)
{
const bool bSucceeded = UHyperTwistTrainingRuntimeLibrary::PromoteCoachSessionQueueEntry(this, EntryId);
const bool bSucceeded = UHyperTwistTrainingRuntimeLibrary::PromoteCoachSessionQueueEntry(
this,
EntryId,
StartActionSourceLabel
);
RefreshTrainingState();
return bSucceeded;
}

View file

@ -97,6 +97,12 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended")
@ -111,6 +117,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended");
@ -138,11 +147,32 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-weak-recommended");
}
bool IsNarrowMethodDrillRecoveryStructureDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued")
|| SourceLabel
== TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up")
|| SourceLabel
== TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended");
}
bool IsBroadMethodDrillRecoveryStructureDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued")
|| SourceLabel
== TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up")
|| SourceLabel
== TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended");
}
bool IsWeakMethodDrillRecoveryPacketDashboardHandoffSource(const FString& SourceLabel)
{
return SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
@ -215,7 +245,9 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-memory-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-strong")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak");
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-posture-weak")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-narrow")
|| SourceLabel == TEXT("coach-memory-method-drill-recovery-structure-broad");
}
bool IsStrongMethodDrillRecoveryPacketCoachMemorySource(const FString& SourceLabel)
@ -248,6 +280,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-queued")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-queued")
@ -263,6 +297,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-follow-up")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-follow-up")
@ -278,6 +314,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
|| SourceLabel == TEXT("dashboard-handoff-method-drill-follow-up-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-strong-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-narrow-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-structure-broad-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-packet-weak-recommended")
|| SourceLabel == TEXT("dashboard-handoff-method-drill-recovery-posture-strong-recommended")
@ -841,6 +879,26 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
WeakRetainedMethodDrillRecoveryPostureStartedCount
- WeakRetainedMethodDrillRecoveryPostureCompletedCount
);
const int32 NarrowMethodDrillRecoveryStructureStartedCount =
QueueExecutionSummary.StartedNarrowMethodDrillRecoveryStructureHandoffEventCount;
const int32 NarrowMethodDrillRecoveryStructureCompletedCount =
QueueExecutionSummary.CompletedNarrowMethodDrillRecoveryStructureHandoffEventCount;
const int32 NarrowMethodDrillRecoveryStructureOutstandingCount = FMath::Max(
0,
NarrowMethodDrillRecoveryStructureStartedCount
- NarrowMethodDrillRecoveryStructureCompletedCount
);
const int32 BroadMethodDrillRecoveryStructureStartedCount =
QueueExecutionSummary.StartedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructurePromotedCount =
QueueExecutionSummary.PromotedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructureCompletedCount =
QueueExecutionSummary.CompletedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructureOutstandingCount = FMath::Max(
0,
BroadMethodDrillRecoveryStructureStartedCount
- BroadMethodDrillRecoveryStructureCompletedCount
);
if (MethodDrillRecoveryStartedCount > 0)
{
Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount;
@ -910,6 +968,27 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
1,
3)
: 0;
const int32 NarrowMethodDrillRecoveryStructureLaunchBias =
NarrowMethodDrillRecoveryStructureStartedCount >= 2
? FMath::Clamp(
(NarrowMethodDrillRecoveryStructureCompletedCount * 2)
- NarrowMethodDrillRecoveryStructureOutstandingCount
+ 1,
1,
3)
: 0;
const int32 BroadMethodDrillRecoveryStructurePromoteBias =
(BroadMethodDrillRecoveryStructurePromotedCount
+ BroadMethodDrillRecoveryStructureStartedCount)
>= 2
? FMath::Clamp(
BroadMethodDrillRecoveryStructurePromotedCount
+ BroadMethodDrillRecoveryStructureOutstandingCount
- BroadMethodDrillRecoveryStructureCompletedCount
+ (QueueExecutionSummary.bHasOutstandingDeferredWork ? 1 : 0),
1,
3)
: 0;
const bool bStrongMethodDrillRecoveryPacketQueuedHandoff =
QueueExecutionSummary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount > 0;
const bool bStrongMethodDrillRecoveryPacketFollowUpHandoff =
@ -1019,7 +1098,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
+ ExplicitMethodDrillFollowUpHandoffSignal
+ MethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryPostureLaunchBias;
+ RetainedMethodDrillRecoveryPostureLaunchBias
+ NarrowMethodDrillRecoveryStructureLaunchBias;
const int32 WeightedRecommendedRecoverySignal =
ExplicitRecommendedRecoverySignal
+ ExplicitRecommendedHandoffSignal
@ -1028,7 +1108,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
+ ExplicitMethodDrillRecommendedHandoffSignal
+ MethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPosturePromoteBias;
+ RetainedMethodDrillRecoveryPosturePromoteBias
+ BroadMethodDrillRecoveryStructurePromoteBias;
const bool bQueueHistoryPrefersFollowUp =
DominantDeferredLane == EHyperTwistTrainingCoachGuidanceLane::FollowUp
|| (DominantCompletedLane == EHyperTwistTrainingCoachGuidanceLane::FollowUp
@ -1047,7 +1128,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
- (QueueExecutionSummary.bHasCompletionGap ? 1.0f : 0.0f)
+ (static_cast<float>(MethodDrillRecoveryPromoteBias) * 1.5f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPromoteBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPosturePromoteBias) * 2.0f);
+ (static_cast<float>(RetainedMethodDrillRecoveryPosturePromoteBias) * 2.0f)
+ (static_cast<float>(BroadMethodDrillRecoveryStructurePromoteBias) * 2.5f);
const float LaunchRecoveryActionPressure =
(QueueExecutionSummary.bHasCompletionGap ? 4.0f : 0.0f)
+ (QueueExecutionSummary.bHasBlockedFollowUpFriction ? 2.5f : 0.0f)
@ -1064,7 +1146,8 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
+ static_cast<float>(ExplicitMethodDrillRecommendedHandoffSignal) * 0.5f
+ (static_cast<float>(MethodDrillRecoveryLaunchBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryLaunchBias) * 2.0f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPostureLaunchBias) * 2.25f);
+ (static_cast<float>(RetainedMethodDrillRecoveryPostureLaunchBias) * 2.25f)
+ (static_cast<float>(NarrowMethodDrillRecoveryStructureLaunchBias) * 2.5f);
if (PromoteRecoveryActionPressure > 0.0f || LaunchRecoveryActionPressure > 0.0f)
{
const FString PacketStructureRecoverySourceLabel =
@ -1121,6 +1204,29 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-weak");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& NarrowMethodDrillRecoveryStructureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillDashboardHandoffSource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-structure-narrow");
}
else if (Snapshot.PreferredQueueRecoveryAction
== EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred
&& BroadMethodDrillRecoveryStructurePromoteBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-structure-broad");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& RetainedMethodDrillRecoveryPostureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
@ -1214,6 +1320,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
{
Snapshot.FollowUpGuidanceContinueBias += RetainedMethodDrillRecoveryLaunchBias;
}
if (NarrowMethodDrillRecoveryStructureLaunchBias > 0)
{
Snapshot.FollowUpGuidanceContinueBias += NarrowMethodDrillRecoveryStructureLaunchBias;
}
if (MethodDrillRecoveryPromoteBias > 0)
{
Snapshot.RecommendedGuidanceContinueBias += MethodDrillRecoveryPromoteBias;
@ -1222,6 +1332,10 @@ namespace HyperTwistTrainingRepositoryLibraryInternal
{
Snapshot.RecommendedGuidanceContinueBias += RetainedMethodDrillRecoveryPromoteBias;
}
if (BroadMethodDrillRecoveryStructurePromoteBias > 0)
{
Snapshot.RecommendedGuidanceContinueBias += BroadMethodDrillRecoveryStructurePromoteBias;
}
if (bQueueHistoryPrefersFollowUp
&& Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred)
{
@ -7221,6 +7335,26 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
WeakRetainedMethodDrillRecoveryPostureStartedCount
- WeakRetainedMethodDrillRecoveryPostureCompletedCount
);
const int32 NarrowMethodDrillRecoveryStructureStartedCount =
QueueExecutionSummary.StartedNarrowMethodDrillRecoveryStructureHandoffEventCount;
const int32 NarrowMethodDrillRecoveryStructureCompletedCount =
QueueExecutionSummary.CompletedNarrowMethodDrillRecoveryStructureHandoffEventCount;
const int32 NarrowMethodDrillRecoveryStructureOutstandingCount = FMath::Max(
0,
NarrowMethodDrillRecoveryStructureStartedCount
- NarrowMethodDrillRecoveryStructureCompletedCount
);
const int32 BroadMethodDrillRecoveryStructureStartedCount =
QueueExecutionSummary.StartedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructurePromotedCount =
QueueExecutionSummary.PromotedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructureCompletedCount =
QueueExecutionSummary.CompletedBroadMethodDrillRecoveryStructureHandoffEventCount;
const int32 BroadMethodDrillRecoveryStructureOutstandingCount = FMath::Max(
0,
BroadMethodDrillRecoveryStructureStartedCount
- BroadMethodDrillRecoveryStructureCompletedCount
);
if (MethodDrillRecoveryStartedCount > 0)
{
Snapshot.MethodDrillRecoveryHistoryCount += MethodDrillRecoveryStartedCount;
@ -7290,6 +7424,27 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
1,
3)
: 0;
const int32 NarrowMethodDrillRecoveryStructureLaunchBias =
NarrowMethodDrillRecoveryStructureStartedCount >= 2
? FMath::Clamp(
(NarrowMethodDrillRecoveryStructureCompletedCount * 2)
- NarrowMethodDrillRecoveryStructureOutstandingCount
+ 1,
1,
3)
: 0;
const int32 BroadMethodDrillRecoveryStructurePromoteBias =
(BroadMethodDrillRecoveryStructurePromotedCount
+ BroadMethodDrillRecoveryStructureStartedCount)
>= 2
? FMath::Clamp(
BroadMethodDrillRecoveryStructurePromotedCount
+ BroadMethodDrillRecoveryStructureOutstandingCount
- BroadMethodDrillRecoveryStructureCompletedCount
+ (QueueExecutionSummary.bHasOutstandingDeferredWork ? 1 : 0),
1,
3)
: 0;
const int32 StrongMethodDrillFollowUpPacketStartedCount =
QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketQueuedHandoffEventCount
+ QueueExecutionSummary.StartedStrongMethodDrillFollowUpPacketFollowUpHandoffEventCount
@ -7481,19 +7636,21 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
+ ExplicitDeferredFirstQueuedHandoffSignal
+ ExplicitDeferredFirstFollowUpHandoffSignal
+ ExplicitMethodDrillQueuedHandoffSignal
+ ExplicitMethodDrillFollowUpHandoffSignal
+ MethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryPostureLaunchBias;
const int32 WeightedRecommendedRecoverySignal =
ExplicitRecommendedRecoverySignal
+ ExplicitMethodDrillFollowUpHandoffSignal
+ MethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryLaunchBias
+ RetainedMethodDrillRecoveryPostureLaunchBias
+ NarrowMethodDrillRecoveryStructureLaunchBias;
const int32 WeightedRecommendedRecoverySignal =
ExplicitRecommendedRecoverySignal
+ ExplicitRecommendedHandoffSignal
+ ExplicitDeferredOverflowRecommendedHandoffSignal
+ ExplicitDeferredFirstRecommendedHandoffSignal
+ ExplicitMethodDrillRecommendedHandoffSignal
+ MethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPosturePromoteBias;
+ ExplicitMethodDrillRecommendedHandoffSignal
+ MethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPromoteBias
+ RetainedMethodDrillRecoveryPosturePromoteBias
+ BroadMethodDrillRecoveryStructurePromoteBias;
const bool bQueueHistoryPrefersFollowUp =
DominantDeferredLane == EHyperTwistTrainingCoachGuidanceLane::FollowUp
|| (DominantCompletedLane == EHyperTwistTrainingCoachGuidanceLane::FollowUp
@ -7508,11 +7665,12 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
(QueueExecutionSummary.bHasOutstandingDeferredWork ? 4.0f : 0.0f)
+ FMath::Min(static_cast<float>(QueueExecutionSummary.DeferredEventCount) * 0.75f, 3.0f)
+ FMath::Min(static_cast<float>(QueueExecutionSummary.PromotedEventCount), 3.0f)
+ (DominantDeferredLane != EHyperTwistTrainingCoachGuidanceLane::None ? 1.5f : 0.0f)
- (QueueExecutionSummary.bHasCompletionGap ? 1.0f : 0.0f)
+ (static_cast<float>(MethodDrillRecoveryPromoteBias) * 1.5f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPromoteBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPosturePromoteBias) * 2.0f);
+ (DominantDeferredLane != EHyperTwistTrainingCoachGuidanceLane::None ? 1.5f : 0.0f)
- (QueueExecutionSummary.bHasCompletionGap ? 1.0f : 0.0f)
+ (static_cast<float>(MethodDrillRecoveryPromoteBias) * 1.5f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPromoteBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPosturePromoteBias) * 2.0f)
+ (static_cast<float>(BroadMethodDrillRecoveryStructurePromoteBias) * 2.5f);
const float LaunchRecoveryActionPressure =
(QueueExecutionSummary.bHasCompletionGap ? 4.0f : 0.0f)
+ (QueueExecutionSummary.bHasBlockedFollowUpFriction ? 2.5f : 0.0f)
@ -7525,11 +7683,12 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
+ static_cast<float>(ExplicitDeferredFirstQueuedHandoffSignal)
+ static_cast<float>(ExplicitDeferredFirstFollowUpHandoffSignal) * 0.5f
+ static_cast<float>(ExplicitMethodDrillQueuedHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillFollowUpHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillRecommendedHandoffSignal) * 0.5f
+ (static_cast<float>(MethodDrillRecoveryLaunchBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryLaunchBias) * 2.0f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPostureLaunchBias) * 2.25f);
+ static_cast<float>(ExplicitMethodDrillFollowUpHandoffSignal)
+ static_cast<float>(ExplicitMethodDrillRecommendedHandoffSignal) * 0.5f
+ (static_cast<float>(MethodDrillRecoveryLaunchBias) * 1.75f)
+ (static_cast<float>(RetainedMethodDrillRecoveryLaunchBias) * 2.0f)
+ (static_cast<float>(RetainedMethodDrillRecoveryPostureLaunchBias) * 2.25f)
+ (static_cast<float>(NarrowMethodDrillRecoveryStructureLaunchBias) * 2.5f);
if (PromoteRecoveryActionPressure > 0.0f || LaunchRecoveryActionPressure > 0.0f)
{
const FString PacketStructureRecoverySourceLabel =
@ -7585,6 +7744,29 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-packet-weak");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& NarrowMethodDrillRecoveryStructureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillDashboardHandoffSource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-structure-narrow");
}
else if (Snapshot.PreferredQueueRecoveryAction
== EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred
&& BroadMethodDrillRecoveryStructurePromoteBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
|| Snapshot.PreferredQueueRecoveryActionSourceLabel.StartsWith(TEXT("queue-history"))
|| HyperTwistTrainingRepositoryLibraryInternal::IsMethodDrillRecoveryCoachMemorySource(
Snapshot.PreferredQueueRecoveryActionSourceLabel)))
{
Snapshot.PreferredQueueRecoveryActionSourceLabel =
TEXT("coach-memory-method-drill-recovery-structure-broad");
}
else if (Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::LaunchRecovery
&& RetainedMethodDrillRecoveryPostureLaunchBias > 0
&& (Snapshot.PreferredQueueRecoveryActionSourceLabel.IsEmpty()
@ -7678,6 +7860,10 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
{
Snapshot.FollowUpGuidanceContinueBias += RetainedMethodDrillRecoveryLaunchBias;
}
if (NarrowMethodDrillRecoveryStructureLaunchBias > 0)
{
Snapshot.FollowUpGuidanceContinueBias += NarrowMethodDrillRecoveryStructureLaunchBias;
}
if (MethodDrillRecoveryPromoteBias > 0)
{
Snapshot.RecommendedGuidanceContinueBias += MethodDrillRecoveryPromoteBias;
@ -7686,6 +7872,10 @@ FHyperTwistTrainingCoachMemorySnapshot UHyperTwistTrainingRepositoryLibrary::Der
{
Snapshot.RecommendedGuidanceContinueBias += RetainedMethodDrillRecoveryPromoteBias;
}
if (BroadMethodDrillRecoveryStructurePromoteBias > 0)
{
Snapshot.RecommendedGuidanceContinueBias += BroadMethodDrillRecoveryStructurePromoteBias;
}
if (bQueueHistoryPrefersFollowUp
&& Snapshot.PreferredQueueRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::PromoteDeferred)
{
@ -9137,6 +9327,7 @@ FHyperTwistTrainingCoachSessionQueueState UHyperTwistTrainingRepositoryLibrary::
FHyperTwistTrainingCoachSessionQueueState UHyperTwistTrainingRepositoryLibrary::PromoteCoachSessionQueueEntry(
const FHyperTwistTrainingCoachSessionQueueState& QueueState,
const FString& EntryId,
const FString& StartActionSourceLabel,
const FString& ReferenceUtc
)
{
@ -9170,6 +9361,10 @@ FHyperTwistTrainingCoachSessionQueueState UHyperTwistTrainingRepositoryLibrary::
EntryToPromote->DeferredUntilUtc.Reset();
EntryToPromote->bCanStartImmediately = true;
EntryToPromote->SlotIndex = -1;
if (!StartActionSourceLabel.IsEmpty())
{
EntryToPromote->StartActionSourceLabel = StartActionSourceLabel;
}
UpdatedQueueState.LastUpdatedAtUtc = ResolvedReferenceUtc;
return HyperTwistTrainingRepositoryLibraryInternal::NormalizeCoachSessionQueueState(UpdatedQueueState);
}
@ -9483,6 +9678,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
const bool bStrongMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bNarrowMethodDrillRecoveryStructureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsNarrowMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
@ -9492,6 +9690,9 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
const bool bWeakMethodDrillRecoveryPacketDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryPacketDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bBroadMethodDrillRecoveryStructureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
@ -9525,10 +9726,18 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedStrongMethodDrillRecoveryPacketQueuedHandoffEventCount += 1;
}
if (bNarrowMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedNarrowMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketQueuedHandoffEventCount += 1;
}
if (bBroadMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedBroadMethodDrillRecoveryStructureHandoffEventCount += 1;
}
}
else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::FollowUp)
{
@ -9557,10 +9766,18 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedStrongMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1;
}
if (bNarrowMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedNarrowMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketFollowUpHandoffEventCount += 1;
}
if (bBroadMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedBroadMethodDrillRecoveryStructureHandoffEventCount += 1;
}
}
else if (DashboardHandoffKind == EHyperTwistTrainingCoachHandoffKind::Recommended)
{
@ -9589,10 +9806,18 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.StartedStrongMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1;
}
if (bNarrowMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedNarrowMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryPacketDashboardHandoff)
{
Summary.StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount += 1;
}
if (bBroadMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.StartedBroadMethodDrillRecoveryStructureHandoffEventCount += 1;
}
}
if (bStrongMethodDrillRecoveryDashboardHandoff)
{
@ -9646,6 +9871,16 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.PromotedRecommendedEventCount += 1;
}
if (HyperTwistTrainingRepositoryLibraryInternal::IsNarrowMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel))
{
Summary.PromotedNarrowMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel))
{
Summary.PromotedBroadMethodDrillRecoveryStructureHandoffEventCount += 1;
}
break;
case EHyperTwistTrainingCoachSessionQueueEventKind::Completed:
Summary.CompletedEventCount += 1;
@ -9663,9 +9898,15 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
const bool bStrongMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bNarrowMethodDrillRecoveryStructureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsNarrowMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bWeakMethodDrillRecoveryDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsWeakMethodDrillRecoveryDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bBroadMethodDrillRecoveryStructureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsBroadMethodDrillRecoveryStructureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
const bool bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff =
HyperTwistTrainingRepositoryLibraryInternal::IsStrongRetainedMethodDrillRecoveryPostureDashboardHandoffSource(
HistoryEntry.StartActionSourceLabel);
@ -9691,10 +9932,18 @@ FHyperTwistTrainingCoachSessionQueueExecutionSummary UHyperTwistTrainingReposito
{
Summary.CompletedStrongMethodDrillRecoveryMemoryHandoffEventCount += 1;
}
if (bNarrowMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.CompletedNarrowMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (bWeakMethodDrillRecoveryDashboardHandoff)
{
Summary.CompletedWeakMethodDrillRecoveryMemoryHandoffEventCount += 1;
}
if (bBroadMethodDrillRecoveryStructureDashboardHandoff)
{
Summary.CompletedBroadMethodDrillRecoveryStructureHandoffEventCount += 1;
}
if (bStrongRetainedMethodDrillRecoveryPostureDashboardHandoff)
{
Summary.CompletedStrongRetainedMethodDrillRecoveryPostureHandoffEventCount += 1;

View file

@ -852,12 +852,16 @@ bool UHyperTwistTrainingRuntimeLibrary::DeferCoachSessionQueueEntry(
bool UHyperTwistTrainingRuntimeLibrary::PromoteCoachSessionQueueEntry(
UObject* WorldContextObject,
const FString& EntryId
const FString& EntryId,
const FString& StartActionSourceLabel
)
{
if (UHyperTwistTrainingSubsystem* TrainingSubsystem = GetTrainingSubsystem(WorldContextObject))
{
return TrainingSubsystem->PromoteCoachSessionQueueEntry(EntryId);
return TrainingSubsystem->PromoteCoachSessionQueueEntry(
EntryId,
StartActionSourceLabel
);
}
return false;

View file

@ -218,7 +218,11 @@ bool AHyperTwistTrainingSessionActor::DeferDisplayedCoachQueueEntry(
bool AHyperTwistTrainingSessionActor::PromoteCoachQueueEntry(const FString& EntryId)
{
const bool bSucceeded = UHyperTwistTrainingRuntimeLibrary::PromoteCoachSessionQueueEntry(this, EntryId);
const bool bSucceeded = UHyperTwistTrainingRuntimeLibrary::PromoteCoachSessionQueueEntry(
this,
EntryId,
FString()
);
RefreshCachedTrainingState();
return bSucceeded;
}

View file

@ -1482,7 +1482,10 @@ bool UHyperTwistTrainingSubsystem::DeferCoachSessionQueueEntry(
return true;
}
bool UHyperTwistTrainingSubsystem::PromoteCoachSessionQueueEntry(const FString& EntryId)
bool UHyperTwistTrainingSubsystem::PromoteCoachSessionQueueEntry(
const FString& EntryId,
const FString& StartActionSourceLabel
)
{
if (!ActiveCoachSessionQueueState.IsStructurallyValid() || EntryId.IsEmpty())
{
@ -1492,6 +1495,7 @@ bool UHyperTwistTrainingSubsystem::PromoteCoachSessionQueueEntry(const FString&
ActiveCoachSessionQueueState = UHyperTwistTrainingRepositoryLibrary::PromoteCoachSessionQueueEntry(
ActiveCoachSessionQueueState,
EntryId,
StartActionSourceLabel,
FDateTime::UtcNow().ToIso8601()
);
if (!ActiveCoachSessionQueueState.IsStructurallyValid())

View file

@ -496,7 +496,7 @@ public:
bool DeferDisplayedQueueEntryByDefaultWindow();
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
bool PromoteFirstDeferredQueueEntry();
bool PromoteFirstDeferredQueueEntry(const FString& StartActionSourceLabel);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
bool ApplyQueueRecoveryPosture();

View file

@ -170,7 +170,10 @@ public:
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
bool PromoteCoachQueueEntry(const FString& EntryId);
bool PromoteCoachQueueEntry(
const FString& EntryId,
const FString& StartActionSourceLabel
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Drill")
FHyperTwistTrainingRunState StartActiveMethodDrillFollowUpRun(const FString& SessionId);

View file

@ -437,6 +437,7 @@ public:
static FHyperTwistTrainingCoachSessionQueueState PromoteCoachSessionQueueEntry(
const FHyperTwistTrainingCoachSessionQueueState& QueueState,
const FString& EntryId,
const FString& StartActionSourceLabel,
const FString& ReferenceUtc
);

View file

@ -335,7 +335,8 @@ public:
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach", meta = (WorldContext = "WorldContextObject"))
static bool PromoteCoachSessionQueueEntry(
UObject* WorldContextObject,
const FString& EntryId
const FString& EntryId,
const FString& StartActionSourceLabel
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Drill", meta = (WorldContext = "WorldContextObject"))

View file

@ -277,7 +277,10 @@ public:
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
bool PromoteCoachSessionQueueEntry(const FString& EntryId);
bool PromoteCoachSessionQueueEntry(
const FString& EntryId,
const FString& StartActionSourceLabel
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Drill")
bool RemoveMethodDrillBatch(

View file

@ -3717,6 +3717,24 @@ struct FHyperTwistTrainingCoachSessionQueueExecutionSummary
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedWeakMethodDrillRecoveryPacketRecommendedHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedNarrowMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 PromotedNarrowMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 CompletedNarrowMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 StartedBroadMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 PromotedBroadMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 CompletedBroadMethodDrillRecoveryStructureHandoffEventCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 CompletedMethodDrillQueuedHandoffEventCount = 0;