Explain confidence lanes in analytics tie-breaks
This commit is contained in:
parent
313aa01cec
commit
2d6e3955d9
2 changed files with 109 additions and 1 deletions
|
|
@ -125,6 +125,11 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
const FHyperTwistTrainingTemplateLaunchScopedStats* TemplateStats
|
||||
);
|
||||
|
||||
FString BuildTemplateLaunchComparablePeerConfidenceAuditClause(
|
||||
const FHyperTwistTrainingTemplateLaunchScopedStats* TemplateStats,
|
||||
const TCHAR* SubjectLabel
|
||||
);
|
||||
|
||||
bool HasTemplateLaunchComparablePeerEvidenceForConfidenceBonus(
|
||||
const FHyperTwistTrainingTemplateLaunchScopedStats* TemplateStats,
|
||||
int32* OutComparablePeerOutcomeRuns = nullptr,
|
||||
|
|
@ -349,10 +354,15 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
}
|
||||
else
|
||||
{
|
||||
const FString SelectedComparablePeerConfidenceAuditClause =
|
||||
BuildTemplateLaunchComparablePeerConfidenceAuditClause(
|
||||
SelectedStats,
|
||||
TEXT("chosen template"));
|
||||
Provenance.DecisionSummaryLine = FString::Printf(
|
||||
TEXT("Selector: tied with %s on primary dashboard priority; analytics preferred %s on broader template-scoped outcome signal without selector-split confidence support: chosen %s | peer %s."),
|
||||
TEXT("Selector: tied with %s on primary dashboard priority; analytics preferred %s on broader template-scoped outcome signal without selector-split confidence support: %s | chosen %s | peer %s."),
|
||||
*ResolveDashboardTemplateLaunchDisplayTitle(PeerTemplate),
|
||||
*ResolveDashboardTemplateLaunchDisplayTitle(SelectedTemplate),
|
||||
*SelectedComparablePeerConfidenceAuditClause,
|
||||
*BuildTemplateLaunchAnalyticsTieBreakSignalFragment(SelectedStats),
|
||||
*BuildTemplateLaunchAnalyticsTieBreakSignalFragment(PeerStats)
|
||||
);
|
||||
|
|
@ -663,6 +673,43 @@ namespace HyperTwistCoachDashboardWidgetInternal
|
|||
);
|
||||
}
|
||||
|
||||
FString BuildTemplateLaunchComparablePeerConfidenceAuditClause(
|
||||
const FHyperTwistTrainingTemplateLaunchScopedStats* TemplateStats,
|
||||
const TCHAR* SubjectLabel
|
||||
)
|
||||
{
|
||||
const TCHAR* ResolvedSubjectLabel =
|
||||
SubjectLabel != nullptr && SubjectLabel[0] != TEXT('\0')
|
||||
? SubjectLabel
|
||||
: TEXT("template");
|
||||
if (TemplateStats == nullptr || !TemplateStats->IsStructurallyValid())
|
||||
{
|
||||
return FString::Printf(
|
||||
TEXT("%s has no retained comparable-peer confidence lane yet"),
|
||||
ResolvedSubjectLabel
|
||||
);
|
||||
}
|
||||
|
||||
int32 ComparablePeerOutcomeRuns = 0;
|
||||
int32 SplitConfidenceOutcomeRuns = 0;
|
||||
int32 PeerNoEvidenceOutcomeRuns = 0;
|
||||
float ComparablePeerOutcomeShare = 0.0f;
|
||||
const bool bGuardEarned = HasTemplateLaunchComparablePeerEvidenceForConfidenceBonus(
|
||||
TemplateStats,
|
||||
&ComparablePeerOutcomeRuns,
|
||||
&SplitConfidenceOutcomeRuns,
|
||||
&ComparablePeerOutcomeShare,
|
||||
&PeerNoEvidenceOutcomeRuns
|
||||
);
|
||||
|
||||
return FString::Printf(
|
||||
TEXT("%s split-confidence lane is currently %s under the comparable-peer guard: %s"),
|
||||
ResolvedSubjectLabel,
|
||||
bGuardEarned ? TEXT("confidence-eligible") : TEXT("suppressed"),
|
||||
*BuildTemplateLaunchComparablePeerConfidenceLaneFragment(TemplateStats)
|
||||
);
|
||||
}
|
||||
|
||||
FString BuildTemplateLaunchSelectionAnalyticsSupportDetailFragment(
|
||||
const FHyperTwistTrainingTemplateLaunchSelectionProvenance* SelectionProvenance
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
# HyperTwist Phase 4 template launch analytics tie-break confidence-lane rationale packet
|
||||
|
||||
Created on `2026-05-07`
|
||||
|
||||
Status:
|
||||
|
||||
- first-party HyperTwist packet
|
||||
- bounded Phase `4` dashboard selector rationale slice
|
||||
|
||||
## Purpose
|
||||
|
||||
This packet reuses the new comparable-peer confidence lanes inside the persisted analytics tie-break explanation itself. When a dashboard tie breaks on broader template-scoped outcome signal instead of `SelectorSplitConfidence`, the selector rationale now still says whether the chosen template's stored split-confidence lane is currently confidence-eligible or suppressed under the comparable-peer guard.
|
||||
|
||||
## Scope
|
||||
|
||||
Bounded lane:
|
||||
|
||||
- add a small helper that converts the shared comparable-peer confidence lane data into a selector-rationale clause
|
||||
- wire that helper only into the broader template-scoped outcome signal branch of analytics tie-break provenance
|
||||
- keep the existing `SelectorSplitConfidence` rationale path unchanged
|
||||
- let live launch detail, template history, and template-backed recap inherit the richer explanation through existing provenance plumbing
|
||||
|
||||
Out of scope:
|
||||
|
||||
- widening provenance schema
|
||||
- changing selector policy or thresholds again
|
||||
- changing repository aggregation
|
||||
- adding another dashboard section
|
||||
|
||||
## What landed
|
||||
|
||||
Primary code changes:
|
||||
|
||||
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp`
|
||||
- added a helper that turns comparable-peer confidence lanes into a concise audit clause
|
||||
- broader outcome-signal tie-break rationale now says whether the chosen template's split-confidence lane is currently `confidence-eligible` or `suppressed`
|
||||
- that rationale clause includes the same synthesized `comparable-peer-backed` vs `peer-no-evidence-heavy` lane data already shown in shared template analytics
|
||||
|
||||
## Product effect
|
||||
|
||||
Analytics tie-break audit is now more coherent:
|
||||
|
||||
- if analytics pick a template on broader outcome signal, the rationale still shows where that template currently stands on future split-confidence reinforcement
|
||||
- operators can compare the current tie-break reason against the template's comparable-peer confidence posture without leaving the persisted selector summary
|
||||
- live `[Template Launch]`, template launch history, and template-backed recap all inherit that explanation automatically
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- broader template-scoped outcome-signal tie-break rationale includes comparable-peer confidence eligibility or suppression
|
||||
- rationale includes the synthesized confidence-lane view used elsewhere in shared template analytics
|
||||
- live launch detail, template history, and recap all inherit the richer rationale through persisted provenance
|
||||
- full product build succeeds
|
||||
|
||||
## Validation checklist
|
||||
|
||||
1. build `UnrealHyperTwist.sln` / `UnrealHyperTwistEditor`
|
||||
2. confirm broader outcome-signal tie-break rationale mentions confidence-eligible or suppressed split-confidence lane status
|
||||
3. confirm the same rationale includes the comparable-peer-backed vs peer-no-evidence-heavy lane view
|
||||
4. confirm live detail, template history, and recap all inherit the richer rationale
|
||||
|
||||
That is the packet.
|
||||
Loading…
Add table
Reference in a new issue