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

## Purpose

This packet feeds the new at-launch `earned` versus `suppressed/no-retained` decision-bias snapshot split back into tied broader template-signal analytics selection. A template no longer gets the extra broader template-signal preference from the stricter `DecisionSplitGuard` lane just because its current reinforced-vs-plain snapshot-guard lane looks healthy; it also needs stored launches made under an already-earned decision-bias snapshot to beat its suppressed or legacy no-retained history.

## Scope

- add a historical decision-bias snapshot guard helper in dashboard selection logic
- require the existing current `HasTemplateLaunchTemplateSignalSupportDecisionBias(...)` guard to clear first
- require minimum outcome history in both:
  - the at-launch `earned` decision-bias 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 only after templates are already tied through the existing decision-split lane
- surface the same `selection-bias earned/suppressed` state in the shared decision-bias snapshot analytics fragment

## What landed

- `HyperTwistCoachDashboardWidget.cpp`
  - added `HasTemplateLaunchTemplateSignalSupportDecisionBiasSnapshotBias(...)`
  - the helper:
    - reuses the existing current decision-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 tiers broader template-signal tie-breaks as:
    - support-bias snapshot guard
    - current decision-bias guard
    - historical decision-bias snapshot guard
  - shared `template-signal decision-bias snapshot` analytics detail now appends:
    - `selection-bias earned`
    - or `selection-bias suppressed`
    - plus earned and comparison outcome counts

## Product effect

- the stricter `DecisionSplitGuard` lane now only reinforces future tied broader selections when stored launches made under an already-earned decision-bias snapshot are outperforming suppressed or legacy no-retained history
- sparse or weaker earned snapshot history no longer gets to reinforce that stricter lane by itself
- live `[Template Launch]` detail, template history, and recap now show whether the historical decision-bias snapshot guard is currently earned or suppressed

## Acceptance criteria

- tied broader-analytics selection uses the new historical decision-bias snapshot guard only after the current decision-bias lane already ties
- the new guard requires minimum earned and comparison outcome counts
- the new guard only clears when earned decision-bias snapshot launches beat combined suppressed/no-retained history on score or meaningful quality deltas
- shared analytics detail shows the historical `selection-bias earned/suppressed` state for the decision-bias snapshot split

## Validation checklist

1. full `Development Editor|Win64` build succeeds
2. confirm `ResolveTemplateAnalyticsPreferenceDecision(...)` tiers broader template-signal tie-breaks through support-bias snapshot, current decision-bias, then historical decision-bias snapshot
3. confirm the historical guard compares earned decision-bias 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` on the decision-bias snapshot split
