# HyperTwist Phase 4 gameplay generated-mode selector option owned execution split-phase phase-id / label-fallback provenance preview surface packet

Created on `2026-05-08`

Status:

- first-party HyperTwist packet
- bounded Phase `4` gameplay-facing consumer slice

## Purpose

This packet closes the next thin gameplay-facing consumer seam above the panel-widget and session-actor generated-mode selector option owned execution split-phase detail retention preview surface by exposing one parameterized owned execution split-phase phase-id / label-fallback provenance preview surface for a chosen selector id.

The open tasks were:

- stop forcing gameplay / Blueprint callers to rebuild timing-policy normalization rules just to distinguish explicit split-phase labels from normalization fallback to `PhaseId`
- expose direct covered-case split-phase label provenance and generated owned-execution split-phase label provenance on the same thin consumer lane
- expose per-phase label provenance without widening into backend execution behavior

It is not:

- a selector-dispatch behavior change
- a generated-mode launch-request persistence behavior change
- a generated-mode execution deck synthesis change
- a broader gameplay UI composition pass

## Scope

Bounded lane:

- add first-party owned execution split-phase phase-id / label-fallback provenance preview surfaces in shared training types
- add a coach-library helper that reconstructs the retained normalized split-phase set from the raw timing policy using the same sort / dedupe / fallback rule as timing normalization
- expose that parameterized split-phase provenance preview surface on `HyperTwistTrainingPanelWidget` and `HyperTwistTrainingSessionActor`
- keep the derivation presentation-only and rooted in the already-owned selector/runtime/request surfaces

Out of scope:

- changing selector-choice apply behavior
- changing stored launch-request creation, refresh, or execute behavior
- changing generated-mode execution deck synthesis
- widening into dashboard-only or broader gameplay composition work

## Why this was the right next packet

Before this slice:

- gameplay-facing panel/session consumers already exposed truthful owned case identity, prompt presentation, execution modality, execution scope, provenance posture, deck container posture, retained runtime-surface identity, retained delivery-mode posture, retained deck capability posture, retained timing-policy posture, and retained normalized split-phase detail for imported selector options
- callers could already inspect retained normalized phase order and labels for a chosen option

But one thin consumer seam was still open:

- callers still had to reconstruct whether each retained normalized phase label came from an explicit source label or from the normalization fallback that substitutes `PhaseId` when the source label is empty

That meant:

- split-phase detail preview was already thin and reusable
- but phase-id / label-fallback provenance still leaked timing-policy normalization rules into callers

So the next bounded move was:

- keep the already-landed owned execution split-phase detail retention preview surface unchanged in behavior
- reuse that split-phase detail preview as the exact/blocked/unavailable option-state baseline and expose one narrow label-provenance surface above it

## What landed

Primary code changes:

- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewPhaseEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingCoachLibrary.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp`
  - added `DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface(...)`
  - split-phase label provenance preview is derived from cached run state plus the already-landed split-phase detail retention preview surface and reconstructs the retained normalized split-phase set from the raw timing policy
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface(const FString& SelectorId)`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhasePhaseIdLabelFallbackProvenancePreviewSurface(const FString& SelectorId)`

Surface behavior:

- reports exact normalized retained split-phase label provenance for direct covered-case starts
- reports exact normalized retained split-phase label provenance for generated owned-execution paths
- distinguishes explicit source labels from phase-id fallback per retained phase entry
- exposes option-level counts for explicit labels, phase-id fallbacks, and options that contain at least one fallback label
- keeps reusable stored-request cases and refresh-required generated cases exact because execute still retains the same normalized split-phase label provenance even when request refresh is required
- keeps unresolved or payload-invalid choices inspectable as blocked split-phase label-provenance preview states instead of collapsing them into a generic unavailable branch
- keeps the surface presentation-only and compatible with the already-landed launch / execution, request-alignment, stored-request delta, launch-request payload / refresh-preview, launch-request metadata / origin-notes preview, launch-request envelope / request-source preview, owned execution case / canonical-state preview, owned execution prompt preview, owned execution delivery preview, owned execution scope preview, owned execution provenance preview, owned execution deck-title / selection-policy preview, owned execution deck-id / runtime-surface retention preview, owned execution delivery-mode roster / allowed-mode retention preview, owned execution deck capability retention preview, owned execution timing-policy retention preview, and owned execution split-phase detail retention preview surfaces

## Validation

Validation target:

- full `Development Editor|Win64` build of `C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.sln`

Result:

- passed with `0` warnings and `0` errors

## Follow-on

The next bounded packet on this same gameplay-facing consumer lane should stay thin and expose one generated-mode selector option owned execution split-phase duplicate-pruning / survivor provenance preview surface so callers can inspect which raw split-phase definitions actually survive normalization and duplicate rejection without rebuilding timing-policy normalization rules directly.
