Expose dashboard queue suppression band
This commit is contained in:
parent
5b99bc83b3
commit
b0cf20aa8b
5 changed files with 339 additions and 1 deletions
|
|
@ -7778,6 +7778,127 @@ UHyperTwistCoachDashboardWidget::GetDisplayedQueueSuppressionHistoryNavigationIn
|
|||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetDisplayedQueueSuppressionBandInspectSurface() const
|
||||
{
|
||||
FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface Surface;
|
||||
Surface.Headline = TEXT("Queue-suppression band");
|
||||
|
||||
const FHyperTwistTrainingCoachDashboardQueueSuppressionSummaryInspectSurface SummarySurface =
|
||||
GetDisplayedQueueSuppressionSummaryInspectSurface();
|
||||
const FHyperTwistTrainingCoachDashboardQueueSuppressionDetailInspectSurface DetailSurface =
|
||||
GetDisplayedQueueSuppressionDetailInspectSurface();
|
||||
const FHyperTwistTrainingCoachDashboardQueueSuppressionHistoryNavigationInspectSurface NavigationSurface =
|
||||
GetDisplayedQueueSuppressionHistoryNavigationInspectSurface();
|
||||
|
||||
Surface.QueueSuppressionSummaryLine = SummarySurface.StatusLine.IsEmpty()
|
||||
? TEXT("Queue suppression summary: unavailable.")
|
||||
: SummarySurface.StatusLine;
|
||||
Surface.QueueSuppressionDetailLine = DetailSurface.DetailLine.IsEmpty()
|
||||
? TEXT("Queue suppression detail: unavailable.")
|
||||
: DetailSurface.DetailLine;
|
||||
Surface.QueueSuppressionNavigationStatusLine = NavigationSurface.StatusLine.IsEmpty()
|
||||
? TEXT("Queue suppression navigation: unavailable.")
|
||||
: NavigationSurface.StatusLine;
|
||||
Surface.QueueSuppressionNavigationDetailLine = NavigationSurface.DetailLine.IsEmpty()
|
||||
? TEXT("Queue suppression navigation detail: unavailable.")
|
||||
: NavigationSurface.DetailLine;
|
||||
Surface.GuidanceLaneLabel = SummarySurface.GuidanceLaneLabel.IsEmpty()
|
||||
? TEXT("none")
|
||||
: SummarySurface.GuidanceLaneLabel;
|
||||
Surface.PreferredRecoveryActionLabel = !NavigationSurface.PreferredRecoveryActionLabel.IsEmpty()
|
||||
? NavigationSurface.PreferredRecoveryActionLabel
|
||||
: (SummarySurface.PreferredRecoveryActionLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: SummarySurface.PreferredRecoveryActionLabel);
|
||||
Surface.DominantDeferralReasonLabel = !NavigationSurface.DominantDeferralReasonLabel.IsEmpty()
|
||||
? NavigationSurface.DominantDeferralReasonLabel
|
||||
: (DetailSurface.DominantDeferralReasonLabel.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: DetailSurface.DominantDeferralReasonLabel);
|
||||
Surface.PrimarySuppressionReason = SummarySurface.PrimarySuppressionReason.IsEmpty()
|
||||
? TEXT("not suppressed")
|
||||
: SummarySurface.PrimarySuppressionReason;
|
||||
Surface.FollowUpSuppressionReason = SummarySurface.FollowUpSuppressionReason.IsEmpty()
|
||||
? TEXT("not suppressed")
|
||||
: SummarySurface.FollowUpSuppressionReason;
|
||||
Surface.QueueId = DetailSurface.QueueId.IsEmpty() ? TEXT("n/a") : DetailSurface.QueueId;
|
||||
Surface.NextDeferredEntryId = DetailSurface.NextDeferredEntryId.IsEmpty()
|
||||
? TEXT("none")
|
||||
: DetailSurface.NextDeferredEntryId;
|
||||
Surface.NextManualRescheduleEntryId = DetailSurface.NextManualRescheduleEntryId.IsEmpty()
|
||||
? TEXT("none")
|
||||
: DetailSurface.NextManualRescheduleEntryId;
|
||||
Surface.EarliestDeferredUntilUtc = DetailSurface.EarliestDeferredUntilUtc.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: DetailSurface.EarliestDeferredUntilUtc;
|
||||
Surface.PreviousLabel = NavigationSurface.PreviousLabel.IsEmpty()
|
||||
? TEXT("Prev Suppression")
|
||||
: NavigationSurface.PreviousLabel;
|
||||
Surface.NextLabel = NavigationSurface.NextLabel.IsEmpty()
|
||||
? TEXT("Next Suppression")
|
||||
: NavigationSurface.NextLabel;
|
||||
Surface.SelectedEntryOrdinal = NavigationSurface.SelectedEntryOrdinal.IsEmpty()
|
||||
? TEXT("none")
|
||||
: NavigationSurface.SelectedEntryOrdinal;
|
||||
Surface.RecordedAtUtc = NavigationSurface.RecordedAtUtc.IsEmpty()
|
||||
? TEXT("n/a")
|
||||
: NavigationSurface.RecordedAtUtc;
|
||||
Surface.SelectedLaneLabel = NavigationSurface.SelectedLaneLabel.IsEmpty()
|
||||
? TEXT("none")
|
||||
: NavigationSurface.SelectedLaneLabel;
|
||||
Surface.SelectedEntryIndex = NavigationSurface.SelectedEntryIndex;
|
||||
Surface.HistoryEntryCount = NavigationSurface.HistoryEntryCount;
|
||||
Surface.TotalQueueEntryCount = SummarySurface.TotalQueueEntryCount;
|
||||
Surface.ReadyQueueEntryCount = SummarySurface.ReadyQueueEntryCount;
|
||||
Surface.DeferredQueueEntryCount = SummarySurface.DeferredQueueEntryCount;
|
||||
Surface.ManualRescheduleEntryCount = DetailSurface.ManualRescheduleEntryCount;
|
||||
Surface.ArchiveAwareDeferredEntryCount = DetailSurface.ArchiveAwareDeferredEntryCount;
|
||||
Surface.BlockedFollowUpDeferredEntryCount = DetailSurface.BlockedFollowUpDeferredEntryCount;
|
||||
Surface.DeferredEventCount = DetailSurface.DeferredEventCount;
|
||||
Surface.PromotedEventCount = DetailSurface.PromotedEventCount;
|
||||
Surface.ManualRescheduleEventCount = DetailSurface.ManualRescheduleEventCount;
|
||||
Surface.ReschedulePressureScore = DetailSurface.ReschedulePressureScore;
|
||||
Surface.PreferredGuidanceLane = SummarySurface.PreferredGuidanceLane;
|
||||
Surface.PreferredRecoveryAction = SummarySurface.PreferredRecoveryAction;
|
||||
Surface.bHasPrimaryQueueSuppression = SummarySurface.bHasPrimaryQueueSuppression;
|
||||
Surface.bHasFollowUpQueueSuppression = SummarySurface.bHasFollowUpQueueSuppression;
|
||||
Surface.bHasAnyQueueSuppression = SummarySurface.bHasAnyQueueSuppression;
|
||||
Surface.bHasBlockedFollowUpDeferrals = DetailSurface.bHasBlockedFollowUpDeferrals;
|
||||
Surface.bHasArchiveAwareDeferrals = DetailSurface.bHasArchiveAwareDeferrals;
|
||||
Surface.bNeedsManualRescheduleReview = DetailSurface.bNeedsManualRescheduleReview;
|
||||
Surface.bHasOutstandingDeferredWork = DetailSurface.bHasOutstandingDeferredWork;
|
||||
Surface.bHasCompletionGap = DetailSurface.bHasCompletionGap;
|
||||
Surface.bHasSelectedEntry = NavigationSurface.bHasSelectedEntry;
|
||||
Surface.bSelectedEntryIsLatest = NavigationSurface.bSelectedEntryIsLatest;
|
||||
Surface.bPreviousEnabled = NavigationSurface.bPreviousEnabled;
|
||||
Surface.bNextEnabled = NavigationSurface.bNextEnabled;
|
||||
Surface.StatusLine = FString::Printf(
|
||||
TEXT("Queue-suppression band: lane %s | recovery %s | selected %s | suppression %s | navigation %s/%s"),
|
||||
*Surface.GuidanceLaneLabel,
|
||||
*Surface.PreferredRecoveryActionLabel,
|
||||
*Surface.SelectedEntryOrdinal,
|
||||
Surface.bHasAnyQueueSuppression ? TEXT("active") : TEXT("idle"),
|
||||
Surface.bPreviousEnabled ? TEXT("enabled") : TEXT("disabled"),
|
||||
Surface.bNextEnabled ? TEXT("enabled") : TEXT("disabled"));
|
||||
Surface.DetailLine = FString::Printf(
|
||||
TEXT("%s | %s | %s | %s | queue %s | dominant reason %s | primary %s | follow-up %s | total %d | deferred %d | pressure %.2f | recorded %s | latest %s"),
|
||||
*Surface.QueueSuppressionSummaryLine,
|
||||
*Surface.QueueSuppressionDetailLine,
|
||||
*Surface.QueueSuppressionNavigationStatusLine,
|
||||
*Surface.QueueSuppressionNavigationDetailLine,
|
||||
*Surface.QueueId,
|
||||
*Surface.DominantDeferralReasonLabel,
|
||||
*Surface.PrimarySuppressionReason,
|
||||
*Surface.FollowUpSuppressionReason,
|
||||
Surface.TotalQueueEntryCount,
|
||||
Surface.DeferredQueueEntryCount,
|
||||
Surface.ReschedulePressureScore,
|
||||
*Surface.RecordedAtUtc,
|
||||
Surface.bSelectedEntryIsLatest ? TEXT("yes") : TEXT("no"));
|
||||
return Surface;
|
||||
}
|
||||
|
||||
FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryInspectSurface
|
||||
UHyperTwistCoachDashboardWidget::GetSelectedClosureRecoveryHistoryInspectSurface() const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -755,6 +755,10 @@ public:
|
|||
FHyperTwistTrainingCoachDashboardQueueSuppressionHistoryNavigationInspectSurface
|
||||
GetDisplayedQueueSuppressionHistoryNavigationInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface
|
||||
GetDisplayedQueueSuppressionBandInspectSurface() const;
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard")
|
||||
FHyperTwistTrainingCoachDashboardClosureRecoveryHistoryInspectSurface
|
||||
GetSelectedClosureRecoveryHistoryInspectSurface() const;
|
||||
|
|
|
|||
|
|
@ -8684,6 +8684,166 @@ struct FHyperTwistTrainingCoachDashboardQueueSuppressionDetailInspectSurface
|
|||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface
|
||||
{
|
||||
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 QueueSuppressionSummaryLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString QueueSuppressionDetailLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString QueueSuppressionNavigationStatusLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString QueueSuppressionNavigationDetailLine;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString GuidanceLaneLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PreferredRecoveryActionLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString DominantDeferralReasonLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PrimarySuppressionReason;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString FollowUpSuppressionReason;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString QueueId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString NextDeferredEntryId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString NextManualRescheduleEntryId;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString EarliestDeferredUntilUtc;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString PreviousLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString NextLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SelectedEntryOrdinal;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString RecordedAtUtc;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString SelectedLaneLabel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 SelectedEntryIndex = INDEX_NONE;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 HistoryEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 TotalQueueEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ReadyQueueEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 DeferredQueueEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ManualRescheduleEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ArchiveAwareDeferredEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 BlockedFollowUpDeferredEntryCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 DeferredEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 PromotedEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
int32 ManualRescheduleEventCount = 0;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
float ReschedulePressureScore = 0.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingCoachGuidanceLane PreferredGuidanceLane =
|
||||
EHyperTwistTrainingCoachGuidanceLane::None;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
EHyperTwistTrainingQueueRecoveryAction PreferredRecoveryAction =
|
||||
EHyperTwistTrainingQueueRecoveryAction::None;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasPrimaryQueueSuppression = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasFollowUpQueueSuppression = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasAnyQueueSuppression = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasBlockedFollowUpDeferrals = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasArchiveAwareDeferrals = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bNeedsManualRescheduleReview = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasOutstandingDeferredWork = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasCompletionGap = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bHasSelectedEntry = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bSelectedEntryIsLatest = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bPreviousEnabled = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
bool bNextEnabled = false;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
return !StatusLine.IsEmpty()
|
||||
|| !DetailLine.IsEmpty()
|
||||
|| bHasAnyQueueSuppression
|
||||
|| bHasOutstandingDeferredWork
|
||||
|| bHasSelectedEntry
|
||||
|| bPreviousEnabled
|
||||
|| bNextEnabled;
|
||||
}
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FHyperTwistTrainingCoachDashboardQueueRecoveryOutcomeInspectSurface
|
||||
{
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ Current correction call from the source-exposed audit and current execution refr
|
|||
- the latest landed bounded `Phase 4` packet deliberately chooses another adjacent live dashboard consumer band and adds a single composite selected-queue seam over the already-landed selected-queue navigation, start-selected action, selected-queue summary, and selected queue-entry detail surfaces, so gameplay/Blueprint callers can inspect that whole queue-focused dashboard cluster without stitching four adjacent getters together
|
||||
- the latest landed bounded `Phase 4` packet deliberately chooses another adjacent live dashboard consumer band and adds a single queue scheduling / recovery seam over the already-landed queue counts / status, schedule horizon, schedule policy / friction, and queue recovery live status/detail surfaces, so gameplay/Blueprint callers can inspect that whole scheduling-and-recovery dashboard cluster without stitching five adjacent getters together
|
||||
- the latest landed bounded `Phase 4` packet deliberately chooses another adjacent live dashboard consumer band and adds a single closure-recovery seam over the already-landed closure-recovery live status/detail and closure-recovery history navigation surfaces, so gameplay/Blueprint callers can inspect that whole closure-recovery dashboard cluster without stitching three adjacent getters together
|
||||
- with the retained-history text-band lane, the template-launch / preview action-control band, the execution-action-control band, the verification / recognition / review-policy status band, the selected-queue band, the queue scheduling / recovery band, and the closure-recovery band now all closed baseline, the next best clean move is to deliberately choose another adjacent live dashboard consumer band rather than reopen already-landed surfaces by drift
|
||||
- the latest landed bounded `Phase 4` packet deliberately chooses another adjacent live dashboard consumer band and adds a single queue-suppression seam over the already-landed queue-suppression live summary/detail and queue-suppression history navigation surfaces, so gameplay/Blueprint callers can inspect that whole queue-suppression dashboard cluster without stitching three adjacent getters together
|
||||
- with the retained-history text-band lane, the template-launch / preview action-control band, the execution-action-control band, the verification / recognition / review-policy status band, the selected-queue band, the queue scheduling / recovery band, the closure-recovery band, and the queue-suppression band now all closed baseline, the next best clean move is to deliberately choose another adjacent live dashboard consumer band rather than reopen already-landed surfaces by 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
|
||||
|
||||
## Donor portfolio phase taxonomy
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
# HyperTwist Phase 4 dashboard queue suppression band inspect surface packet
|
||||
|
||||
- bounded Phase `4` dashboard-consumer slice
|
||||
- date: `2026-05-11`
|
||||
|
||||
## Intent
|
||||
|
||||
Deliberately choose another adjacent live dashboard consumer band and expose the queue-suppression summary, queue-suppression detail, and queue-suppression history navigation cluster as one inspectable gameplay and Blueprint seam.
|
||||
|
||||
## Why this packet exists
|
||||
|
||||
`UHyperTwistCoachDashboardWidget` already exposed three adjacent queue-suppression surfaces:
|
||||
|
||||
- `GetDisplayedQueueSuppressionSummaryInspectSurface()`
|
||||
- `GetDisplayedQueueSuppressionDetailInspectSurface()`
|
||||
- `GetDisplayedQueueSuppressionHistoryNavigationInspectSurface()`
|
||||
|
||||
But callers that wanted to reason about that whole queue-suppression dashboard cluster still had to stitch those adjacent getters together manually.
|
||||
|
||||
## What changed
|
||||
|
||||
- added `FHyperTwistTrainingCoachDashboardQueueSuppressionBandInspectSurface`
|
||||
- added `GetDisplayedQueueSuppressionBandInspectSurface()`
|
||||
- composed the new surface entirely over the already-landed queue-suppression live summary, queue-suppression detail, and queue-suppression history navigation surfaces
|
||||
- kept the packet bounded by avoiding any new backend derivation or new widget-state caching
|
||||
|
||||
## 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 whole adjacent queue-suppression dashboard band through one surface
|
||||
- queue-suppression live summary/detail plus history-navigation status/detail lines together
|
||||
- guidance lane, preferred recovery action, dominant deferral reason, suppression reasons, queue id, deferred/manual entry context, and selected entry ordinal/recorded time context
|
||||
- suppression posture, deferred/manual pressure posture, and navigation enablement posture
|
||||
|
||||
without stitching three separate adjacent getters together manually.
|
||||
|
||||
## Validation
|
||||
|
||||
- full `Development Editor | Win64` MSBuild on `UnrealHyperTwist.sln`
|
||||
- passed with `0 Warning(s), 0 Error(s)`
|
||||
|
||||
## Next clean slice
|
||||
|
||||
Treat the retained-history text-band lane, the template-launch / preview action-control band, the execution-action-control band, the verification / recognition / review-policy status band, the selected-queue band, the queue scheduling / recovery band, the closure-recovery band, and the queue-suppression band as landed baseline, then deliberately choose another adjacent live dashboard consumer band instead of reopening already-landed surfaces by drift.
|
||||
Loading…
Add table
Reference in a new issue