# HyperTwist Phase 4 template launch selection confidence provenance packet

Created on `2026-05-07`

Status:

- first-party HyperTwist packet
- bounded Phase `4` dashboard template selector audit slice

## Purpose

This packet persists whether an analytics tie-break winner was chosen on broader template-scoped outcome signal alone or whether selector-split confidence actually helped decide the winner.

The open tasks were:

- stop collapsing all analytics tie-break wins into one opaque selector provenance bucket
- expose whether split-lane confidence materially backed a dashboard analytics tie-break decision
- let template launch history and recap show that distinction from repo-backed run provenance without adding a new surface

It is not:

- another change to the analytics tie-break math
- a new repository aggregate packet
- a template launch history redesign packet
- a change to non-dashboard template launch provenance

## Scope

Bounded lane:

- add a small analytics-support enum to template launch selection provenance
- widen the dashboard analytics comparison path so it reports whether selector-split confidence actually changed the winner
- stamp that support kind onto analytics tie-break selection provenance at launch time
- surface the persisted support kind through the existing selector detail fragment used by the live dashboard launch row, template launch history, and run recap

Out of scope:

- changing dashboard primary template ranking rules
- changing selector-split aggregate derivation
- inventing new analytics support classes beyond the current binary distinction
- adding a separate selector provenance screen

## Why this was the right next packet

The previous packet made selector-split confidence available to the dashboard selector, but it still left one audit gap:

- operators could know that analytics broke a tie
- but they still could not tell whether that decision came from broad per-template outcome signal alone
- or whether the new selector-split confidence guard actually helped the winner

So the next honest move was:

- keep the comparison logic centralized in the selector
- record that distinction as structured provenance at the moment the winner is chosen
- and let the existing history and recap surfaces read it back from stored run state

## What landed

Primary code changes:

- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h`
  - added `EHyperTwistTrainingTemplateLaunchSelectionAnalyticsSupportKind`
  - added `AnalyticsSupportKind` to `FHyperTwistTrainingTemplateLaunchSelectionProvenance`
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp`
  - widened the analytics comparison path into a small structured decision result instead of a bare yes/no
  - detects whether selector-split confidence actually changed the winning analytics tie-break outcome
  - stamps that support kind into analytics tie-break provenance
  - appends the stored analytics-support label to the existing selector detail fragment used across dashboard template launch, template launch history, and run recap

## Product effect

Dashboard template launch provenance is now more specific:

- analytics tie-break launches still record the same selector source and reason class
- they now also say whether the winner was chosen on broader template outcome signal alone or with selector-split confidence support
- live dashboard template detail, template launch history, and template-backed recap all inherit that distinction through the shared selector detail fragment
- persisted run history now carries enough context to audit not just that analytics broke a tie, but how strong that explanation really was

## Acceptance criteria

- analytics tie-break selection provenance persists the new support-kind distinction
- selector provenance only reports selector-split confidence support when it actually helped decide the winner
- dashboard template launch detail, template launch history, and template-backed recap show the persisted support-kind distinction
- full product build succeeds

## Validation checklist

1. build `UnrealHyperTwist.sln` / `UnrealHyperTwistEditor`
2. confirm analytics tie-break launches persist either template-scoped outcome signal or selector-split confidence support
3. confirm selector detail on live launch, history, and recap surfaces shows the stored support-kind distinction
4. confirm cases where selector-split confidence did not change the winner stay labeled as broader template-scoped outcome signal only

That is the packet.
