Expose gameplay selector label-provenance roster-pair inspect surface

This commit is contained in:
axiomlogicnexus 2026-05-09 00:31:31 +02:00
parent bee472005a
commit 8b450d9d88
9 changed files with 375 additions and 2 deletions

View file

@ -12275,6 +12275,163 @@ UHyperTwistTrainingCoachLibrary::
return Surface;
}
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
UHyperTwistTrainingCoachLibrary::
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FHyperTwistTrainingRunState& RunState,
const FString& SelectorId,
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface& OptionMenuSurface,
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface&
OptionLaunchRequestPreviewSurface
)
{
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionSummaryInspectSurface
PartitionSummarySurface =
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionSummaryInspectSurface(
RunState,
SelectorId,
OptionMenuSurface,
OptionLaunchRequestPreviewSurface
);
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionExplicitLabelRosterInspectSurface
ExplicitLabelRosterSurface =
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionExplicitLabelRosterInspectSurface(
RunState,
SelectorId,
OptionMenuSurface,
OptionLaunchRequestPreviewSurface
);
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionPhaseIdFallbackRosterInspectSurface
FallbackRosterSurface =
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionPhaseIdFallbackRosterInspectSurface(
RunState,
SelectorId,
OptionMenuSurface,
OptionLaunchRequestPreviewSurface
);
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
Surface;
Surface.SelectorId = PartitionSummarySurface.SelectorId;
Surface.SelectorLabel = PartitionSummarySurface.SelectorLabel;
Surface.BindingLabel = PartitionSummarySurface.BindingLabel;
Surface.Headline =
TEXT("Generated Mode Selector Option Owned-Execution Split-Phase Current-Selection Label-Provenance Partition Roster-Pair Inspect");
Surface.bHasSelector = PartitionSummarySurface.bHasSelector;
Surface.bHasSelection = PartitionSummarySurface.bHasSelection;
Surface.bSelectionMatchesAvailableOption =
PartitionSummarySurface.bSelectionMatchesAvailableOption;
Surface.CurrentSelectionSelectionLine =
PartitionSummarySurface.CurrentSelectionSelectionLine;
Surface.CurrentSelectionOptionId =
PartitionSummarySurface.CurrentSelectionOptionId;
Surface.CurrentSelectionOptionLabel =
PartitionSummarySurface.CurrentSelectionOptionLabel;
Surface.CurrentSelectionOptionValue =
PartitionSummarySurface.CurrentSelectionOptionValue;
Surface.LaunchRequestPreviewKind =
PartitionSummarySurface.LaunchRequestPreviewKind;
Surface.ExplicitLabelPhaseCount =
PartitionSummarySurface.ExplicitLabelPhaseCount;
Surface.FallbackPhaseCount =
PartitionSummarySurface.FallbackPhaseCount;
Surface.bStartsOwnedCaseImmediately =
PartitionSummarySurface.bStartsOwnedCaseImmediately;
Surface.bHasExactCurrentSelectionLabelProvenancePartitionRosterPair =
PartitionSummarySurface.bHasExactCurrentSelectionLabelProvenancePartitionSummary;
Surface.bRetainsActiveDeckSplitPhaseFusion =
PartitionSummarySurface.bRetainsActiveDeckSplitPhaseFusion;
Surface.bHasExplicitLabelPartition =
PartitionSummarySurface.bHasExplicitLabelPartition;
Surface.bHasFallbackLabelPartition =
PartitionSummarySurface.bHasFallbackLabelPartition;
Surface.bHasMixedLabelProvenancePartition =
PartitionSummarySurface.bHasMixedLabelProvenancePartition;
Surface.bHasCurrentSelectionLabelProvenancePartitionRosterPair =
PartitionSummarySurface.bHasCurrentSelectionLabelProvenancePartitionSummary;
Surface.bPreviewBlocked = PartitionSummarySurface.bPreviewBlocked;
Surface.bCanPreview = PartitionSummarySurface.bCanPreview;
if (!SelectorId.IsEmpty())
{
Surface.Headline = OptionMenuSurface.SelectorLabel.IsEmpty()
? FString::Printf(
TEXT("Generated Mode Selector Option Owned-Execution Split-Phase Current-Selection Label-Provenance Partition Roster-Pair Inspect: %s"),
*SelectorId
)
: FString::Printf(
TEXT("Generated Mode Selector Option Owned-Execution Split-Phase Current-Selection Label-Provenance Partition Roster-Pair Inspect: %s"),
*OptionMenuSurface.SelectorLabel
);
}
Surface.ExplicitLabelPhases = ExplicitLabelRosterSurface.ExplicitLabelPhases;
Surface.FallbackPhases = FallbackRosterSurface.FallbackPhases;
Surface.CurrentSelectionLabelProvenancePartitionRosterPairLine =
PartitionSummarySurface.CurrentSelectionLabelProvenancePartitionSummaryLine;
Surface.ExplicitLabelPhaseCountLine =
PartitionSummarySurface.ExplicitLabelPhaseCountLine;
Surface.FallbackPhaseCountLine =
PartitionSummarySurface.FallbackPhaseCountLine;
Surface.ExplicitLabelOrderSummaryLine =
PartitionSummarySurface.ExplicitLabelOrderSummaryLine;
Surface.FallbackOrderSummaryLine =
PartitionSummarySurface.FallbackOrderSummaryLine;
Surface.ExplicitLabelSummaryLine =
PartitionSummarySurface.ExplicitLabelSummaryLine;
Surface.FallbackLabelSummaryLine =
PartitionSummarySurface.FallbackLabelSummaryLine;
if (Surface.bHasCurrentSelectionLabelProvenancePartitionRosterPair)
{
Surface.StatusLine = FString::Printf(
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect exposes %d explicit-label phase%s and %d phase-id fallback phase%s for the active selection."),
Surface.ExplicitLabelPhaseCount,
Surface.ExplicitLabelPhaseCount == 1 ? TEXT("") : TEXT("s"),
Surface.FallbackPhaseCount,
Surface.FallbackPhaseCount == 1 ? TEXT("") : TEXT("s")
);
}
else if (OptionMenuSurface.bHasSelector && OptionMenuSurface.bHasUnresolvedSelectionDetail)
{
Surface.StatusLine =
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect is active, but the cached selection no longer matches an imported option.");
}
else if (PartitionSummarySurface.bPreviewBlocked)
{
Surface.StatusLine =
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect resolves the active selection, but execute-time roster-pair inspection remains blocked.");
}
else if (PartitionSummarySurface.bHasExactCurrentSelectionLabelProvenancePartitionSummary)
{
Surface.StatusLine =
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect resolves the active selection, and no surviving phases are currently retained.");
}
else if (OptionMenuSurface.bHasSelector && OptionMenuSurface.bHasSelection)
{
Surface.StatusLine =
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect is active, but the current selection does not expose roster-pair detail.");
}
else if (OptionMenuSurface.bHasSelector)
{
Surface.StatusLine =
TEXT("Generated-mode selector option owned-execution split-phase current-selection label-provenance partition roster-pair inspect is active, but this selector is currently unresolved.");
}
else
{
Surface.StatusLine = PartitionSummarySurface.StatusLine;
}
Surface.DetailLine = FString::Printf(
TEXT("%s | %s | %s"),
*Surface.CurrentSelectionSelectionLine,
*Surface.CurrentSelectionLabelProvenancePartitionRosterPairLine,
*Surface.ExplicitLabelPhaseCountLine
);
return Surface;
}
FHyperTwistTrainingCoachQueueControlSurface
UHyperTwistTrainingCoachLibrary::DeriveCoachQueueControlSurface(
const FHyperTwistTrainingCoachSessionQueueState& QueueState,

View file

@ -1271,6 +1271,25 @@ UHyperTwistTrainingPanelWidget::GetDisplayedCoachGeneratedModeSelectorOptionOwne
);
}
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
UHyperTwistTrainingPanelWidget::GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FString& SelectorId
) const
{
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface =
GetDisplayedCoachGeneratedModeSelectorOptionMenuSurface(SelectorId);
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface
OptionLaunchRequestPreviewSurface =
GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(SelectorId);
return UHyperTwistTrainingCoachLibrary::
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
CachedRunState,
SelectorId,
OptionMenuSurface,
OptionLaunchRequestPreviewSurface
);
}
FHyperTwistTrainingRunState UHyperTwistTrainingPanelWidget::StartCoachRecommendedRun(
const int32 MaxCases,
const FString& StartActionSourceLabel

View file

@ -1252,6 +1252,25 @@ AHyperTwistTrainingSessionActor::GetDisplayedCoachGeneratedModeSelectorOptionOwn
);
}
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
AHyperTwistTrainingSessionActor::GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FString& SelectorId
) const
{
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface OptionMenuSurface =
GetDisplayedCoachGeneratedModeSelectorOptionMenuSurface(SelectorId);
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface
OptionLaunchRequestPreviewSurface =
GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(SelectorId);
return UHyperTwistTrainingCoachLibrary::
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
CachedRunState,
SelectorId,
OptionMenuSurface,
OptionLaunchRequestPreviewSurface
);
}
FHyperTwistTrainingRunState AHyperTwistTrainingSessionActor::StartCoachRecommendedTrainingRun(
const int32 MaxCases
)

View file

@ -987,4 +987,14 @@ public:
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface&
OptionLaunchRequestPreviewSurface
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
static FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FHyperTwistTrainingRunState& RunState,
const FString& SelectorId,
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionMenuSurface& OptionMenuSurface,
const FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface&
OptionLaunchRequestPreviewSurface
);
};

View file

@ -422,6 +422,12 @@ public:
const FString& SelectorId
) const;
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FString& SelectorId
) const;
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
FHyperTwistTrainingRunState StartCoachRecommendedRun(
int32 MaxCases,

View file

@ -403,6 +403,12 @@ public:
const FString& SelectorId
) const;
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach")
FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface(
const FString& SelectorId
) const;
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Coach")
FHyperTwistTrainingRunState StartCoachRecommendedTrainingRun(int32 MaxCases);

View file

@ -14213,3 +14213,126 @@ struct FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPha
|| bHasCurrentSelectionLabelProvenancePartitionSummary;
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionLabelProvenancePartitionRosterPairInspectSurface
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorLabel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BindingLabel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Headline;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString StatusLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString CurrentSelectionSelectionLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString CurrentSelectionLabelProvenancePartitionRosterPairLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ExplicitLabelPhaseCountLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString FallbackPhaseCountLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ExplicitLabelOrderSummaryLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString FallbackOrderSummaryLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ExplicitLabelSummaryLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString FallbackLabelSummaryLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString DetailLine;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionExplicitLabelRosterInspectPhaseSurface>
ExplicitLabelPhases;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseCurrentSelectionPhaseIdFallbackRosterInspectPhaseSurface>
FallbackPhases;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString CurrentSelectionOptionId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString CurrentSelectionOptionLabel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString CurrentSelectionOptionValue;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
EHyperTwistTrainingCoachGeneratedModeOptionLaunchRequestPreviewKind LaunchRequestPreviewKind =
EHyperTwistTrainingCoachGeneratedModeOptionLaunchRequestPreviewKind::None;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 ExplicitLabelPhaseCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
int32 FallbackPhaseCount = 0;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasSelector = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasSelection = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bSelectionMatchesAvailableOption = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasCurrentSelectionLabelProvenancePartitionRosterPair = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bStartsOwnedCaseImmediately = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasExactCurrentSelectionLabelProvenancePartitionRosterPair = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bRetainsActiveDeckSplitPhaseFusion = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasExplicitLabelPartition = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasFallbackLabelPartition = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bHasMixedLabelProvenancePartition = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bPreviewBlocked = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
bool bCanPreview = false;
bool IsStructurallyValid() const
{
return !StatusLine.IsEmpty()
|| !SelectorId.IsEmpty()
|| !CurrentSelectionLabelProvenancePartitionRosterPairLine.IsEmpty()
|| ExplicitLabelPhases.Num() > 0
|| FallbackPhases.Num() > 0
|| bHasSelector
|| bHasSelection
|| bHasCurrentSelectionLabelProvenancePartitionRosterPair;
}
};

View file

@ -68,8 +68,8 @@ Current correction call from the source-exposed audit and current execution refr
- the imported generated-mode gap is closed; request/config/selection plumbing and the bounded clean-room executor are already landed in first-party code
- 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 latest landed bounded `Phase 4` packet stays on that same gameplay-facing consumer lane and adds one thin generated-mode selector option owned execution split-phase current-selection label-provenance partition summary inspect surface over the already-cached selector/runtime/request state, so gameplay/Blueprint callers can inspect the active selection's explicit-label vs phase-id-fallback split from one summary surface without comparing the two filtered rosters themselves
- the current next bounded packet is to expose one thin generated-mode selector option owned execution split-phase current-selection label-provenance partition roster-pair inspect surface on those same two consumer surfaces so gameplay/Blueprint callers can inspect both filtered retained-phase subsets from one paired detail surface without issuing separate explicit-label and phase-id-fallback roster calls themselves
- the latest landed bounded `Phase 4` packet stays on that same gameplay-facing consumer lane and adds one thin generated-mode selector option owned execution split-phase current-selection label-provenance partition roster-pair inspect surface over the already-cached selector/runtime/request state, so gameplay/Blueprint callers can inspect both filtered retained-phase subsets from one paired detail surface without issuing separate explicit-label and phase-id-fallback roster calls themselves
- the current next bounded packet is to expose one thin generated-mode selector option owned execution split-phase current-selection label-provenance partition merged ordered roster inspect surface on those same two consumer surfaces so gameplay/Blueprint callers can inspect the active selection's retained split phases in one ordered list with explicit-label vs phase-id-fallback partition tagging instead of stitching the paired detail arrays together themselves
- 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

View file

@ -0,0 +1,33 @@
# HyperTwist Phase 4 gameplay generated-mode selector option owned execution split-phase current-selection label-provenance partition roster-pair inspect surface packet
## Goal
Close the next thin gameplay-facing consumer seam above the current-selection label-provenance partition summary surface by exposing one current-selection label-provenance partition roster-pair inspect surface for a chosen selector id.
## Why this packet exists
The current-selection label-provenance partition summary inspect surface already exposed the active selection's explicit-label versus phase-id-fallback split from one summary surface. Gameplay and Blueprint callers that needed the actual retained phase rows for both subsets still had to issue separate explicit-label roster and phase-id-fallback roster calls themselves.
This packet removes that caller-side fan-out step. It exposes one thin current-selection label-provenance partition roster-pair inspect surface that composes the already-landed explicit-label roster and phase-id-fallback roster surfaces into one paired detail surface, while preserving unresolved-selection and blocked-preview posture from the already-landed partition summary surface.
## What changed
- add a first-party owned execution split-phase current-selection label-provenance partition roster-pair inspect surface in shared training types
- derive that surface in the coach library by composing the already-landed current-selection label-provenance partition summary inspect surface, explicit-label roster inspect surface, and phase-id-fallback roster inspect surface instead of reimplementing split-phase normalization logic
- expose the current-selection label-provenance partition roster-pair inspect surface on both gameplay-facing consumers:
- `UHyperTwistTrainingPanelWidget`
- `AHyperTwistTrainingSessionActor`
- preserve active-selection explicit-label and phase-id fallback phase arrays, count lines, order lines, and label-summary lines from the already-landed filtered roster surfaces
- preserve unresolved cached-selection and blocked-preview posture when the active selection cannot yet expose a retained split-phase label-provenance partition roster pair
## Validation
- full `Development Editor|Win64` solution build for `C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.sln`
## Result
Gameplay and Blueprint callers can now inspect both retained split-phase label-provenance subsets for the active selection from one paired detail surface without issuing separate explicit-label roster and phase-id-fallback roster calls first.
## Next bounded slice
Stay on the same gameplay-facing consumer lane and expose one thin generated-mode selector option owned execution split-phase current-selection label-provenance partition merged ordered roster inspect surface so callers can inspect the active selection's retained split phases in one ordered list with explicit-label vs phase-id-fallback partition tagging instead of stitching the paired detail arrays together themselves.