Expose dashboard method-drill recovery history inspect surfaces
This commit is contained in:
parent
47ab518373
commit
28d846ec1d
5 changed files with 887 additions and 2 deletions
|
|
@ -7381,6 +7381,453 @@ UHyperTwistCoachDashboardWidget::GetSelectedClosureRecoveryHistoryInspectSurface
|
|||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface() const
|
||||
{
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface Surface;
|
||||
Surface.Headline = TEXT("Method-drill recovery outcome history");
|
||||
|
||||
TArray<int32> MethodDrillRecoveryHistoryIndices;
|
||||
HyperTwistCoachDashboardWidgetInternal::CollectMethodDrillRecoveryOutcomeIndices(
|
||||
QueueRecoveryOutcomeHistory,
|
||||
MethodDrillRecoveryHistoryIndices);
|
||||
const int32 SelectedHistoryPosition =
|
||||
MethodDrillRecoveryHistoryIndices.IndexOfByKey(SelectedMethodDrillRecoveryOutcomeIndex);
|
||||
const FHyperTwistCoachDashboardQueueRecoveryOutcome* SelectedOutcome =
|
||||
SelectedMethodDrillRecoveryOutcomeIndex >= 0
|
||||
&& SelectedMethodDrillRecoveryOutcomeIndex < QueueRecoveryOutcomeHistory.Num()
|
||||
? &QueueRecoveryOutcomeHistory[SelectedMethodDrillRecoveryOutcomeIndex]
|
||||
: nullptr;
|
||||
Surface.HistoryEntryCount = MethodDrillRecoveryHistoryIndices.Num();
|
||||
Surface.SelectedHistoryIndex = SelectedHistoryPosition;
|
||||
Surface.bHasSelectedEntry =
|
||||
SelectedOutcome != nullptr
|
||||
&& SelectedOutcome->IsStructurallyValid()
|
||||
&& SelectedHistoryPosition != INDEX_NONE;
|
||||
if (!Surface.bHasSelectedEntry)
|
||||
{
|
||||
Surface.StatusLine =
|
||||
TEXT("Drill recovery history: no retained drill-weighted queue-recovery outcomes recorded yet.");
|
||||
Surface.DetailLine =
|
||||
TEXT("Drill recovery detail: when drill-weighted queue recovery actions are applied, their retained before/after friction outcomes will accumulate here for later comparison against generic recovery.");
|
||||
return Surface;
|
||||
}
|
||||
|
||||
Surface.RecordedAtUtc = SelectedOutcome->RecordedAtUtc;
|
||||
Surface.SourceLabel = SelectedOutcome->SourceLabel;
|
||||
Surface.SourceDescription =
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel(
|
||||
SelectedOutcome->SourceLabel);
|
||||
Surface.AppliedActionLabel = SelectedOutcome->AppliedActionLabel;
|
||||
Surface.AppliedAction =
|
||||
HyperTwistCoachDashboardWidgetInternal::ToQueueRecoveryAction(
|
||||
SelectedOutcome->ActionKind);
|
||||
Surface.BeforePressureScore = SelectedOutcome->BeforePressureScore;
|
||||
Surface.AfterPressureScore = SelectedOutcome->AfterPressureScore;
|
||||
Surface.BeforeDeferredEventCount = SelectedOutcome->BeforeDeferredEventCount;
|
||||
Surface.AfterDeferredEventCount = SelectedOutcome->AfterDeferredEventCount;
|
||||
Surface.bSucceeded = SelectedOutcome->bSucceeded;
|
||||
Surface.bReducedFriction = SelectedOutcome->bReducedFriction;
|
||||
Surface.bShiftedFriction = SelectedOutcome->bShiftedFriction;
|
||||
Surface.bBeforeBlockedFollowUp = SelectedOutcome->bBeforeBlockedFollowUp;
|
||||
Surface.bAfterBlockedFollowUp = SelectedOutcome->bAfterBlockedFollowUp;
|
||||
Surface.bBeforeOutstandingDeferred = SelectedOutcome->bBeforeOutstandingDeferred;
|
||||
Surface.bAfterOutstandingDeferred = SelectedOutcome->bAfterOutstandingDeferred;
|
||||
Surface.bBeforeCompletionGap = SelectedOutcome->bBeforeCompletionGap;
|
||||
Surface.bAfterCompletionGap = SelectedOutcome->bAfterCompletionGap;
|
||||
Surface.bUsedDeferredFirstSuppressionSignal =
|
||||
SelectedOutcome->bUsedDeferredFirstSuppressionSignal;
|
||||
Surface.bUsedMethodDrillHandoffSignal = SelectedOutcome->bUsedMethodDrillHandoffSignal;
|
||||
Surface.bUsedNarrowMethodDrillPacketStructureRecovery =
|
||||
SelectedOutcome->bUsedNarrowMethodDrillPacketStructureRecovery;
|
||||
Surface.bUsedBroadMethodDrillPacketStructureRecovery =
|
||||
SelectedOutcome->bUsedBroadMethodDrillPacketStructureRecovery;
|
||||
Surface.bUsedStrongRetainedMethodDrillRecoveryPosture =
|
||||
SelectedOutcome->bUsedStrongRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bUsedWeakRetainedMethodDrillRecoveryPosture =
|
||||
SelectedOutcome->bUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bUsedReliableTrustedTightStructurePlanRecovery =
|
||||
SelectedOutcome->bUsedReliableTrustedTightStructurePlanRecovery;
|
||||
Surface.bUsedReliableTrustedBroadStructurePlanRecovery =
|
||||
SelectedOutcome->bUsedReliableTrustedBroadStructurePlanRecovery;
|
||||
Surface.bUsedReliableAlignedTrustedTightStructurePlanRecovery =
|
||||
SelectedOutcome->bUsedReliableAlignedTrustedTightStructurePlanRecovery;
|
||||
Surface.bUsedReliableAlignedTrustedBroadStructurePlanRecovery =
|
||||
SelectedOutcome->bUsedReliableAlignedTrustedBroadStructurePlanRecovery;
|
||||
Surface.VerdictLine = !SelectedOutcome->bSucceeded
|
||||
? TEXT("failed")
|
||||
: (SelectedOutcome->bReducedFriction
|
||||
? TEXT("reduced friction")
|
||||
: (SelectedOutcome->bShiftedFriction
|
||||
? TEXT("shifted friction")
|
||||
: TEXT("no immediate change")));
|
||||
Surface.PacketStructureRecoveryLine =
|
||||
SelectedOutcome->bUsedNarrowMethodDrillPacketStructureRecovery
|
||||
? TEXT("narrow continuation")
|
||||
: (SelectedOutcome->bUsedBroadMethodDrillPacketStructureRecovery
|
||||
? TEXT("broad redirect")
|
||||
: TEXT("none"));
|
||||
Surface.RetainedPostureLine =
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeRetainedMethodDrillRecoveryPosture(
|
||||
SelectedOutcome->bUsedStrongRetainedMethodDrillRecoveryPosture,
|
||||
SelectedOutcome->bUsedWeakRetainedMethodDrillRecoveryPosture);
|
||||
Surface.ReliablePlanRecoveryLine =
|
||||
SelectedOutcome->bUsedReliableAlignedTrustedTightStructurePlanRecovery
|
||||
? TEXT("aligned reliable tight continuation")
|
||||
: (SelectedOutcome->bUsedReliableAlignedTrustedBroadStructurePlanRecovery
|
||||
? TEXT("aligned reliable broad redirect")
|
||||
: (SelectedOutcome->bUsedReliableTrustedTightStructurePlanRecovery
|
||||
? TEXT("trusted tight continuation")
|
||||
: (SelectedOutcome->bUsedReliableTrustedBroadStructurePlanRecovery
|
||||
? TEXT("trusted broad redirect")
|
||||
: TEXT("none"))));
|
||||
Surface.StatusLine = FString::Printf(
|
||||
TEXT("Drill recovery history: %d entries | selected %d/%d | %s | %s | Packet recovery: %s | Stance: %s | Recorded: %s"),
|
||||
MethodDrillRecoveryHistoryIndices.Num(),
|
||||
SelectedHistoryPosition + 1,
|
||||
MethodDrillRecoveryHistoryIndices.Num(),
|
||||
*SelectedOutcome->AppliedActionLabel,
|
||||
*Surface.VerdictLine,
|
||||
*Surface.PacketStructureRecoveryLine,
|
||||
*Surface.RetainedPostureLine,
|
||||
*SelectedOutcome->RecordedAtUtc);
|
||||
Surface.DetailLine = FString::Printf(
|
||||
TEXT("Source: %s | Pressure %.2f -> %.2f | Deferred %d -> %d | Blocked follow-up %s -> %s | Outstanding deferred %s -> %s | Completion gap %s -> %s | deferred-first weighted: %s | packet-structure recovery: %s | retained posture: %s"),
|
||||
*Surface.SourceDescription,
|
||||
SelectedOutcome->BeforePressureScore,
|
||||
SelectedOutcome->AfterPressureScore,
|
||||
SelectedOutcome->BeforeDeferredEventCount,
|
||||
SelectedOutcome->AfterDeferredEventCount,
|
||||
SelectedOutcome->bBeforeBlockedFollowUp ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bAfterBlockedFollowUp ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bBeforeOutstandingDeferred ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bAfterOutstandingDeferred ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bBeforeCompletionGap ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bAfterCompletionGap ? TEXT("yes") : TEXT("no"),
|
||||
SelectedOutcome->bUsedDeferredFirstSuppressionSignal ? TEXT("yes") : TEXT("no"),
|
||||
*Surface.PacketStructureRecoveryLine,
|
||||
*Surface.RetainedPostureLine);
|
||||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetSelectedMethodDrillRecoveryMemoryHistoryInspectSurface() const
|
||||
{
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface Surface;
|
||||
Surface.Headline = TEXT("Method-drill recovery memory history");
|
||||
const HyperTwistCoachDashboardWidgetInternal::FMethodDrillRecoveryPlanComparisonSummary PlanComparisonSummary =
|
||||
HyperTwistCoachDashboardWidgetInternal::DeriveMethodDrillRecoveryPlanComparisonSummary(
|
||||
MethodDrillRecoveryMemoryHistoryEntries);
|
||||
const FHyperTwistCoachDashboardMethodDrillRecoveryMemoryHistoryEntry* SelectedEntry =
|
||||
SelectedMethodDrillRecoveryMemoryHistoryIndex >= 0
|
||||
&& SelectedMethodDrillRecoveryMemoryHistoryIndex
|
||||
< MethodDrillRecoveryMemoryHistoryEntries.Num()
|
||||
? &MethodDrillRecoveryMemoryHistoryEntries[SelectedMethodDrillRecoveryMemoryHistoryIndex]
|
||||
: nullptr;
|
||||
Surface.SelectedEntryIndex = SelectedMethodDrillRecoveryMemoryHistoryIndex;
|
||||
Surface.HistoryEntryCount = MethodDrillRecoveryMemoryHistoryEntries.Num();
|
||||
Surface.bHasSelectedEntry =
|
||||
SelectedEntry != nullptr && SelectedEntry->IsStructurallyValid();
|
||||
if (!Surface.bHasSelectedEntry)
|
||||
{
|
||||
Surface.StatusLine =
|
||||
TEXT("Drill recovery memory history: no retained upstream drill-recovery memory shifts recorded yet.");
|
||||
Surface.DetailLine =
|
||||
TEXT("Drill recovery memory detail: retained upstream strong-vs-weak drill-recovery pressure, resulting generated packet lane, and resulting plan-source vs generated-plan alignment will accumulate here for later comparison.");
|
||||
return Surface;
|
||||
}
|
||||
|
||||
const HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias MemoryBias =
|
||||
SelectedEntry->bStrongPressureDominant
|
||||
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Strong
|
||||
: (SelectedEntry->bWeakPressureDominant
|
||||
? HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::Weak
|
||||
: HyperTwistCoachDashboardWidgetInternal::EMethodDrillRecoveryMemoryBias::None);
|
||||
Surface.RecordedAtUtc = SelectedEntry->RecordedAtUtc;
|
||||
Surface.PreferredRecoveryAction = SelectedEntry->PreferredRecoveryAction;
|
||||
Surface.PreferredRecoveryActionLabel =
|
||||
SelectedEntry->PreferredRecoveryAction == EHyperTwistTrainingQueueRecoveryAction::None
|
||||
? TEXT("none")
|
||||
: HyperTwistCoachDashboardWidgetInternal::EnumDisplayName(
|
||||
SelectedEntry->PreferredRecoveryAction);
|
||||
Surface.PreferredRecoveryActionSourceLabel =
|
||||
SelectedEntry->PreferredRecoveryActionSourceLabel;
|
||||
Surface.PreferredRecoveryActionSourceDescription =
|
||||
SelectedEntry->PreferredRecoveryActionSourceLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel(
|
||||
SelectedEntry->PreferredRecoveryActionSourceLabel);
|
||||
Surface.RecommendedHandoffKindLabel = SelectedEntry->RecommendedHandoffKindLabel;
|
||||
Surface.QueueRecoveryStatusLine = SelectedEntry->QueueRecoveryStatusLine;
|
||||
Surface.HandoffRecommendationStatusLine =
|
||||
SelectedEntry->HandoffRecommendationStatusLine;
|
||||
Surface.GeneratedGuidancePacketKindLabel =
|
||||
SelectedEntry->GeneratedGuidancePacketKindLabel.IsEmpty()
|
||||
? TEXT("none")
|
||||
: SelectedEntry->GeneratedGuidancePacketKindLabel;
|
||||
Surface.GeneratedGuidancePacketSourceLabel =
|
||||
SelectedEntry->GeneratedGuidancePacketSourceLabel;
|
||||
Surface.GeneratedGuidancePacketSourceDescription =
|
||||
SelectedEntry->GeneratedGuidancePacketSourceLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HyperTwistCoachDashboardWidgetInternal::DescribeCoachMemorySourceLabel(
|
||||
SelectedEntry->GeneratedGuidancePacketSourceLabel);
|
||||
Surface.GeneratedGuidancePacketHeadline =
|
||||
SelectedEntry->GeneratedGuidancePacketHeadline.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: SelectedEntry->GeneratedGuidancePacketHeadline;
|
||||
Surface.GeneratedGuidancePacketActionLabel =
|
||||
SelectedEntry->GeneratedGuidancePacketActionLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: SelectedEntry->GeneratedGuidancePacketActionLabel;
|
||||
Surface.GeneratedGuidancePacketFocusCaseCount =
|
||||
SelectedEntry->GeneratedGuidancePacketFocusCaseCount;
|
||||
Surface.GeneratedPlanSuggestedMode = SelectedEntry->GeneratedPlanSuggestedMode;
|
||||
Surface.GeneratedPlanModeLabel =
|
||||
SelectedEntry->GeneratedGuidancePacketKindLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HyperTwistCoachDashboardWidgetInternal::EnumDisplayName(
|
||||
SelectedEntry->GeneratedPlanSuggestedMode);
|
||||
Surface.GeneratedPlanSuggestedSelectionPolicy =
|
||||
SelectedEntry->GeneratedPlanSuggestedSelectionPolicy;
|
||||
Surface.GeneratedPlanSelectionLabel =
|
||||
SelectedEntry->GeneratedGuidancePacketKindLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: HyperTwistCoachDashboardWidgetInternal::EnumDisplayName(
|
||||
SelectedEntry->GeneratedPlanSuggestedSelectionPolicy);
|
||||
Surface.GeneratedPlanPostureLabel =
|
||||
SelectedEntry->GeneratedPlanPostureLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: SelectedEntry->GeneratedPlanPostureLabel;
|
||||
Surface.DominantPressureLine =
|
||||
SelectedEntry->bStrongPressureDominant
|
||||
? TEXT("strong")
|
||||
: (SelectedEntry->bWeakPressureDominant ? TEXT("weak") : TEXT("balanced"));
|
||||
Surface.StructureBiasLine =
|
||||
SelectedEntry->bNarrowPacketStructureRecoveryDominant
|
||||
? TEXT("narrow continuation")
|
||||
: (SelectedEntry->bBroadPacketStructureRecoveryDominant
|
||||
? TEXT("broad redirect")
|
||||
: TEXT("none"));
|
||||
Surface.ReliablePlanLine = [&]() -> FString
|
||||
{
|
||||
if (SelectedEntry->bReliableAlignedTrustedTightStructurePlanOutcomeDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted tight launched-plan continuation");
|
||||
}
|
||||
if (SelectedEntry->bReliableAlignedTrustedBroadStructurePlanOutcomeDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted broad launched-plan redirect");
|
||||
}
|
||||
if (SelectedEntry->bReliableAlignedTrustedTightStructurePlanDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted tight continuation");
|
||||
}
|
||||
if (SelectedEntry->bReliableAlignedTrustedBroadStructurePlanDominant)
|
||||
{
|
||||
return TEXT("aligned reliable trusted broad redirect");
|
||||
}
|
||||
if (SelectedEntry->bReliableTrustedTightStructurePlanDominant)
|
||||
{
|
||||
return TEXT("reliable trusted tight continuation");
|
||||
}
|
||||
if (SelectedEntry->bReliableTrustedBroadStructurePlanDominant)
|
||||
{
|
||||
return TEXT("reliable trusted broad redirect");
|
||||
}
|
||||
return TEXT("none");
|
||||
}();
|
||||
Surface.MemoryBiasLine =
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryMemoryBias(
|
||||
MemoryBias);
|
||||
Surface.PlanSourceLine =
|
||||
SelectedEntry->PreferredRecoveryActionSourceLabel.IsEmpty()
|
||||
? TEXT("none")
|
||||
: HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryPlanSourceLabel(
|
||||
SelectedEntry->PreferredRecoveryActionSourceLabel);
|
||||
Surface.PlanAlignmentLine =
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryPlanAlignment(
|
||||
*SelectedEntry);
|
||||
Surface.ComparisonPreferenceLine =
|
||||
HyperTwistCoachDashboardWidgetInternal::DescribeMethodDrillRecoveryPlanComparisonPreference(
|
||||
PlanComparisonSummary);
|
||||
Surface.GeneratedPacketStanceLine =
|
||||
SelectedEntry->bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture
|
||||
? TEXT("strong retained drill-recovery continuation")
|
||||
: (SelectedEntry->bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture
|
||||
? TEXT("weak retained drill-recovery redirect")
|
||||
: (SelectedEntry->bGeneratedPacketUsedGenericMethodDrillRecoveryMemory
|
||||
? TEXT("generic drill-recovery memory")
|
||||
: TEXT("none")));
|
||||
Surface.MethodDrillRecoveryHistoryCount = SelectedEntry->MethodDrillRecoveryHistoryCount;
|
||||
Surface.StrongMethodDrillRecoveryHistoryCount =
|
||||
SelectedEntry->StrongMethodDrillRecoveryHistoryCount;
|
||||
Surface.WeakMethodDrillRecoveryHistoryCount =
|
||||
SelectedEntry->WeakMethodDrillRecoveryHistoryCount;
|
||||
Surface.NarrowMethodDrillPacketStructureRecoveryLaunchCount =
|
||||
SelectedEntry->NarrowMethodDrillPacketStructureRecoveryLaunchCount;
|
||||
Surface.NarrowMethodDrillPacketStructureRecoveryLaunchReducedCount =
|
||||
SelectedEntry->NarrowMethodDrillPacketStructureRecoveryLaunchReducedCount;
|
||||
Surface.BroadMethodDrillPacketStructureRecoveryPromoteCount =
|
||||
SelectedEntry->BroadMethodDrillPacketStructureRecoveryPromoteCount;
|
||||
Surface.BroadMethodDrillPacketStructureRecoveryPromoteReducedCount =
|
||||
SelectedEntry->BroadMethodDrillPacketStructureRecoveryPromoteReducedCount;
|
||||
Surface.TrustedTightMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->TrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount =
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount;
|
||||
Surface.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore =
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore;
|
||||
Surface.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount =
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount;
|
||||
Surface.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount =
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount;
|
||||
Surface.ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore =
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore;
|
||||
Surface.ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore =
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore;
|
||||
Surface.MethodDrillRecoveryAverageOutcomeScore =
|
||||
SelectedEntry->MethodDrillRecoveryAverageOutcomeScore;
|
||||
Surface.bStrongPressureDominant = SelectedEntry->bStrongPressureDominant;
|
||||
Surface.bWeakPressureDominant = SelectedEntry->bWeakPressureDominant;
|
||||
Surface.bNarrowPacketStructureRecoveryDominant =
|
||||
SelectedEntry->bNarrowPacketStructureRecoveryDominant;
|
||||
Surface.bBroadPacketStructureRecoveryDominant =
|
||||
SelectedEntry->bBroadPacketStructureRecoveryDominant;
|
||||
Surface.bReliableTrustedTightStructurePlanDominant =
|
||||
SelectedEntry->bReliableTrustedTightStructurePlanDominant;
|
||||
Surface.bReliableTrustedBroadStructurePlanDominant =
|
||||
SelectedEntry->bReliableTrustedBroadStructurePlanDominant;
|
||||
Surface.bReliableAlignedTrustedTightStructurePlanDominant =
|
||||
SelectedEntry->bReliableAlignedTrustedTightStructurePlanDominant;
|
||||
Surface.bReliableAlignedTrustedBroadStructurePlanDominant =
|
||||
SelectedEntry->bReliableAlignedTrustedBroadStructurePlanDominant;
|
||||
Surface.bReliableAlignedTrustedTightStructurePlanOutcomeDominant =
|
||||
SelectedEntry->bReliableAlignedTrustedTightStructurePlanOutcomeDominant;
|
||||
Surface.bReliableAlignedTrustedBroadStructurePlanOutcomeDominant =
|
||||
SelectedEntry->bReliableAlignedTrustedBroadStructurePlanOutcomeDominant;
|
||||
Surface.bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture =
|
||||
SelectedEntry->bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture =
|
||||
SelectedEntry->bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture;
|
||||
Surface.bGeneratedPacketUsedGenericMethodDrillRecoveryMemory =
|
||||
SelectedEntry->bGeneratedPacketUsedGenericMethodDrillRecoveryMemory;
|
||||
Surface.bGeneratedPlanUsedTightStructureContinuationPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedTightStructureContinuationPosture;
|
||||
Surface.bGeneratedPlanUsedBroadStructureRedirectPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedBroadStructureRedirectPosture;
|
||||
Surface.bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture;
|
||||
Surface.bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture;
|
||||
Surface.bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture;
|
||||
Surface.bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture =
|
||||
SelectedEntry->bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture;
|
||||
Surface.bUsedMethodDrillRecoveryMemoryForRecovery =
|
||||
SelectedEntry->bUsedMethodDrillRecoveryMemoryForRecovery;
|
||||
Surface.bUsedMethodDrillRecoveryMemoryForHandoff =
|
||||
SelectedEntry->bUsedMethodDrillRecoveryMemoryForHandoff;
|
||||
Surface.StatusLine = FString::Printf(
|
||||
TEXT("Drill recovery memory history: %d entries | selected %d/%d | %s | %s | Packet: %s | Stance: %s | Plan source: %s | Plan align: %s | Reliable stance: %s | Plan: %s | Recorded: %s"),
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Num(),
|
||||
SelectedMethodDrillRecoveryMemoryHistoryIndex + 1,
|
||||
MethodDrillRecoveryMemoryHistoryEntries.Num(),
|
||||
*Surface.PreferredRecoveryActionLabel,
|
||||
*SelectedEntry->RecommendedHandoffKindLabel,
|
||||
*Surface.GeneratedGuidancePacketKindLabel,
|
||||
*Surface.MemoryBiasLine,
|
||||
*Surface.PlanSourceLine,
|
||||
*Surface.PlanAlignmentLine,
|
||||
*Surface.ReliablePlanLine,
|
||||
*Surface.GeneratedPlanPostureLabel,
|
||||
*SelectedEntry->RecordedAtUtc);
|
||||
Surface.DetailLine = 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 | Aligned reliable plan outcome 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"),
|
||||
*Surface.PreferredRecoveryActionSourceDescription,
|
||||
SelectedEntry->StrongMethodDrillRecoveryHistoryCount,
|
||||
SelectedEntry->WeakMethodDrillRecoveryHistoryCount,
|
||||
SelectedEntry->MethodDrillRecoveryHistoryCount,
|
||||
SelectedEntry->MethodDrillRecoveryAverageOutcomeScore,
|
||||
SelectedEntry->NarrowMethodDrillPacketStructureRecoveryLaunchCount,
|
||||
SelectedEntry->NarrowMethodDrillPacketStructureRecoveryLaunchReducedCount,
|
||||
SelectedEntry->BroadMethodDrillPacketStructureRecoveryPromoteCount,
|
||||
SelectedEntry->BroadMethodDrillPacketStructureRecoveryPromoteReducedCount,
|
||||
SelectedEntry->TrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedEntry->TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount,
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount,
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore,
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore,
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedEntry->ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedEntry->ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount,
|
||||
SelectedEntry->ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
SelectedEntry->ReliableTrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore,
|
||||
*Surface.DominantPressureLine,
|
||||
*Surface.StructureBiasLine,
|
||||
*Surface.ReliablePlanLine,
|
||||
*Surface.MemoryBiasLine,
|
||||
SelectedEntry->bUsedMethodDrillRecoveryMemoryForRecovery ? TEXT("yes") : TEXT("no"),
|
||||
SelectedEntry->bUsedMethodDrillRecoveryMemoryForHandoff ? TEXT("yes") : TEXT("no"),
|
||||
*Surface.GeneratedGuidancePacketKindLabel,
|
||||
*Surface.GeneratedGuidancePacketSourceDescription,
|
||||
*Surface.GeneratedGuidancePacketHeadline,
|
||||
*Surface.GeneratedGuidancePacketActionLabel,
|
||||
SelectedEntry->GeneratedGuidancePacketFocusCaseCount,
|
||||
*Surface.GeneratedPlanModeLabel,
|
||||
*Surface.GeneratedPlanSelectionLabel,
|
||||
*Surface.GeneratedPlanPostureLabel,
|
||||
*Surface.PlanSourceLine,
|
||||
*Surface.PlanAlignmentLine,
|
||||
PlanComparisonSummary.TightPlanAlignedCount,
|
||||
PlanComparisonSummary.TightPlanDivergedCount,
|
||||
PlanComparisonSummary.BroadPlanAlignedCount,
|
||||
PlanComparisonSummary.BroadPlanDivergedCount,
|
||||
PlanComparisonSummary.ReliableAlignedTrustedTightPlanAlignedCount,
|
||||
PlanComparisonSummary.ReliableAlignedTrustedTightPlanDivergedCount,
|
||||
PlanComparisonSummary.ReliableAlignedTrustedBroadPlanAlignedCount,
|
||||
PlanComparisonSummary.ReliableAlignedTrustedBroadPlanDivergedCount,
|
||||
PlanComparisonSummary.ReliableTrustedTightPlanAlignedCount,
|
||||
PlanComparisonSummary.ReliableTrustedTightPlanDivergedCount,
|
||||
PlanComparisonSummary.ReliableTrustedBroadPlanAlignedCount,
|
||||
PlanComparisonSummary.ReliableTrustedBroadPlanDivergedCount,
|
||||
*Surface.ComparisonPreferenceLine,
|
||||
SelectedEntry->bGeneratedPlanUsedTightStructureContinuationPosture
|
||||
? TEXT("yes")
|
||||
: TEXT("no"),
|
||||
SelectedEntry->bGeneratedPlanUsedBroadStructureRedirectPosture
|
||||
? TEXT("yes")
|
||||
: TEXT("no"),
|
||||
*Surface.GeneratedPacketStanceLine,
|
||||
*SelectedEntry->QueueRecoveryStatusLine,
|
||||
*SelectedEntry->HandoffRecommendationStatusLine);
|
||||
return Surface;
|
||||
}
|
||||
|
||||
bool UHyperTwistCoachDashboardWidget::SelectPreviousMethodDrillFollowUpHistoryEntry()
|
||||
{
|
||||
if (MethodDrillFollowUpHistoryEntries.Num() <= 0)
|
||||
|
|
|
|||
|
|
@ -739,6 +739,14 @@ public:
|
|||
FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryInspectSurface
|
||||
GetSelectedClosureRecoveryHistoryInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface
|
||||
GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface
|
||||
GetSelectedMethodDrillRecoveryMemoryHistoryInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
bool SelectPreviousMethodDrillFollowUpHistoryEntry();
|
||||
|
||||
|
|
|
|||
|
|
@ -8657,6 +8657,386 @@ struct FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryInspectSurface
|
|||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Headline;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString StatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DetailLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RecordedAtUtc;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SourceLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SourceDescription;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString AppliedActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString VerdictLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PacketStructureRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RetainedPostureLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ReliablePlanRecoveryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SelectedHistoryIndex = INDEX_NONE;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 HistoryEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float BeforePressureScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float AfterPressureScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 BeforeDeferredEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 AfterDeferredEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingQueueRecoveryAction AppliedAction =
|
||||
EHyperTwistTrainingQueueRecoveryAction::None;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasSelectedEntry = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bSucceeded = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReducedFriction = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bShiftedFriction = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeBlockedFollowUp = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterBlockedFollowUp = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeOutstandingDeferred = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterOutstandingDeferred = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBeforeCompletionGap = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bAfterCompletionGap = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedDeferredFirstSuppressionSignal = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedMethodDrillHandoffSignal = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedNarrowMethodDrillPacketStructureRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedBroadMethodDrillPacketStructureRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableTrustedTightStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableAlignedTrustedTightStructurePlanRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedReliableAlignedTrustedBroadStructurePlanRecovery = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !StatusLine.IsEmpty()
|
||||
|| !DetailLine.IsEmpty()
|
||||
|| bHasSelectedEntry
|
||||
|| HistoryEntryCount > 0;
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Headline;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString StatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DetailLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RecordedAtUtc;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PreferredRecoveryActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PreferredRecoveryActionSourceLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PreferredRecoveryActionSourceDescription;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RecommendedHandoffKindLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString QueueRecoveryStatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString HandoffRecommendationStatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedGuidancePacketKindLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedGuidancePacketSourceLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedGuidancePacketSourceDescription;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedGuidancePacketHeadline;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedGuidancePacketActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedPlanModeLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedPlanSelectionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedPlanPostureLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DominantPressureLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString StructureBiasLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ReliablePlanLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString MemoryBiasLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PlanSourceLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PlanAlignmentLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString ComparisonPreferenceLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GeneratedPacketStanceLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SelectedEntryIndex = INDEX_NONE;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 HistoryEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 GeneratedGuidancePacketFocusCaseCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 MethodDrillRecoveryHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 StrongMethodDrillRecoveryHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 WeakMethodDrillRecoveryHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 NarrowMethodDrillPacketStructureRecoveryLaunchCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 NarrowMethodDrillPacketStructureRecoveryLaunchReducedCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 BroadMethodDrillPacketStructureRecoveryPromoteCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 BroadMethodDrillPacketStructureRecoveryPromoteReducedCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 TrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 TrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float TrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float TrustedBroadMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableTrustedTightMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableTrustedBroadMethodDrillRecoveryStructurePlanHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableTrustedTightMethodDrillRecoveryStructurePlanAverageOutcomeScore = 0.0f;
|
||||
|
||||
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 ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeHistoryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedTightMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReliableAlignedTrustedBroadMethodDrillRecoveryStructurePlanOutcomeAverageScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float MethodDrillRecoveryAverageOutcomeScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingQueueRecoveryAction PreferredRecoveryAction =
|
||||
EHyperTwistTrainingQueueRecoveryAction::None;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingDeliveryMode GeneratedPlanSuggestedMode =
|
||||
EHyperTwistTrainingDeliveryMode::Timer;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingSelectionPolicy GeneratedPlanSuggestedSelectionPolicy =
|
||||
EHyperTwistTrainingSelectionPolicy::Weighted;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasSelectedEntry = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bStrongPressureDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bWeakPressureDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bNarrowPacketStructureRecoveryDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bBroadPacketStructureRecoveryDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableTrustedTightStructurePlanDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableTrustedBroadStructurePlanDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableAlignedTrustedTightStructurePlanDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableAlignedTrustedBroadStructurePlanDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableAlignedTrustedTightStructurePlanOutcomeDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bReliableAlignedTrustedBroadStructurePlanOutcomeDominant = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPacketUsedStrongRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPacketUsedWeakRetainedMethodDrillRecoveryPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPacketUsedGenericMethodDrillRecoveryMemory = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedTightStructureContinuationPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedBroadStructureRedirectPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedReliableTrustedTightStructureContinuationPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedReliableTrustedBroadStructureRedirectPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedReliableAlignedTrustedTightStructureContinuationPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bGeneratedPlanUsedReliableAlignedTrustedBroadStructureRedirectPosture = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedMethodDrillRecoveryMemoryForRecovery = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bUsedMethodDrillRecoveryMemoryForHandoff = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !StatusLine.IsEmpty()
|
||||
|| !DetailLine.IsEmpty()
|
||||
|| bHasSelectedEntry
|
||||
|| HistoryEntryCount > 0;
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachGeneratedModeLaunchExecutionContextSurface
|
||||
{
|
||||
|
|
|
|||
|
|
@ -69,8 +69,8 @@ Current correction call from the source-exposed audit and current execution refr
|
|||
- the latest landed bounded `Phase 4` packet closes the retained-idle comparison/outcome actionability gap at the end of the recognition-assisted coach-to-review continuity lane, and the final retained-surface confirmation pass now leaves that closure lane functionally complete
|
||||
- the retained idle widget surface now keeps retained comparison and decision history inspectable without continuing to advertise live launch or guidance-outcome actions once the coach-to-review loop has already collapsed to truthful closed-loop idle
|
||||
- the now-complete deliberate `UHyperTwistTrainingRuntimeLibrary` world-context consumer lane reaches through active generated-mode selector option owned-execution split-phase current-selection merged ordered roster phase-id lookup, normalized-order lookup, and evaluation-order lookup inspect surfaces, so gameplay/Blueprint callers can inspect one retained merged-roster row directly by phase id, normalized order, or evaluation order without scanning the merged roster array or re-running inspect derivation details directly
|
||||
- the latest landed bounded `Phase 4` packet pivots deliberately to the next broader orchestration lane in `UHyperTwistCoachDashboardWidget` and adds displayed queue-recovery outcome, selected queue-suppression history, and selected closure-recovery history inspect surfaces over already-retained dashboard state, so gameplay/Blueprint callers can inspect retained recovery posture shifts without scraping dashboard text blocks or reopening backend derivation
|
||||
- the current next bounded packet should stay on that same dashboard retained-history inspect lane only while a real gameplay or Blueprint caller still needs one more thin inspect contract over already-retained dashboard recovery state; the next clean move inside that lane is the method-drill recovery outcome history and method-drill recovery memory history inspect pair rather than widening back into backend continuity or runtime-library drift
|
||||
- the latest landed bounded `Phase 4` packet stays on that same deliberate `UHyperTwistCoachDashboardWidget` retained-history inspect lane and adds selected method-drill recovery outcome history and selected method-drill recovery memory history inspect surfaces over already-retained dashboard state, so gameplay/Blueprint callers can inspect retained drill-recovery outcome shifts and upstream recovery-memory posture without scraping dashboard text blocks or reopening recovery-memory comparison derivation
|
||||
- the current next bounded packet should stay on that same dashboard retained-history inspect lane only while a real gameplay or Blueprint caller still needs one more thin inspect contract over already-retained dashboard history state; the next clean move inside that lane is the method-drill follow-up history and handoff history inspect pair rather than widening back into backend continuity or runtime-library drift
|
||||
- the current execution-discipline rule that broad refactor / monolith-splitting work should not interrupt the active bounded roadmap packet unless structure is actually blocking it
|
||||
|
||||
## Current execution-reality references
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
# HyperTwist Phase 4 dashboard method-drill recovery outcome and memory history inspect surface packet
|
||||
|
||||
- bounded Phase `4` dashboard-consumer slice
|
||||
- date: `2026-05-09`
|
||||
|
||||
## Intent
|
||||
|
||||
Stay on the deliberate `UHyperTwistCoachDashboardWidget` retained-history inspect lane and expose the next two retained method-drill recovery history families directly to gameplay and Blueprint callers.
|
||||
|
||||
## Why this packet exists
|
||||
|
||||
The dashboard already retained:
|
||||
|
||||
- filtered method-drill recovery outcomes inside queue-recovery history
|
||||
- selected method-drill recovery memory history entries
|
||||
|
||||
But that state still only surfaced through dashboard text blocks and selection actions. Callers still had to scrape widget presentation or reopen recovery-memory comparison derivation to inspect retained drill-recovery posture directly.
|
||||
|
||||
## What changed
|
||||
|
||||
- added `FHyperTwistTrainingCoachDashboardMethodDrillRecoveryOutcomeHistoryInspectSurface`
|
||||
- added `FHyperTwistTrainingCoachDashboardMethodDrillRecoveryMemoryHistoryInspectSurface`
|
||||
- added `GetSelectedMethodDrillRecoveryOutcomeHistoryInspectSurface()`
|
||||
- added `GetSelectedMethodDrillRecoveryMemoryHistoryInspectSurface()`
|
||||
- kept the packet bounded to `UHyperTwistCoachDashboardWidget` plus shared surface types, with no dashboard redesign and no backend continuity changes
|
||||
|
||||
## Files
|
||||
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistTrainingTypes.h`
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistCoachDashboardWidget.h`
|
||||
- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Private\HyperTwistTraining\HyperTwistCoachDashboardWidget.cpp`
|
||||
- `C:\HyperTwist\docs\HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md`
|
||||
|
||||
## Outcome
|
||||
|
||||
Gameplay and Blueprint callers can now inspect:
|
||||
|
||||
- the selected retained method-drill recovery outcome entry with action, before/after pressure, deferred-work posture, packet-structure recovery, retained drill-recovery stance, and reliable-plan recovery posture
|
||||
- the selected retained method-drill recovery memory entry with preferred recovery action, source attribution, generated packet context, generated plan posture, recovery-memory bias, plan-source alignment, and retained comparison counts
|
||||
|
||||
without scraping dashboard text blocks or reopening recovery-memory comparison derivation.
|
||||
|
||||
## Validation
|
||||
|
||||
- full `Development Editor | Win64` MSBuild on `UnrealHyperTwist.sln`
|
||||
- passed with `0 Warning(s), 0 Error(s)`
|
||||
|
||||
## Next clean slice
|
||||
|
||||
Stay on this dashboard retained-history inspect lane only while a real gameplay or Blueprint caller still needs one more thin inspect contract over already-retained dashboard history state. The next clean move is the method-drill follow-up history and handoff history inspect pair.
|
||||
Loading…
Add table
Reference in a new issue