diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 996c419..058993f 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -13832,7 +13832,7 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() TransitionStatusLine = TEXT("Transition: no run is active. Start recommended, follow-up, or queued coaching work from this screen."); } - const FString ContinueRunLabel = bHasLiveAttemptTimer + FString ContinueRunLabel = bHasLiveAttemptTimer ? (bLiveInspectionPhase ? TEXT("Start Solve") : TEXT("Attempt Active")) : (bGeneratedModeLaunchDeck ? (bCanExecuteGeneratedModeLaunch ? TEXT("Execute Generated Run") : TEXT("Resolve Selectors")) @@ -16589,30 +16589,6 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() const bool bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanOutcomeHistory = CachedCoachPanelState.PreferredCoachHandoffSourceLabel == TEXT("coach-memory-method-drill-recovery-structure-plan-broad-trusted-reliable-aligned-outcome"); - RecordCoachHandoffHistorySnapshot( - HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind( - HandoffRecommendationKind), - CoachHandoffRecommendationStatusLine, - CoachHandoffRecommendationDetailLine, - CachedCoachPanelState.NextQueueSourceLabel, - HandoffClosureBias.ContinuationBias, - HandoffClosureBias.SuppressionBias, - bQueueReadyForHandoff, - bFollowUpReadyForHandoff, - bRecommendedReadyForHandoff, - bHandoffRecommendationUsedDeferredFirstSuppressionSignal, - bHandoffRecommendationUsedMethodDrillWeighting, - bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture, - bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture, - bHandoffRecommendationUsedReliableTrustedTightPlanHistory, - bHandoffRecommendationUsedReliableTrustedBroadPlanHistory, - bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory, - bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory, - bHandoffRecommendationUsedReliableAlignedTrustedTightPlanOutcomeHistory, - bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanOutcomeHistory, - bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketOutcomeHistory, - bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketOutcomeHistory - ); FString QueuedRunLabel = CachedCoachPanelState.NextQueueSourceLabel.IsEmpty() ? TEXT("Start Queue") : FString::Printf(TEXT("Queue: %s"), *CachedCoachPanelState.NextQueueSourceLabel); @@ -17385,6 +17361,12 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() } if (bShouldPresentClosedLoopIdleDashboard) { + TransitionStatusLine = + TEXT("Transition: the coach-to-review loop is closed and idle. No queued, follow-up, or recommended continuation remains."); + ContinueRunLabel = TEXT("Loop Idle"); + QueuedRunLabel = TEXT("Queue Idle"); + FollowUpRunLabel = TEXT("Follow-Up Idle"); + RecommendedRunLabel = TEXT("Recommended Idle"); QueueRecoveryStatusLine = TEXT("Recovery: closed and idle; no queue-memory recovery override is active."); QueueRecoveryDetailLine = @@ -17410,11 +17392,49 @@ void UHyperTwistCoachDashboardWidget::UpdateDashboardPresentation() bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketExactOutcomeReliableHistory = false; bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketExactOutcomeReliableHistory = false; DisplayedCoachHandoffMethodDrillRecoveryMemoryStartActionSourceLabel.Reset(); + CoachHandoffStatusLine = + TEXT("Coach handoff: closed and idle; no queued, follow-up, or recommended continuation is active."); CoachHandoffRecommendationStatusLine = TEXT("Handoff recommendation: none; the coach-to-review loop is idle."); CoachHandoffRecommendationDetailLine = TEXT("Handoff detail: retained closure history remains inspectable, but no queued, follow-up, or recommended continuation is active."); } + RecordCoachHandoffHistorySnapshot( + HyperTwistCoachDashboardWidgetInternal::DescribeHandoffRecommendationKind( + HandoffRecommendationKind), + CoachHandoffRecommendationStatusLine, + CoachHandoffRecommendationDetailLine, + CachedCoachPanelState.NextQueueSourceLabel, + HandoffClosureBias.ContinuationBias, + HandoffClosureBias.SuppressionBias, + !bShouldPresentClosedLoopIdleDashboard && bQueueReadyForHandoff, + !bShouldPresentClosedLoopIdleDashboard && bFollowUpReadyForHandoff, + !bShouldPresentClosedLoopIdleDashboard && bRecommendedReadyForHandoff, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedDeferredFirstSuppressionSignal, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedMethodDrillWeighting, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedStrongRetainedMethodDrillRecoveryPosture, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedWeakRetainedMethodDrillRecoveryPosture, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableTrustedTightPlanHistory, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableTrustedBroadPlanHistory, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableAlignedTrustedTightPlanHistory, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanHistory, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableAlignedTrustedTightPlanOutcomeHistory, + !bShouldPresentClosedLoopIdleDashboard + && bHandoffRecommendationUsedReliableAlignedTrustedBroadPlanOutcomeHistory, + !bShouldPresentClosedLoopIdleDashboard + && bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedTightPacketOutcomeHistory, + !bShouldPresentClosedLoopIdleDashboard + && bDisplayedCoachHandoffRecommendationUsedReliableAcceptedAlignedBroadPacketOutcomeHistory + ); RecordMethodDrillRecoveryMemoryHistorySnapshot( QueueRecoveryWeighting, QueueRecoveryStatusLine, diff --git a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md index 4bea5e2..cb4bee7 100644 --- a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md +++ b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md @@ -66,9 +66,9 @@ Current correction call from the source-exposed audit and current execution refr - retained benchmark-oracle and mirror-intake reservations - current code reality in which training/coaching/catalog integration is materially ahead of recognition and hypercube runtime implementation - the imported generated-mode gap is closed; request/config/selection plumbing and the bounded clean-room executor are already landed in first-party code - - the latest landed bounded `Phase 4` packet closes the retained-idle actionability gap at the end of the already-live recognition-assisted coach-to-review continuity lane - - retained post-review refresh now stops rebuilding follow-up and queue actionability once review carryover is exhausted and the coach sequence is already closed underneath - - the current next bounded packet is to verify the retained idle dashboard/widget surface against that now-collapsed subsystem state and land only a presentation fix if stale follow-up, queue, or recommended narration still survives above it + - the latest landed bounded `Phase 4` packet closes the retained-idle dashboard presentation gap at the end of the already-live recognition-assisted coach-to-review continuity lane + - the retained idle widget surface now collapses next-step, handoff, and retained handoff-history presentation to the truthful closed-loop idle state instead of carrying pre-collapse queue/follow-up/recommended narration forward + - the current next bounded packet is to run one final retained-surface sweep across preview/history panes and land only if stale launch labels, generated packet headlines, or handoff narration still survive after the closed-loop idle collapse - the current execution-discipline rule that broad refactor / monolith-splitting work should not interrupt the active bounded roadmap packet unless structure is actually blocking it ## Current execution-reality references diff --git a/docs/arch/HYPERTWIST_PHASE4_RETAINED_IDLE_DASHBOARD_PRESENTATION_CLOSURE_PACKET_2026-05-07.md b/docs/arch/HYPERTWIST_PHASE4_RETAINED_IDLE_DASHBOARD_PRESENTATION_CLOSURE_PACKET_2026-05-07.md new file mode 100644 index 0000000..9953e63 --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_RETAINED_IDLE_DASHBOARD_PRESENTATION_CLOSURE_PACKET_2026-05-07.md @@ -0,0 +1,104 @@ +# HyperTwist Phase 4 retained idle dashboard presentation closure packet + +Created on `2026-05-07` + +Status: + +- first-party HyperTwist packet +- bounded Phase `4` coach-to-review validation slice + +## Purpose + +This packet closes the last retained-idle dashboard presentation seam after the subsystem already stops rebuilding queue and follow-up actionability underneath. + +The open tasks are: + +- stop the widget from continuing to present queued, follow-up, or recommended next-step narration after the retained coach-to-review loop is already closed and idle +- stop the widget from retaining a fresh handoff-history snapshot built from that stale pre-collapse recommendation state + +It is not: + +- another subsystem closure packet +- a new queue-recovery policy packet +- a new coach-memory weighting packet +- a broader dashboard redesign + +## Scope + +Bounded lane: + +- make the retained closed-loop idle branch authoritative for the primary dashboard next-step and coach-handoff presentation +- collapse retained idle button labels away from launch-oriented queue/follow-up/recommended narration +- move the widget-side handoff snapshot to record the final closed-loop idle presentation state instead of the earlier pre-collapse recommendation state +- preserve retained history inspection while making the current live surface truthful + +Out of scope: + +- changing review carryover mechanics +- changing coach queue ordering or scoring +- changing historical analytics selection +- rewriting unrelated dashboard panels + +## Why this was the right next packet + +Before this slice: + +- retained idle subsystem refresh already stopped rebuilding follow-up and queue actionability +- queue state and queue execution lineage could already be fully consumed +- the retained coach action sequence could already be closed without follow-up or escalation pressure + +But one widget seam still remained: + +- the dashboard could still derive launch-oriented transition and handoff narration before its retained idle collapse branch fired +- the widget could also snapshot that stale recommendation state into retained handoff history before clearing the visible surface + +That meant: + +- the underlying subsystem state could already be truthful and idle +- while the widget could still speak as if a queued, follow-up, or recommended continuation were the next live action + +So the next honest move was: + +- let the retained closed-loop idle branch become authoritative for the visible next-step and handoff surface +- and only snapshot the already-collapsed idle presentation state into retained widget history + +## What landed + +Primary code changes: + +- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp` + - `UpdateDashboardPresentation()` now lets the retained closed-loop idle branch override transition text, coach-handoff status text, continue-run labeling, and queue/follow-up/recommended launch button labels + - the retained handoff-history snapshot now records the final post-collapse idle handoff state instead of the earlier pre-collapse recommendation state + - recommendation-source usage flags are suppressed for that idle-closed snapshot so retained handoff history does not imply live continuation pressure that is no longer present + +## Product effect + +The retained idle dashboard surface is now more truthful: + +- the next-step panel no longer invites queue/follow-up/recommended launch once the coach-to-review loop is already closed and idle +- the coach-handoff panel no longer narrates stale continuation lanes above an already-idle subsystem state +- retained handoff history no longer captures a fresh stale recommendation snapshot at that same boundary + +## Acceptance criteria + +- when the retained coach-to-review loop is closed and idle, the widget presents a closed-loop idle next-step and coach-handoff surface instead of launch-oriented continuation narration +- queue/follow-up/recommended button labels no longer advertise stale continuation in that state +- retained handoff history does not record a fresh stale recommendation snapshot from that state +- full product build succeeds + +## Validation checklist + +1. build `UnrealHyperTwist.sln` / `UnrealHyperTwistEditor` +2. confirm the retained closed-loop idle branch overrides next-step and coach-handoff presentation +3. confirm queue/follow-up/recommended launch labels collapse to idle wording in that state +4. confirm retained handoff history snapshots reflect the final idle-collapsed state instead of the earlier recommendation state +5. confirm no broader subsystem or queue-policy behavior was reopened + +## Validation result + +- full `Development Editor|Win64` build succeeded on `2026-05-07` +- the preexisting `UnrealMCP` / `PythonScriptPlugin` dependency warning remained unchanged + +## Next bounded follow-on slice + +- run one final retained-surface sweep across preview/history panes and land only if stale launch labels, generated packet headlines, or handoff narration still survive after the closed-loop idle collapse