# HyperTwist Phase 4 gameplay generated-mode selector option launch-request payload / refresh-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 stored-request delta / selector-diff surface by exposing one parameterized option launch-request payload / refresh-preview surface for a chosen selector id.

The open tasks were:

- stop forcing gameplay / Blueprint callers to rebuild hypothetical generated-mode launch-config payloads just to explain what a chosen imported option would stage
- expose the concrete selector-choice payload, stored-request reuse posture, and refresh-on-execute preview for each imported option on the chosen selector
- keep the surface derived from already-cached gameplay consumer run, selector, and request state plus the already-landed option-menu, dispatch, and request-alignment surfaces instead of widening into backend logic

It is not:

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

## Scope

Bounded lane:

- add first-party generated-mode selector option launch-request payload / refresh-preview surfaces in shared training types
- add a coach-library helper that derives hypothetical launch payload, selector payload, stored-request reuse posture, and refresh preview from cached run state plus the already-landed option-menu, dispatch, and request-alignment surfaces
- expose that parameterized launch-request preview surface on `HyperTwistTrainingPanelWidget` and `HyperTwistTrainingSessionActor`
- keep the derivation presentation-only and rooted in the already-owned selector-choice / launch-request rules

Out of scope:

- changing selector-choice apply behavior
- changing stored launch-request creation, refresh, or execute behavior
- changing direct owned-case launch behavior
- widening into higher-level UI composition or dashboard-only work

## Why this was the right next packet

Before this slice:

- gameplay-facing panel/session consumers already exposed truthful generated-mode option stored-request delta / selector-diff posture
- those same consumers already exposed truthful generated-mode option request-alignment / execute-preview posture

But one thin consumer seam was still open:

- callers could tell whether a chosen option stayed aligned with the stored request or required refresh
- but they still had to rebuild the hypothetical launch payload themselves to show the actual selector payload and request-refresh consequences behind that posture

That meant:

- alignment and delta posture were thin and reusable
- but concrete launch-request preview still leaked launch-config reconstruction work into callers

So the next bounded move was:

- keep the already-landed option-menu, dispatch, request-alignment, and stored-request-delta surfaces unchanged
- and expose one narrow launch-request payload / refresh-preview surface above those already-cached surfaces

## What landed

Primary code changes:

- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h`
  - added `EHyperTwistTrainingCoachGeneratedModeOptionLaunchRequestPreviewKind`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestSelectorChoiceEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewEntrySurface`
  - added `FHyperTwistTrainingCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingCoachLibrary.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp`
  - added `DeriveCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(...)`
  - launch-request preview is derived from cached run state plus the already-landed option-menu, dispatch, and request-alignment surfaces
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingPanelWidget.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(const FString& SelectorId)`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingSessionActor.h`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingSessionActor.cpp`
  - added `GetDisplayedCoachGeneratedModeSelectorOptionLaunchRequestPreviewSurface(const FString& SelectorId)`

Surface behavior:

- reports the concrete hypothetical payload identity for each imported option on the chosen selector, including deck, session, delivery, surface, runtime mode, generator, and puzzle context
- exposes the hypothetical selector payload row set for each option, including which selector choices match current cached selection and the stored request
- classifies each option as stored-request-reusable, refresh-required, unresolved-after-choice, payload-unavailable, direct-launch, or unavailable
- reports a compact stored-request reuse and refresh preview for the current cached selection on the chosen selector
- keeps the surface presentation-only and compatible with the already-landed generated-mode option-menu, dispatch, request-alignment, and stored-request-delta 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 hypothetical launch-request metadata / origin-notes preview surface so callers can render imported origin-path and notes provenance over the hypothetical payload without reading raw launch-config metadata directly.
