# HyperTwist Phase 4 template-signal support-bias snapshot selection guard packet

## Purpose

This packet feeds the new at-launch `earned` versus `suppressed/no-retained` support-bias snapshot split back into tied broader template-signal analytics selection. A template no longer gets the extra broader template-signal support-bias point just because its current support lane looks healthy; it also needs stored broader wins launched under an already-earned support-bias snapshot to beat its own suppressed or legacy no-retained history.

## Scope

- add a historical support-bias snapshot guard helper in dashboard selection logic
- require the existing current `HasTemplateLaunchTemplateSignalSupportBias(...)` guard to clear first
- require minimum outcome history in both:
  - the at-launch `earned` snapshot bucket
  - the combined non-earned comparison bucket (`suppressed + no-retained`)
- require the earned snapshot bucket to beat that combined non-earned bucket on score or meaningful success / mistake improvement
- use that stricter combined guard in tied broader-analytics selection
- surface the same `selection-bias earned/suppressed` state in the shared support-bias snapshot analytics fragment

## What landed

- `HyperTwistCoachDashboardWidget.cpp`
  - added `HasTemplateLaunchTemplateSignalSupportBiasSnapshotBias(...)`
  - the helper:
    - reuses the existing current support-bias guard as a prerequisite
    - requires at least `2` earned snapshot outcome runs
    - requires at least `2` comparison outcome runs across `suppressed + no-retained`
    - compares the earned snapshot lane against the combined non-earned baseline on score, success, and mistakes
  - `ResolveTemplateAnalyticsPreferenceDecision(...)` now only awards the broader template-signal support-bias point when both:
    - current support-bias clears
    - historical earned-snapshot bias clears
  - `BuildTemplateLaunchAnalyticsTieBreakTemplateSignalSupportBiasSnapshotFragment(...)` now appends:
    - `selection-bias earned`
    - or `selection-bias suppressed`
    - plus earned and comparison outcome counts

## Product effect

- broader template-signal support-bias reinforcement now depends on stored evidence that broader wins launched under an already-earned support-bias snapshot are outperforming suppressed or legacy no-retained broader history
- templates with sparse or weaker earned-snapshot history no longer get that extra tied-selection preference
- live `[Template Launch]` detail, template history, and recap now show whether the historical support-bias snapshot guard is currently earned or suppressed

## Acceptance criteria

- tied broader-analytics selection uses the new historical support-bias snapshot guard in addition to the existing current support-bias guard
- the new guard requires minimum earned and comparison outcome counts
- the new guard only clears when earned broader launches beat combined suppressed/no-retained history on score or meaningful quality deltas
- shared analytics detail shows the historical `selection-bias earned/suppressed` state

## Validation checklist

1. full `Development Editor|Win64` build succeeds
2. confirm `ResolveTemplateAnalyticsPreferenceDecision(...)` requires both current support-bias and historical support-bias snapshot bias
3. confirm the historical guard compares earned snapshot history against combined suppressed/no-retained history with minimum-sample thresholds
4. confirm shared analytics detail reports `selection-bias earned` or `selection-bias suppressed`
