From 10e5cf88aa3625541c7ffa0ecfea224b58d3dba4 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Mon, 11 May 2026 05:47:38 +0200 Subject: [PATCH] Expose dashboard verification recognition policy band --- .../HyperTwistCoachDashboardWidget.cpp | 95 ++++++++++++++ .../HyperTwistCoachDashboardWidget.h | 4 + .../HyperTwistTrainingTypes.h | 118 ++++++++++++++++++ ...RTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md | 3 +- ..._BAND_INSPECT_SURFACE_PACKET_2026-05-11.md | 53 ++++++++ 5 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 docs/arch/HYPERTWIST_PHASE4_DASHBOARD_VERIFICATION_RECOGNITION_REVIEW_POLICY_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp index 6609da1..c3628c2 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistCoachDashboardWidget.cpp @@ -14872,6 +14872,101 @@ UHyperTwistCoachDashboardWidget::GetDisplayedReviewPolicyStatusInspectSurface() return Surface; } +FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface +UHyperTwistCoachDashboardWidget::GetDisplayedVerificationRecognitionPolicyBandInspectSurface() const +{ + FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface Surface; + Surface.Headline = TEXT("Verification / recognition / review-policy band"); + + const FHyperTwistTrainingCoachDashboardVerificationActionInspectSurface VerificationActionSurface = + GetDisplayedVerificationActionInspectSurface(); + const FHyperTwistTrainingCoachDashboardRepositoryVerificationStatusInspectSurface RepositorySurface = + GetDisplayedRepositoryVerificationStatusInspectSurface(); + const FHyperTwistTrainingCoachDashboardRecognitionStatusInspectSurface RecognitionSurface = + GetDisplayedRecognitionStatusInspectSurface(); + const FHyperTwistTrainingCoachDashboardReviewPolicyStatusInspectSurface ReviewPolicySurface = + GetDisplayedReviewPolicyStatusInspectSurface(); + + Surface.VerificationActionStatusLine = VerificationActionSurface.StatusLine.IsEmpty() + ? TEXT("Verification action: unavailable.") + : VerificationActionSurface.StatusLine; + Surface.RepositoryVerificationStatusLine = RepositorySurface.StatusLine.IsEmpty() + ? TEXT("Repository verification status: unavailable.") + : RepositorySurface.StatusLine; + Surface.RecognitionStatusLine = RecognitionSurface.StatusLine.IsEmpty() + ? TEXT("Recognition status: unavailable.") + : RecognitionSurface.StatusLine; + Surface.ReviewPolicyStatusLine = ReviewPolicySurface.StatusLine.IsEmpty() + ? TEXT("Review-policy status: unavailable.") + : ReviewPolicySurface.StatusLine; + Surface.VerifyLabel = VerificationActionSurface.VerifyLabel.IsEmpty() + ? TEXT("Verify") + : VerificationActionSurface.VerifyLabel; + Surface.RepositoryPath = !RepositorySurface.RepositoryPath.IsEmpty() + ? RepositorySurface.RepositoryPath + : (VerificationActionSurface.RepositoryPath.IsEmpty() + ? TEXT("not yet verified") + : VerificationActionSurface.RepositoryPath); + Surface.LatestVerificationNote = !RepositorySurface.LatestNote.IsEmpty() + ? RepositorySurface.LatestNote + : (VerificationActionSurface.LatestNote.IsEmpty() + ? TEXT("none") + : VerificationActionSurface.LatestNote); + Surface.GeneratedLaunchRequestDetail = RepositorySurface.GeneratedLaunchRequestDetail.IsEmpty() + ? TEXT("n/a") + : RepositorySurface.GeneratedLaunchRequestDetail; + Surface.GeneratedExecutionDetail = RepositorySurface.GeneratedExecutionDetail.IsEmpty() + ? TEXT("n/a") + : RepositorySurface.GeneratedExecutionDetail; + Surface.RecognitionRunModeLabel = RecognitionSurface.RunModeLabel.IsEmpty() + ? TEXT("n/a") + : RecognitionSurface.RunModeLabel; + Surface.ReviewPolicyRunModeLabel = ReviewPolicySurface.RunModeLabel.IsEmpty() + ? TEXT("n/a") + : ReviewPolicySurface.RunModeLabel; + Surface.bVerifyEnabled = VerificationActionSurface.bVerifyEnabled; + Surface.bHasResolvedPath = RepositorySurface.bHasResolvedPath || VerificationActionSurface.bHasResolvedPath; + Surface.bDidRoundTripPass = RepositorySurface.bDidRoundTripPass || VerificationActionSurface.bDidRoundTripPass; + Surface.bSaveSucceeded = RepositorySurface.bSaveSucceeded || VerificationActionSurface.bSaveSucceeded; + Surface.bLoadSucceeded = RepositorySurface.bLoadSucceeded || VerificationActionSurface.bLoadSucceeded; + Surface.bCountsMatched = RepositorySurface.bCountsMatched || VerificationActionSurface.bCountsMatched; + Surface.bStateMatched = RepositorySurface.bStateMatched || VerificationActionSurface.bStateMatched; + Surface.bIntegrityMatched = RepositorySurface.bIntegrityMatched || VerificationActionSurface.bIntegrityMatched; + Surface.bDerivedMatched = RepositorySurface.bDerivedMatched || VerificationActionSurface.bDerivedMatched; + Surface.bHasGeneratedLaunchRequest = RepositorySurface.bHasGeneratedLaunchRequest; + Surface.bHasGeneratedExecutionTarget = RepositorySurface.bHasGeneratedExecutionTarget; + Surface.bCanExecuteGeneratedLaunchRequest = RepositorySurface.bCanExecuteGeneratedLaunchRequest; + Surface.bGeneratedExecutionWillRefreshRequest = RepositorySurface.bGeneratedExecutionWillRefreshRequest; + Surface.bHasActiveRun = RecognitionSurface.bHasActiveRun || ReviewPolicySurface.bHasActiveRun; + Surface.bHasLiveAttemptTimer = + RecognitionSurface.bHasLiveAttemptTimer || ReviewPolicySurface.bHasLiveAttemptTimer; + Surface.bHasRunnableCurrentCase = ReviewPolicySurface.bHasRunnableCurrentCase; + Surface.bHasRecognitionStatus = RecognitionSurface.bHasRecognitionStatus; + Surface.bHasRecognitionDetail = RecognitionSurface.bHasRecognitionDetail; + Surface.bHasReviewPolicyStatus = ReviewPolicySurface.bHasReviewPolicyStatus; + Surface.bHasReviewPolicyDetail = ReviewPolicySurface.bHasReviewPolicyDetail; + Surface.StatusLine = FString::Printf( + TEXT("Status band: verify %s | repository %s | recognition %s | review policy %s"), + Surface.bVerifyEnabled ? TEXT("ready") : TEXT("idle"), + Surface.bDidRoundTripPass ? TEXT("passed") : TEXT("pending"), + Surface.bHasRecognitionStatus ? TEXT("ready") : TEXT("pending"), + Surface.bHasReviewPolicyStatus ? TEXT("ready") : TEXT("pending")); + Surface.DetailLine = FString::Printf( + TEXT("%s | %s | %s | %s | path %s | note %s | recognition mode %s | review mode %s | active run %s | live timer %s | runnable case %s"), + *Surface.VerificationActionStatusLine, + *Surface.RepositoryVerificationStatusLine, + *Surface.RecognitionStatusLine, + *Surface.ReviewPolicyStatusLine, + *Surface.RepositoryPath, + *Surface.LatestVerificationNote, + *Surface.RecognitionRunModeLabel, + *Surface.ReviewPolicyRunModeLabel, + Surface.bHasActiveRun ? TEXT("yes") : TEXT("no"), + Surface.bHasLiveAttemptTimer ? TEXT("yes") : TEXT("no"), + Surface.bHasRunnableCurrentCase ? TEXT("yes") : TEXT("no")); + return Surface; +} + FHyperTwistTrainingCoachDashboardSelectedQueueNavigationInspectSurface UHyperTwistCoachDashboardWidget::GetDisplayedSelectedQueueNavigationInspectSurface() const { diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h index 31a490d..58ae194 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistCoachDashboardWidget.h @@ -1019,6 +1019,10 @@ public: FHyperTwistTrainingCoachDashboardReviewPolicyStatusInspectSurface GetDisplayedReviewPolicyStatusInspectSurface() const; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard") + FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface + GetDisplayedVerificationRecognitionPolicyBandInspectSurface() const; + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Coach|Dashboard") FHyperTwistTrainingCoachDashboardSelectedQueueNavigationInspectSurface GetDisplayedSelectedQueueNavigationInspectSurface() const; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index 8788740..741cfab 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -13847,6 +13847,124 @@ struct FHyperTwistTrainingCoachDashboardReviewPolicyStatusInspectSurface } }; +USTRUCT(BlueprintType) +struct FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString Headline; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString StatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString DetailLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString VerificationActionStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RepositoryVerificationStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RecognitionStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString ReviewPolicyStatusLine; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString VerifyLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RepositoryPath; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString LatestVerificationNote; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString GeneratedLaunchRequestDetail; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString GeneratedExecutionDetail; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RecognitionRunModeLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString ReviewPolicyRunModeLabel; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bVerifyEnabled = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasResolvedPath = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bDidRoundTripPass = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bSaveSucceeded = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bLoadSucceeded = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bCountsMatched = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bStateMatched = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bIntegrityMatched = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bDerivedMatched = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasGeneratedLaunchRequest = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasGeneratedExecutionTarget = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bCanExecuteGeneratedLaunchRequest = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bGeneratedExecutionWillRefreshRequest = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasActiveRun = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasLiveAttemptTimer = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasRunnableCurrentCase = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasRecognitionStatus = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasRecognitionDetail = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasReviewPolicyStatus = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + bool bHasReviewPolicyDetail = false; + + bool IsStructurallyValid() const + { + return !StatusLine.IsEmpty() + || !DetailLine.IsEmpty() + || bVerifyEnabled + || bHasRecognitionStatus + || bHasReviewPolicyStatus + || bDidRoundTripPass; + } +}; + USTRUCT(BlueprintType) struct FHyperTwistTrainingCoachDashboardSelectedQueueNavigationInspectSurface { diff --git a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md index e6edfeb..a24b94e 100644 --- a/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md +++ b/docs/HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md @@ -72,7 +72,8 @@ Current correction call from the source-exposed audit and current execution refr - the latest landed bounded `Phase 4` packet stays adjacent in that same retained-history dashboard lane and adds the dedicated method-drill recovery memory history status/detail inspect pair over the exact displayed retained-history lines already shown by the widget, so gameplay/Blueprint callers can inspect the current retained drill-recovery-memory text band directly without scraping text blocks or routing only through the broader selected-history and navigation surfaces - the latest landed bounded `Phase 4` packet also closes the adjacent preferred template-launch plus recommended/follow-up preview action control band with a single composite inspect seam over those three already-landed action surfaces, so gameplay/Blueprint callers can inspect that whole action cluster without stitching three separate action getters together - the latest landed bounded `Phase 4` packet deliberately chooses the next adjacent live dashboard consumer band and adds a single composite execution-action-control seam over attempt-result action enablement, run-control enablement, and queue-action enablement, so gameplay/Blueprint callers can inspect that whole execution-control cluster without stitching three separate control surfaces together - - with the retained-history text-band lane, the template-launch / preview action-control band, and the execution-action-control band now all closed baseline, the next best clean move is to deliberately choose another adjacent live dashboard consumer band rather than reopen already-landed text-band or action-control surfaces by drift + - the latest landed bounded `Phase 4` packet deliberately chooses another adjacent live dashboard consumer band and adds a single composite verification / recognition / review-policy seam over the already-landed verification action, repository verification status, recognition status, and review-policy status surfaces, so gameplay/Blueprint callers can inspect that whole status cluster without stitching four adjacent getters together + - with the retained-history text-band lane, the template-launch / preview action-control band, the execution-action-control band, and the verification / recognition / review-policy status band now all closed baseline, the next best clean move is to deliberately choose another adjacent live dashboard consumer band rather than reopen already-landed text-band or action-control/status surfaces by drift - 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 ## Donor portfolio phase taxonomy diff --git a/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_VERIFICATION_RECOGNITION_REVIEW_POLICY_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md b/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_VERIFICATION_RECOGNITION_REVIEW_POLICY_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md new file mode 100644 index 0000000..2a83fdc --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE4_DASHBOARD_VERIFICATION_RECOGNITION_REVIEW_POLICY_BAND_INSPECT_SURFACE_PACKET_2026-05-11.md @@ -0,0 +1,53 @@ +# HyperTwist Phase 4 dashboard verification recognition review-policy band inspect surface packet + +- bounded Phase `4` dashboard-consumer slice +- date: `2026-05-11` + +## Intent + +Deliberately choose another adjacent live dashboard consumer band and expose the verification, repository verification, recognition, and review-policy cluster as one inspectable gameplay and Blueprint seam. + +## Why this packet exists + +`UHyperTwistCoachDashboardWidget` already exposed four adjacent status/action surfaces: + +- `GetDisplayedVerificationActionInspectSurface()` +- `GetDisplayedRepositoryVerificationStatusInspectSurface()` +- `GetDisplayedRecognitionStatusInspectSurface()` +- `GetDisplayedReviewPolicyStatusInspectSurface()` + +But callers that wanted to reason about that whole adjacent status cluster still had to stitch those four getters together manually even though the widget presents them as one nearby dashboard band. + +## What changed + +- added `FHyperTwistTrainingCoachDashboardVerificationRecognitionPolicyBandInspectSurface` +- added `GetDisplayedVerificationRecognitionPolicyBandInspectSurface()` +- composed the new surface entirely over the already-landed verification action, repository verification status, recognition status, and review-policy status surfaces +- kept the packet bounded by avoiding any new backend derivation or new widget-state caching + +## Files + +- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistTrainingTypes.h` +- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistTraining\HyperTwistCoachDashboardWidget.h` +- `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Private\HyperTwistTraining\HyperTwistCoachDashboardWidget.cpp` +- `C:\HyperTwist\docs\HYPERTWIST_ROADMAP_OVERHAUL_EXPANSION_GUIDE.md` + +## Outcome + +Gameplay and Blueprint callers can now inspect: + +- the whole adjacent verification / recognition / review-policy dashboard band through one surface +- the verification action, repository verification, recognition, and review-policy status lines together +- verify label, repository path, latest verification note, generated launch/execution detail, and recognition/review-mode context +- round-trip verification posture, generated launch/execution posture, active-run/live-timer/runnable-case posture, and aggregate recognition/review-policy availability posture + +without stitching four separate adjacent getters together manually. + +## Validation + +- full `Development Editor | Win64` MSBuild on `UnrealHyperTwist.sln` + - passed with `0 Warning(s), 0 Error(s)` + +## Next clean slice + +Treat the retained-history text-band lane, the template-launch / preview action-control band, the execution-action-control band, and the verification / recognition / review-policy status band as landed baseline, then deliberately choose another adjacent live dashboard consumer band instead of reopening already-landed surfaces by drift.