Align recognition replay pressure with coach review continuity

This commit is contained in:
axiomlogicnexus 2026-05-06 17:02:50 +02:00
parent cdc26d5d90
commit 49bd9d38ad
2 changed files with 107 additions and 8 deletions

View file

@ -2300,6 +2300,17 @@ namespace HyperTwistTrainingCoachLibraryInternal
});
}
bool ShouldPreferRecognitionReplayReview(
const FHyperTwistReplayReviewAnalytics& ReplayReviewAnalytics,
const FHyperTwistRecognitionReplaySummary& RecognitionReplaySummary)
{
return RecognitionReplaySummary.EpisodeCount > 0
&& (RecognitionReplaySummary.AmbiguousEpisodeCount > 0
|| ReplayReviewAnalytics.RecognitionCorrectionCount > 0
|| (RecognitionReplaySummary.AverageCommitConfidence >= 0.0f
&& RecognitionReplaySummary.AverageCommitConfidence < 0.7f));
}
void ApplyPrimarySignalToBrief(
FHyperTwistCoachBrief& Brief,
const FHyperTwistCoachSignal& PrimarySignal)
@ -2848,11 +2859,9 @@ TArray<FHyperTwistCoachSignal> UHyperTwistTrainingCoachLibrary::DeriveCoachSigna
Signals.Add(Signal);
}
if (RecognitionReplaySummary.EpisodeCount > 0
&& (RecognitionReplaySummary.AmbiguousEpisodeCount > 0
|| ReplayReviewAnalytics.RecognitionCorrectionCount > 0
|| (RecognitionReplaySummary.AverageCommitConfidence >= 0.0f
&& RecognitionReplaySummary.AverageCommitConfidence < 0.7f)))
if (HyperTwistTrainingCoachLibraryInternal::ShouldPreferRecognitionReplayReview(
ReplayReviewAnalytics,
RecognitionReplaySummary))
{
const float ConfidencePenalty = RecognitionReplaySummary.AverageCommitConfidence >= 0.0f
? (1.0f - RecognitionReplaySummary.AverageCommitConfidence) * 25.0f
@ -3014,9 +3023,10 @@ FHyperTwistCoachBrief UHyperTwistTrainingCoachLibrary::DeriveCoachBrief(
Brief.bNeedsCadenceRecovery =
CoachMemorySnapshot.bNeedsCadenceRecovery || CoachMemorySnapshot.bNeedsScheduleFrictionRecovery;
Brief.bNeedsVarietyRotation = CoachMemorySnapshot.bNeedsVarietyRotation;
Brief.bPreferRecognitionReplayReview = RecognitionReplaySummary.EpisodeCount > 0
&& (RecognitionReplaySummary.AmbiguousEpisodeCount > 0
|| ReplayReviewAnalytics.RecognitionCorrectionCount > 0);
Brief.bPreferRecognitionReplayReview =
HyperTwistTrainingCoachLibraryInternal::ShouldPreferRecognitionReplayReview(
ReplayReviewAnalytics,
RecognitionReplaySummary);
Brief.Signals = DeriveCoachSignals(
SessionSummary,

View file

@ -0,0 +1,89 @@
# HyperTwist Phase 4 recognition review continuity packet
Created on `2026-05-06`
Status:
- first-party HyperTwist packet
- bounded Phase `4` replay-to-coach validation slice
## Purpose
This packet closes a coherence gap between the already-landed recognition replay signal lane and the coach brief / follow-up lane.
The open task is:
- make low-confidence recognition replay cases preserve recognition-review preference all the way into the coach brief and downstream coach consumers
It is not:
- a new recognition transport packet
- a dashboard redesign
- a broad coaching heuristic rewrite
- a speech or simulation packet
## Scope
Bounded lane:
- unify the recognition-review preference predicate used by:
- recognition clarity signal derivation
- coach brief derivation
- keep the threshold consistent for:
- ambiguous recognition episodes
- replay correction pressure
- low average commit confidence
Out of scope:
- new provider behavior
- frame-submission logic changes
- replay packet schema changes
- broad queue or action-plan redesign
## Why this was the right next packet
Before this slice:
- replay-derived recognition pressure could already emit a `recognition_clarity` coach signal
- ambiguous episodes and correction-heavy replay already propagated into recognition-review preference
- but low-confidence-only replay cases could still diverge:
- the signal lane treated them as recognition pressure
- the brief/follow-up lane did not consistently preserve that recognition-review preference
So the next honest move was:
- validate and tighten the replay-to-coach handoff so one recognition-pressure rule drives both signal generation and coach-review preference
## What landed
Primary code changes:
- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingCoachLibrary.cpp`
- added one shared recognition-review preference predicate
- recognition clarity signal derivation now uses that shared predicate
- coach brief derivation now uses the same shared predicate
## Product effect
Recognition replay pressure is now more coherent:
- low-confidence recognition replay cases no longer stop at the signal layer
- the coach brief, action-plan carry-forward, follow-up derivation, and dashboard inspection state now stay aligned with the same recognition-review preference rule
- replay-to-coach validation is stronger without widening the runtime transport lane
## Acceptance criteria
- low-confidence recognition replay cases now set recognition-review preference even when ambiguity and correction counts stay at zero
- recognition clarity signal and coach brief use the same predicate
- the packet stays bounded to coach-library replay/brief continuity
- full product build succeeds
## Validation checklist
1. build `UnrealHyperTwist.sln` / `UnrealHyperTwistEditor`
2. confirm recognition clarity signal derivation still compiles and retains existing ambiguity/correction behavior
3. confirm coach brief derivation now preserves recognition-review preference for low-confidence replay cases too
4. confirm no recognition transport or dashboard-only packet is reopened
That is the packet.