diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 80d2031..7187365 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -12253,6 +12253,137 @@ UHyperTwistCoachDashboardWidget::GetDisplayedGuidancePreviewLaunchActionControlI return Surface; } +FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface +UHyperTwistCoachDashboardWidget::GetDisplayedGuidancePreviewBandInspectSurface() const +{ + FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface Surface; + Surface.Headline = TEXT("Guidance preview band"); + + const FHyperTwistTrainingCoachDashboardGuidancePreviewSelectionInspectSurface SelectionSurface = + GetDisplayedGuidancePreviewSelectionInspectSurface(); + const FHyperTwistTrainingCoachDashboardGuidancePreviewCaseDetailInspectSurface CaseDetailSurface = + GetDisplayedGuidancePreviewCaseDetailInspectSurface(); + const FHyperTwistTrainingCoachDashboardGuidancePreviewCaseNavigationInspectSurface NavigationSurface = + GetDisplayedGuidancePreviewCaseNavigationInspectSurface(); + const FHyperTwistTrainingCoachDashboardGuidancePreviewLaunchActionControlInspectSurface ActionControlSurface = + GetDisplayedGuidancePreviewLaunchActionControlInspectSurface(); + const FHyperTwistTrainingCoachDashboardGuidanceDeckPreviewInspectSurface RecommendedDeckSurface = + GetDisplayedRecommendedGuidanceDeckPreviewInspectSurface(); + const FHyperTwistTrainingCoachDashboardGuidanceDeckPreviewInspectSurface FollowUpDeckSurface = + GetDisplayedFollowUpGuidanceDeckPreviewInspectSurface(); + + Surface.PreviewSelectionStatusLine = SelectionSurface.StatusLine.IsEmpty() + ? TEXT("Guidance preview selection: unavailable.") + : SelectionSurface.StatusLine; + Surface.PreviewCaseDetailStatusLine = CaseDetailSurface.StatusLine.IsEmpty() + ? TEXT("Guidance preview case detail: unavailable.") + : CaseDetailSurface.StatusLine; + Surface.PreviewCaseNavigationStatusLine = NavigationSurface.StatusLine.IsEmpty() + ? TEXT("Guidance preview case navigation: unavailable.") + : NavigationSurface.StatusLine; + Surface.PreviewLaunchControlStatusLine = ActionControlSurface.StatusLine.IsEmpty() + ? TEXT("Guidance preview launch control: unavailable.") + : ActionControlSurface.StatusLine; + Surface.RecommendedDeckStatusLine = RecommendedDeckSurface.StatusLine.IsEmpty() + ? TEXT("Recommended guidance deck: unavailable.") + : RecommendedDeckSurface.StatusLine; + Surface.FollowUpDeckStatusLine = FollowUpDeckSurface.StatusLine.IsEmpty() + ? TEXT("Follow-up guidance deck: unavailable.") + : FollowUpDeckSurface.StatusLine; + Surface.ActivePreviewLaneLabel = !SelectionSurface.ActivePreviewLaneLabel.IsEmpty() + ? SelectionSurface.ActivePreviewLaneLabel + : (ActionControlSurface.ActivePreviewLaneLabel.IsEmpty() + ? TEXT("none") + : ActionControlSurface.ActivePreviewLaneLabel); + Surface.DeckId = SelectionSurface.DeckId.IsEmpty() ? TEXT("n/a") : SelectionSurface.DeckId; + Surface.DeckTitle = SelectionSurface.DeckTitle.IsEmpty() ? TEXT("n/a") : SelectionSurface.DeckTitle; + Surface.DeckLabel = !SelectionSurface.DeckLabel.IsEmpty() + ? SelectionSurface.DeckLabel + : (ActionControlSurface.DeckLabel.IsEmpty() ? TEXT("n/a") : ActionControlSurface.DeckLabel); + Surface.SelectionPolicyLabel = SelectionSurface.SelectionPolicyLabel.IsEmpty() + ? TEXT("n/a") + : SelectionSurface.SelectionPolicyLabel; + Surface.SelectedCaseId = !SelectionSurface.SelectedCaseId.IsEmpty() + ? SelectionSurface.SelectedCaseId + : (NavigationSurface.SelectedCaseId.IsEmpty() ? TEXT("none") : NavigationSurface.SelectedCaseId); + Surface.SelectedCasePromptLabel = !SelectionSurface.SelectedCasePromptLabel.IsEmpty() + ? SelectionSurface.SelectedCasePromptLabel + : (NavigationSurface.SelectedCasePromptLabel.IsEmpty() + ? TEXT("n/a") + : NavigationSurface.SelectedCasePromptLabel); + Surface.SelectedCaseOrdinal = NavigationSurface.SelectedCaseOrdinal.IsEmpty() + ? TEXT("none") + : NavigationSurface.SelectedCaseOrdinal; + Surface.StartPreviewDeckLabel = ActionControlSurface.StartPreviewDeckLabel.IsEmpty() + ? TEXT("Start Preview Deck") + : ActionControlSurface.StartPreviewDeckLabel; + Surface.StartSelectedPreviewCaseLabel = ActionControlSurface.StartSelectedPreviewCaseLabel.IsEmpty() + ? TEXT("Start Selected Preview Case") + : ActionControlSurface.StartSelectedPreviewCaseLabel; + Surface.RecommendedDeckLabel = RecommendedDeckSurface.DeckLabel.IsEmpty() + ? TEXT("n/a") + : RecommendedDeckSurface.DeckLabel; + Surface.FollowUpDeckLabel = FollowUpDeckSurface.DeckLabel.IsEmpty() + ? TEXT("n/a") + : FollowUpDeckSurface.DeckLabel; + Surface.RecommendedBriefHeadline = RecommendedDeckSurface.BriefHeadline.IsEmpty() + ? TEXT("n/a") + : RecommendedDeckSurface.BriefHeadline; + Surface.FollowUpBriefHeadline = FollowUpDeckSurface.BriefHeadline.IsEmpty() + ? TEXT("n/a") + : FollowUpDeckSurface.BriefHeadline; + Surface.SelectedCaseIndex = SelectionSurface.SelectedCaseIndex; + Surface.TotalCaseCount = SelectionSurface.TotalCaseCount; + Surface.RecommendedCaseCount = RecommendedDeckSurface.CaseCount; + Surface.FollowUpCaseCount = FollowUpDeckSurface.CaseCount; + Surface.bHasActivePreviewDeck = + SelectionSurface.bHasActivePreviewDeck + || CaseDetailSurface.bHasActivePreviewDeck + || NavigationSurface.bHasActivePreviewDeck + || ActionControlSurface.bHasActivePreviewDeck; + Surface.bHasSelectedCase = + SelectionSurface.bHasSelectedCase + || CaseDetailSurface.bHasSelectedCase + || NavigationSurface.bHasSelectedCase + || ActionControlSurface.bHasSelectedCase; + Surface.bPreviousEnabled = NavigationSurface.bPreviousEnabled; + Surface.bNextEnabled = NavigationSurface.bNextEnabled; + Surface.bStartPreviewDeckEnabled = ActionControlSurface.bStartPreviewDeckEnabled; + Surface.bStartSelectedPreviewCaseEnabled = ActionControlSurface.bStartSelectedPreviewCaseEnabled; + Surface.bHasRecommendedDeck = RecommendedDeckSurface.bHasDeck || RecommendedDeckSurface.bHasBrief; + Surface.bHasFollowUpDeck = FollowUpDeckSurface.bHasDeck || FollowUpDeckSurface.bHasBrief; + Surface.bClosedLoopIdleDashboard = + SelectionSurface.bClosedLoopIdleDashboard + || CaseDetailSurface.bClosedLoopIdleDashboard + || NavigationSurface.bClosedLoopIdleDashboard + || ActionControlSurface.bClosedLoopIdleDashboard + || RecommendedDeckSurface.bClosedLoopIdleDashboard + || FollowUpDeckSurface.bClosedLoopIdleDashboard; + Surface.StatusLine = FString::Printf( + TEXT("Guidance preview band: lane %s | case %s | navigation %s/%s | start deck %s | start case %s"), + *Surface.ActivePreviewLaneLabel, + *Surface.SelectedCaseOrdinal, + Surface.bPreviousEnabled ? TEXT("enabled") : TEXT("disabled"), + Surface.bNextEnabled ? TEXT("enabled") : TEXT("disabled"), + Surface.bStartPreviewDeckEnabled ? TEXT("enabled") : TEXT("disabled"), + Surface.bStartSelectedPreviewCaseEnabled ? TEXT("enabled") : TEXT("disabled")); + Surface.DetailLine = FString::Printf( + TEXT("%s | %s | %s | %s | %s | %s | deck %s | selected case %s | recommended cases %d | follow-up cases %d | active preview deck %s | closed-loop idle %s"), + *Surface.PreviewSelectionStatusLine, + *Surface.PreviewCaseDetailStatusLine, + *Surface.PreviewCaseNavigationStatusLine, + *Surface.PreviewLaunchControlStatusLine, + *Surface.RecommendedDeckStatusLine, + *Surface.FollowUpDeckStatusLine, + *Surface.DeckLabel, + *Surface.SelectedCaseId, + Surface.RecommendedCaseCount, + Surface.FollowUpCaseCount, + Surface.bHasActivePreviewDeck ? TEXT("yes") : TEXT("no"), + Surface.bClosedLoopIdleDashboard ? TEXT("yes") : TEXT("no")); + return Surface; +} + FHyperTwistTrainingCoachDashboardMethodDrillDiagnosticsInspectSurface UHyperTwistCoachDashboardWidget::GetDisplayedMethodDrillDiagnosticsInspectSurface() const { diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index d9a0011..55a01ae 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -915,6 +915,10 @@ public: FHyperTwistTrainingCoachDashboardGuidancePreviewLaunchActionControlInspectSurface GetDisplayedGuidancePreviewLaunchActionControlInspectSurface() const; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard") + FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface + GetDisplayedGuidancePreviewBandInspectSurface() const; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard") FHyperTwistTrainingCoachDashboardMethodDrillDiagnosticsInspectSurface GetDisplayedMethodDrillDiagnosticsInspectSurface() const; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index abb1372..a2f874e 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -13960,6 +13960,132 @@ struct FHyperTwistTrainingCoachDashboardGuidanceDeckPreviewInspectSurface } }; +USTRUCT(BlueprintType) +struct FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface +{ + 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 PreviewSelectionStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString PreviewCaseDetailStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString PreviewCaseNavigationStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString PreviewLaunchControlStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RecommendedDeckStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString FollowUpDeckStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString ActivePreviewLaneLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString DeckId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString DeckTitle; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString DeckLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString SelectionPolicyLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString SelectedCaseId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString SelectedCasePromptLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString SelectedCaseOrdinal; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString StartPreviewDeckLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString StartSelectedPreviewCaseLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RecommendedDeckLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString FollowUpDeckLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RecommendedBriefHeadline; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString FollowUpBriefHeadline; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 SelectedCaseIndex = INDEX_NONE; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 TotalCaseCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 RecommendedCaseCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + int32 FollowUpCaseCount = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasActivePreviewDeck = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasSelectedCase = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bPreviousEnabled = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bNextEnabled = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bStartPreviewDeckEnabled = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bStartSelectedPreviewCaseEnabled = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasRecommendedDeck = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasFollowUpDeck = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bClosedLoopIdleDashboard = false; + + bool IsStructurallyValid() const + { + return !StatusLine.IsEmpty() + || !DetailLine.IsEmpty() + || bHasActivePreviewDeck + || bHasSelectedCase + || bStartPreviewDeckEnabled + || bStartSelectedPreviewCaseEnabled + || bHasRecommendedDeck + || bHasFollowUpDeck; + } +}; + USTRUCT(BlueprintType) struct FHyperTwistTrainingCoachDashboardHandoffRecommendationInspectSurface { diff --git a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md index 204a1e1..fd71d47 100644 --- a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md +++ b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md @@ -77,8 +77,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 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 - 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 - - the latest landed bounded `Phase 4` packet deliberately continues through the remaining adjacent method-drill authored-history dashboard trio and adds a single method-drill recovery-outcome-history seam, a single method-drill recovery-memory-history seam, and a single method-drill follow-up-history seam over their already-landed status/detail/navigation surfaces, so gameplay/Blueprint callers can inspect each whole retained method-drill history cluster without stitching three adjacent getters together per cluster - - 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, the queue-suppression band, the handoff-history band, the guidance-decision-history band, the template-launch-history band, the method-drill recovery-outcome-history band, the method-drill recovery-memory-history band, and the method-drill follow-up-history 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 the next adjacent live dashboard consumer band in the active preview neighborhood and adds a single guidance-preview seam over the already-landed preview selection, preview case detail/navigation, preview launch control, and recommended/follow-up deck preview surfaces, so gameplay/Blueprint callers can inspect that whole preview-focused dashboard cluster without stitching six 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, the queue-suppression band, the handoff-history band, the guidance-decision-history band, the template-launch-history band, the method-drill recovery-outcome-history band, the method-drill recovery-memory-history band, the method-drill follow-up-history band, and the guidance-preview 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 diff --git a/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_GUIDANCE_PREVIEW_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md b/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_GUIDANCE_PREVIEW_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md new file mode 100644 index 0000000..303c14c --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_GUIDANCE_PREVIEW_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md @@ -0,0 +1,54 @@ +# HyperTwist Phase 4 dashboard guidance preview band inspect surface packet + +- bounded Phase `4` dashboard-consumer slice +- date: `2026-05-11` + +## Intent + +Deliberately choose the next adjacent live dashboard consumer band in the active preview neighborhood and expose the guidance preview selection, case detail, case navigation, launch control, and recommended/follow-up deck preview cluster as one inspectable gameplay and Blueprint seam. + +## Why this packet exists + +`UHyperTwistCoachDashboardWidget` already exposed six adjacent preview-focused surfaces: + +- `GetDisplayedGuidancePreviewSelectionInspectSurface()` +- `GetDisplayedGuidancePreviewCaseDetailInspectSurface()` +- `GetDisplayedGuidancePreviewCaseNavigationInspectSurface()` +- `GetDisplayedGuidancePreviewLaunchActionControlInspectSurface()` +- `GetDisplayedRecommendedGuidanceDeckPreviewInspectSurface()` +- `GetDisplayedFollowUpGuidanceDeckPreviewInspectSurface()` + +But callers that wanted to reason about that whole preview-focused dashboard cluster still had to stitch six adjacent getters together manually. + +## What changed + +- added `FHyperTwistTrainingCoachDashboardGuidancePreviewBandInspectSurface` +- added `GetDisplayedGuidancePreviewBandInspectSurface()` +- composed the new surface entirely over the already-landed preview selection, preview case detail/navigation, preview launch control, and recommended/follow-up deck preview 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 guidance preview dashboard band through one surface +- preview selection, preview case detail/navigation, preview launch control, and recommended/follow-up deck preview status lines together +- active preview lane, deck/case identity, preview start-control posture, and recommended/follow-up deck availability posture + +without stitching six 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, the queue-suppression band, the handoff-history band, the guidance-decision-history band, the template-launch-history band, the method-drill recovery-outcome-history band, the method-drill recovery-memory-history band, the method-drill follow-up-history band, and the guidance-preview band as landed baseline, then deliberately choose another adjacent live dashboard consumer band instead of reopening already-landed surfaces by drift.