# HyperTwist Phase 4 gameplay generated-mode selector option owned execution split-phase duplicate-pruning / survivor 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 phase-id / label-fallback provenance preview surface by exposing one parameterized owned execution split-phase duplicate-pruning / survivor provenance preview surface for a chosen selector id.

The open tasks were:

- stop forcing gameplay / Blueprint callers to rebuild timing-policy normalization duplicate-pruning rules just to see which raw split-phase definitions survive normalization
- expose direct covered-case duplicate-pruning provenance and generated owned-execution duplicate-pruning provenance on the same thin consumer lane
- expose per-raw-definition survivor and duplicate-drop 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 duplicate-pruning / survivor provenance preview surfaces in shared training types
- add a coach-library helper that reconstructs raw split-phase evaluation order, survivor retention, duplicate pruning, and invalid-row skipping from the raw timing policy using the same sort / dedupe rule as timing normalization
- expose that parameterized split-phase duplicate-pruning 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 execution split-phase detail plus explicit-vs-fallback label provenance 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 which raw split-phase definitions were dropped by duplicate rejection and which first-valid definitions actually survived normalization

That meant:

- split-phase detail and label-fallback preview were already thin and reusable
- but duplicate-pruning / survivor provenance still leaked timing-policy normalization rules into callers

So the next bounded move was:

- keep the already-landed split-phase detail and label-fallback provenance surfaces unchanged in behavior
- reuse that exact/blocked/unavailable option-state baseline and expose one narrow duplicate-pruning / survivor provenance surface above it

## What landed

Primary code changes:

- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewRawPhaseEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingCoachLibrary.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp`
  - added `DeriveCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface(...)`
  - split-phase duplicate-pruning preview is derived from cached run state plus the already-landed split-phase label-provenance preview surface and reconstructs raw evaluation/survivor/drop provenance from the raw timing policy
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface(const FString& SelectorId)`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionOwnedExecutionSplitPhaseDuplicatePruningSurvivorProvenancePreviewSurface(const FString& SelectorId)`

Consumer result:

- gameplay / Blueprint callers can now inspect raw split-phase definitions, survivor counts, duplicate-pruned rows, invalid rows, and per-row survivor/drop provenance for a chosen selector option without rebuilding timing-policy normalization behavior

## Validation

- full `Development Editor|Win64` solution build for `C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.sln`
- result: `0` warnings, `0` errors
