diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistBrowser/HyperTwistBrowserWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistBrowser/HyperTwistBrowserWidget.cpp index 9c06283..0d4c1e9 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistBrowser/HyperTwistBrowserWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistBrowser/HyperTwistBrowserWidget.cpp @@ -85,6 +85,7 @@ namespace HyperTwistBrowserWidgetInternal ShellStateReceiveCount ); } + } void UHyperTwistBrowserWidget::LoadBundledBrowserShell() @@ -216,6 +217,11 @@ FHyperTwistBrowserOperatorStatusSurface UHyperTwistBrowserWidget::GetBrowserOper StatusSurface.RuntimeStageId = RuntimeStatus.RuntimeStatusId; StatusSurface.RuntimeMode = RuntimeStatus.RuntimeMode; StatusSurface.BridgeTrafficStatus = RuntimeStatus.BridgeTrafficStatus; + StatusSurface.BootstrapStartedAtUtc = RuntimeStatus.BootstrapStartedAtUtc; + StatusSurface.RuntimeReadyAtUtc = RuntimeStatus.RuntimeReadyAtUtc; + StatusSurface.LastCommandReceivedAtUtc = RuntimeStatus.LastCommandReceivedAtUtc; + StatusSurface.LastShellStateReceivedAtUtc = RuntimeStatus.LastShellStateReceivedAtUtc; + StatusSurface.FallbackReason = RuntimeStatus.FallbackReason; StatusSurface.AdapterCount = RuntimeStatus.AdapterCount; StatusSurface.Headline = TEXT("Browser runtime live"); StatusSurface.SummaryLine = HyperTwistBrowserWidgetInternal::MakeLiveSummaryLine( @@ -250,6 +256,10 @@ FHyperTwistBrowserOperatorStatusSurface UHyperTwistBrowserWidget::GetBrowserOper ? RuntimeReadyPayload.Status : TEXT("ready"); StatusSurface.RuntimeMode = RuntimeMode; + StatusSurface.BootstrapStartedAtUtc = TEXT("awaiting-live-runtime-status-envelope"); + StatusSurface.RuntimeReadyAtUtc = TEXT("awaiting-live-runtime-status-envelope"); + StatusSurface.LastCommandReceivedAtUtc = TEXT("awaiting-live-runtime-status-envelope"); + StatusSurface.LastShellStateReceivedAtUtc = TEXT("awaiting-live-runtime-status-envelope"); StatusSurface.AdapterCount = AdapterCount; StatusSurface.Headline = TEXT("Browser runtime ready"); StatusSurface.SummaryLine = HyperTwistBrowserWidgetInternal::MakeReadySummaryLine( @@ -271,6 +281,10 @@ FHyperTwistBrowserOperatorStatusSurface UHyperTwistBrowserWidget::GetBrowserOper StatusSurface.RuntimeStageId = TEXT("waiting"); StatusSurface.RuntimeMode = TEXT("bootstrapping"); + StatusSurface.BootstrapStartedAtUtc = TEXT("pending-runtime-ready"); + StatusSurface.RuntimeReadyAtUtc = TEXT("pending-runtime-ready"); + StatusSurface.LastCommandReceivedAtUtc = TEXT("pending-runtime-ready"); + StatusSurface.LastShellStateReceivedAtUtc = TEXT("pending-runtime-ready"); StatusSurface.Headline = TEXT("Browser runtime waiting"); StatusSurface.SummaryLine = TEXT("awaiting runtime-ready handshake"); StatusSurface.QueueStatusLine = HyperTwistBrowserWidgetInternal::MakeQueueStatusLine( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp index 3f383eb..29af952 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp @@ -97,14 +97,71 @@ namespace HyperTwistTrainingPanelWidgetInternal ); } + FString ResolveBrowserRuntimeFactOrPlaceholder( + const FString& RuntimeFact, + const TCHAR* Placeholder + ) + { + return RuntimeFact.IsEmpty() ? FString(Placeholder) : RuntimeFact; + } + + FString BuildBrowserRuntimeTimelineLine( + const FHyperTwistBrowserOperatorStatusSurface& OperatorStatusSurface + ) + { + const FString BootstrapStartedAtUtc = ResolveBrowserRuntimeFactOrPlaceholder( + OperatorStatusSurface.BootstrapStartedAtUtc, + TEXT("pending") + ); + const FString RuntimeReadyAtUtc = ResolveBrowserRuntimeFactOrPlaceholder( + OperatorStatusSurface.RuntimeReadyAtUtc, + TEXT("pending") + ); + const FString FallbackSuffix = OperatorStatusSurface.FallbackReason.IsEmpty() + ? FString() + : FString::Printf(TEXT(" | fallback %s"), *OperatorStatusSurface.FallbackReason); + + return FString::Printf( + TEXT("timeline boot %s | ready %s%s"), + *BootstrapStartedAtUtc, + *RuntimeReadyAtUtc, + *FallbackSuffix + ); + } + + FString BuildBrowserRuntimeReceiptLine( + const FHyperTwistBrowserOperatorStatusSurface& OperatorStatusSurface + ) + { + const FString LastCommandReceivedAtUtc = ResolveBrowserRuntimeFactOrPlaceholder( + OperatorStatusSurface.LastCommandReceivedAtUtc, + TEXT("pending") + ); + const FString LastShellStateReceivedAtUtc = ResolveBrowserRuntimeFactOrPlaceholder( + OperatorStatusSurface.LastShellStateReceivedAtUtc, + TEXT("pending") + ); + + return FString::Printf( + TEXT("receipts cmd %s | shell %s"), + *LastCommandReceivedAtUtc, + *LastShellStateReceivedAtUtc + ); + } + FString BuildBrowserRuntimeDetailLine( const FHyperTwistBrowserOperatorStatusSurface& OperatorStatusSurface ) { + const FString TimelineLine = BuildBrowserRuntimeTimelineLine(OperatorStatusSurface); + const FString ReceiptLine = BuildBrowserRuntimeReceiptLine(OperatorStatusSurface); + return FString::Printf( - TEXT("%s | %s | stage %s | ready %s | runtime-ready payload %s | runtime-status envelope %s"), + TEXT("%s | %s | %s | %s | stage %s | ready %s | runtime-ready payload %s | runtime-status envelope %s"), *OperatorStatusSurface.BridgeStatusLine, *OperatorStatusSurface.ShellAuthorityLine, + *TimelineLine, + *ReceiptLine, *OperatorStatusSurface.RuntimeStageId, OperatorStatusSurface.bBrowserRuntimeReady ? TEXT("yes") : TEXT("no"), OperatorStatusSurface.bHasRuntimeReadyPayload ? TEXT("yes") : TEXT("no"), @@ -585,6 +642,11 @@ UHyperTwistTrainingPanelWidget::GetDisplayedBrowserRuntimeInspectSurface() const Surface.RuntimeStageId = OperatorStatusSurface.RuntimeStageId; Surface.RuntimeMode = OperatorStatusSurface.RuntimeMode; Surface.BridgeTrafficStatus = OperatorStatusSurface.BridgeTrafficStatus; + Surface.BootstrapStartedAtUtc = OperatorStatusSurface.BootstrapStartedAtUtc; + Surface.RuntimeReadyAtUtc = OperatorStatusSurface.RuntimeReadyAtUtc; + Surface.LastCommandReceivedAtUtc = OperatorStatusSurface.LastCommandReceivedAtUtc; + Surface.LastShellStateReceivedAtUtc = OperatorStatusSurface.LastShellStateReceivedAtUtc; + Surface.FallbackReason = OperatorStatusSurface.FallbackReason; Surface.AdapterCount = OperatorStatusSurface.AdapterCount; Surface.PendingCommandCount = OperatorStatusSurface.PendingCommandCount; Surface.PendingShellStateCount = OperatorStatusSurface.PendingShellStateCount; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistBrowser/HyperTwistBrowserWidget.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistBrowser/HyperTwistBrowserWidget.h index 9504b1e..afd4617 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistBrowser/HyperTwistBrowserWidget.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistBrowser/HyperTwistBrowserWidget.h @@ -46,6 +46,21 @@ struct FHyperTwistBrowserOperatorStatusSurface UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") FString BridgeTrafficStatus; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") + FString BootstrapStartedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") + FString RuntimeReadyAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") + FString LastCommandReceivedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") + FString LastShellStateReceivedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") + FString FallbackReason; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist|Browser") int32 AdapterCount = 0; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h index 2634fe4..fc28eda 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h @@ -9929,6 +9929,21 @@ struct FHyperTwistTrainingBrowserRuntimeInspectSurface UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") FString BridgeTrafficStatus; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString BootstrapStartedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString RuntimeReadyAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString LastCommandReceivedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString LastShellStateReceivedAtUtc; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString FallbackReason; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") int32 AdapterCount = 0; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistBrowserBridgeObjectTest.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistBrowserBridgeObjectTest.cpp index 3224a09..32f9781 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistBrowserBridgeObjectTest.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistBrowserBridgeObjectTest.cpp @@ -665,6 +665,26 @@ bool FHyperTwistBrowserWidgetOperatorStatusSurfaceLiveTest::RunTest(const FStrin StatusSurface.AdapterCount, 21 ); + TestEqual( + TEXT("The live surface must preserve the browser bootstrap timestamp."), + StatusSurface.BootstrapStartedAtUtc, + TEXT("2026-06-19T04:30:00Z") + ); + TestEqual( + TEXT("The live surface must preserve the runtime-ready timestamp."), + StatusSurface.RuntimeReadyAtUtc, + TEXT("2026-06-19T04:31:00Z") + ); + TestEqual( + TEXT("The live surface must preserve the last command receipt timestamp."), + StatusSurface.LastCommandReceivedAtUtc, + TEXT("2026-06-19T04:31:10Z") + ); + TestEqual( + TEXT("The live surface must preserve the last shell-state receipt timestamp."), + StatusSurface.LastShellStateReceivedAtUtc, + TEXT("2026-06-19T04:31:11Z") + ); TestTrue( TEXT("The live surface must summarize bridge traffic state."), StatusSurface.SummaryLine.Contains(TEXT("shell-state-live")) @@ -852,6 +872,22 @@ bool FHyperTwistBrowserTrainingPanelRuntimeInspectSurfaceTest::RunTest( LiveSurface.DetailLine.Contains(TEXT("bridge commands 3")) && LiveSurface.DetailLine.Contains(TEXT("shell states 2")) ); + TestEqual( + TEXT("The training panel browser runtime surface must preserve the browser bootstrap timestamp."), + LiveSurface.BootstrapStartedAtUtc, + TEXT("2026-06-19T04:30:00Z") + ); + TestEqual( + TEXT("The training panel browser runtime surface must preserve the runtime-ready timestamp."), + LiveSurface.RuntimeReadyAtUtc, + TEXT("2026-06-19T04:31:00Z") + ); + TestTrue( + TEXT("The training panel browser runtime surface must expose the timeline and receipt facts in its detail line."), + LiveSurface.DetailLine.Contains(TEXT("timeline boot 2026-06-19T04:30:00Z")) + && LiveSurface.DetailLine.Contains(TEXT("receipts cmd 2026-06-19T04:31:10Z")) + && LiveSurface.DetailLine.Contains(TEXT("shell 2026-06-19T04:31:11Z")) + ); TestTrue( TEXT("The training panel browser runtime surface must preserve the shell authority line."), LiveSurface.ShellAuthorityLine.Contains(TEXT("Content/Browser/index.html")) @@ -949,6 +985,12 @@ bool FHyperTwistBrowserCoachDashboardRuntimeInspectSurfaceTest::RunTest( TEXT("The coach dashboard browser runtime inspect surface must retain shell authority visibility."), BrowserRuntimeSurface.DetailLine.Contains(TEXT("Content/Browser/index.html")) ); + TestTrue( + TEXT("The coach dashboard browser runtime inspect surface must carry the runtime timeline and receipt facts through the dashboard presentation."), + BrowserRuntimeSurface.DetailLine.Contains(TEXT("timeline boot 2026-06-19T04:30:00Z")) + && BrowserRuntimeSurface.DetailLine.Contains(TEXT("receipts cmd 2026-06-19T04:31:10Z")) + && BrowserRuntimeSurface.DetailLine.Contains(TEXT("shell 2026-06-19T04:31:11Z")) + ); return true; } diff --git a/docs/arch/HYPERTWIST_PHASE8A_BROWSER_NATIVE_OPERATOR_DIAGNOSTICS_FIDELITY_IMPLEMENTATION_PACKET_2026-06-19.md b/docs/arch/HYPERTWIST_PHASE8A_BROWSER_NATIVE_OPERATOR_DIAGNOSTICS_FIDELITY_IMPLEMENTATION_PACKET_2026-06-19.md new file mode 100644 index 0000000..e5cda1e --- /dev/null +++ b/docs/arch/HYPERTWIST_PHASE8A_BROWSER_NATIVE_OPERATOR_DIAGNOSTICS_FIDELITY_IMPLEMENTATION_PACKET_2026-06-19.md @@ -0,0 +1,115 @@ +# HyperTwist Phase 8A browser native operator diagnostics-fidelity implementation packet + +Created on `2026-06-19` + +## Status + +- first-party HyperTwist packet +- bounded first-party `Phase 8A` continuation slice + +## Purpose + +This packet continues the already-landed native operator/training browser +diagnostics lane by carrying the browser shell's richer runtime timeline and +receipt facts through Unreal-owned status contracts. + +The landed slice is: + +- retain typed browser bootstrap/runtime-ready timestamps plus last command and + shell-state receipt timestamps in + `FHyperTwistBrowserOperatorStatusSurface` +- mirror those typed facts into + `FHyperTwistTrainingBrowserRuntimeInspectSurface` +- widen the native training/operator detail surface so browser runtime + diagnostics stay closer to the authoritative browser-owned status surface + without reopening topology +- widen focused browser automation so the operator surface plus the training + and coach-dashboard inspect seams prove those runtime timeline and receipt + facts end-to-end on the Windows lane + +It is not: + +- a topology widening into the optional full-browser client branch +- a renderer-port or native `MagicTile` replacement packet +- a browser-owned UI replacement for the embedded browser shell + +## Current authority basis + +This implementation packet stands on: + +- `docs/ops/HYPERTWIST_COMPREHENSIVE_RECONSTRUCTION_ROADMAP_2026-06-10.md` +- `docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md` +- `docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md` +- `docs/v6_5_deep_manual_pack/HyperTwist/ARCHITECTURE.md` +- `docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md` +- `docs/arch/HYPERTWIST_PHASE8A_BROWSER_NATIVE_OPERATOR_STATUS_SURFACE_IMPLEMENTATION_PACKET_2026-06-19.md` +- `docs/arch/HYPERTWIST_PHASE8A_BROWSER_NATIVE_OPERATOR_DIAGNOSTICS_PANEL_IMPLEMENTATION_PACKET_2026-06-19.md` + +## Current implementation scope + +Current code now extends the live embedded-browser lane through: + +- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistBrowser/HyperTwistBrowserWidget.h` + typed bootstrap/runtime-ready timestamp, receipt-timestamp, and fallback + ownership on `FHyperTwistBrowserOperatorStatusSurface` +- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistBrowser/HyperTwistBrowserWidget.cpp` + native projection of those typed timing and receipt facts from retained + runtime-status ownership +- `UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingTypes.h` + mirrored native training/operator inspect ownership for the same facts +- `UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingPanelWidget.cpp` + richer native runtime detail-line projection plus mirrored inspect-surface + ownership for the training/operator seam +- focused browser automation in + `UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistBrowserBridgeObjectTest.cpp` + for the updated operator, training-panel, and coach-dashboard runtime + diagnostics seams + +## Why this continuation mattered + +The earlier `Phase 8A` continuations already closed native waiting/ready/live +status ownership and wired that posture into small native training/dashboard +consumers. + +What still remained thinner was fidelity: the browser shell's status surface +already carried bootstrap/runtime-ready timestamps and latest receipt facts, +but the native operator/training seams were still flattening those richer +facts down into a narrower queue and bridge summary. This packet closes that +remaining truthfulness gap without opening a new family or topology branch. + +## Validation + +Local validation: + +- `git diff --check` +- result on `2026-06-19`: passed + +Windows build validation: + +- `Build.bat UnrealHyperTwistEditor Win64 Development -Project='C:\HyperTwist_worktrees\phase10validate\UnrealHyperTwist\UnrealHyperTwist.uproject' -WaitMutex -NoHotReloadFromIDE -NoUba` +- result on `2026-06-19`: `Result: Succeeded` with UnrealBuildTool + `Total execution time: 3261.17 seconds` on isolated worktree + `C:\HyperTwist_worktrees\phase10validate` + +Focused browser validation: + +- `Automation RunTests HyperTwist.Browser` +- result on `2026-06-19`: report `index.json` exported to + `Saved\AutomationReports\Browser-NativeOperatorTimelineFidelity-Verify` + with `14` `HyperTwist.Browser.*` tests succeeded, `0` failed, including: + - `HyperTwist.Browser.CoachDashboard.RuntimeInspectSurface` + - `HyperTwist.Browser.TrainingPanel.RuntimeInspectSurface` + - `HyperTwist.Browser.Widget.OperatorStatusSurfaceLive` + +## Product effect + +This packet keeps the embedded browser/CEF shipping lane intact, but raises +native diagnostics fidelity: + +- Unreal operator and training/dashboard inspect surfaces now carry the same + typed runtime timeline and latest receipt facts that the browser shell + status surface already owns +- native diagnostics can tell a truer waiting/ready/live story without falling + back to browser-only inspection or stale rendered summaries +- the lane still stays bounded to embedded-browser shipping posture rather than + reopening optional full-browser-client or native renderer branches diff --git a/docs/ops/HYPERTWIST_COMPREHENSIVE_RECONSTRUCTION_ROADMAP_2026-06-10.md b/docs/ops/HYPERTWIST_COMPREHENSIVE_RECONSTRUCTION_ROADMAP_2026-06-10.md index f5c8154..8300757 100644 --- a/docs/ops/HYPERTWIST_COMPREHENSIVE_RECONSTRUCTION_ROADMAP_2026-06-10.md +++ b/docs/ops/HYPERTWIST_COMPREHENSIVE_RECONSTRUCTION_ROADMAP_2026-06-10.md @@ -432,6 +432,8 @@ Closure read: - Native operator-surface continuation on `2026-06-19`: current code now projects a compact native/operator-facing browser runtime status surface from the typed Unreal-owned runtime-ready and runtime-status caches, exposing waiting/ready/live stages, queue carryover, bridge receive counts, runtime mode, adapter count, and shell authority while clearing retained runtime ownership whenever shell authority changes so stale live state cannot survive a browser reload - Native diagnostics-panel continuation on `2026-06-19`: current implementation now wires that typed browser runtime operator surface into `UHyperTwistTrainingPanelWidget` and `UHyperTwistCoachDashboardWidget`, adds explicit observed-browser attachment control plus a compact `[Browser Runtime Diagnostics]` native dashboard section, and keeps the dashboard inspect seam live-authoritative even before presentation refresh so operators can read waiting/ready/live browser state without opening the embedded browser shell - Validation evidence on `2026-06-19`: the same primary reverse-SSH `localhost:22022` lane rebuilt isolated worktree `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 3258.26 seconds`, then `Automation RunTests HyperTwist.Browser` exported `Saved\AutomationReports\Browser-NativeOperatorDiagnosticsPanel-Verify\index.json` with `14` `HyperTwist.Browser.*` tests succeeded and `0` failed, including `CoachDashboard.RuntimeInspectSurface` and `TrainingPanel.RuntimeInspectSurface` +- Native diagnostics-fidelity continuation on `2026-06-19`: current code now carries typed browser bootstrap/runtime-ready timestamps, last command and shell-state receipt timestamps, and fallback reason through `FHyperTwistBrowserOperatorStatusSurface` plus the native training/dashboard inspect seams, so Unreal-side diagnostics mirror the authoritative browser runtime status surface more faithfully without reopening topology +- Validation evidence on `2026-06-19`: the same primary reverse-SSH `localhost:22022` lane rebuilt isolated worktree `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 3261.17 seconds`, then `Automation RunTests HyperTwist.Browser` exported `Saved\AutomationReports\Browser-NativeOperatorTimelineFidelity-Verify\index.json` with `14` `HyperTwist.Browser.*` tests succeeded and `0` failed, including `CoachDashboard.RuntimeInspectSurface`, `TrainingPanel.RuntimeInspectSurface`, and `Widget.OperatorStatusSurfaceLive` - Validation evidence on `2026-06-19`: the same primary reverse-SSH `localhost:22022` lane rebuilt isolated worktree `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 59.53 seconds`, then `Automation RunTests HyperTwist.Browser` exported `Saved\AutomationReports\Browser-NativeOperatorStatusSurface-Reset-Verify\index.json` with `12` `HyperTwist.Browser.*` tests succeeded and `0` failed, including `Widget.OperatorStatusSurfaceWaiting`, `Widget.OperatorStatusSurfaceLive`, and `Widget.OperatorStatusSurfaceResetOnShellChange` ### 8B — State Synchronization diff --git a/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md b/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md index f44f654..ad33e75 100644 --- a/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md +++ b/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md @@ -151,6 +151,8 @@ Use these as the current governing docs: can surface a compact `[Browser Runtime Diagnostics]` section without making its inspect seam depend on cached rendered strings - Validation evidence on `2026-06-19`: the same primary reverse-SSH `localhost:22022` lane rebuilt isolated worktree `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 3258.26 seconds`, then `Automation RunTests HyperTwist.Browser` exported `Saved\AutomationReports\Browser-NativeOperatorDiagnosticsPanel-Verify\index.json` with `14` `HyperTwist.Browser.*` tests succeeded and `0` failed, including `CoachDashboard.RuntimeInspectSurface` and `TrainingPanel.RuntimeInspectSurface` +- that same shipping/browser posture now also carries typed browser bootstrap/runtime-ready timestamps, last command and shell-state receipt timestamps, and fallback reason through the native operator and training/dashboard inspect seams, so Unreal-side diagnostics mirror the authoritative browser runtime status surface more faithfully without reopening topology +- Validation evidence on `2026-06-19`: the same primary reverse-SSH `localhost:22022` lane rebuilt isolated worktree `C:\HyperTwist_worktrees\phase10validate` with `Result: Succeeded` and UnrealBuildTool `Total execution time: 3261.17 seconds`, then `Automation RunTests HyperTwist.Browser` exported `Saved\AutomationReports\Browser-NativeOperatorTimelineFidelity-Verify\index.json` with `14` `HyperTwist.Browser.*` tests succeeded and `0` failed, including `CoachDashboard.RuntimeInspectSurface`, `TrainingPanel.RuntimeInspectSurface`, and `Widget.OperatorStatusSurfaceLive` - `MagicTile` `Phase 7C` is now landed separately through the bundled tiling native-behavior proof contract/probe seam, runtime-library proof helpers, and focused Windows validation on isolated worktree `C:\HyperTwist_worktrees\phase10validate` diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/ARCHITECTURE.md b/docs/v6_5_deep_manual_pack/HyperTwist/ARCHITECTURE.md index e5cc1d5..f1a6ed2 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/ARCHITECTURE.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/ARCHITECTURE.md @@ -124,6 +124,12 @@ an attached `UHyperTwistBrowserWidget`, and `[Browser Runtime Diagnostics]` panel while keeping its inspect getter tied to live browser-runtime ownership rather than cached rendered strings. +That same native diagnostics seam now also carries the browser shell's typed +bootstrap/runtime-ready timestamps, last command/shell-state receipt facts, +and fallback reason through the Unreal-owned operator and training/dashboard +inspect surfaces, so native diagnostics stay closer to the authoritative +browser status surface without widening into a new browser topology. + The optional full-browser client path now exists only as a spec-defined first-party branch: diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md index 785a9ee..c3d70cb 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md @@ -144,7 +144,7 @@ Do not collapse those three tiers into one undifferentiated "features" voice. | First-party provider-neutral custom-endpoint runtime routing | Implemented now | landed first-party `Phase 6R-AI` | First-party per-session provider-profile endpoint selection, runtime routing, fallback-health reflection, and bounded provider-backed transport-failure posture are now live above the landed provider-profile/BYOK and provider-routing seams. Provider-specific overlays, payment execution, provider-portal ownership, and payload shipping remain deferred. | | Analytics/reporting surfaces | Implemented now | landed analytics/reporting packets | Reporting is real, but bounded to accepted retained slices. | | Rewritten training analytics and report reference grounding | Implemented now | `apache/echarts` retained permissive lane + first-party current code | Current live `Training Analytics` reference side includes four rewritten first-party targets grounded in retained `apache/echarts`: session outcome and progress reporting, analytics data-view and export, timing-trend history and overview interaction, and the optional richer explainer or sidecar boundary. This does not displace the landed `Phase 3R-C` first-party analytics/reporting owner or elevate `ecomfe/echarts-gl` and `ecomfe/zrender` beyond support-only sidecars. | -| Browser/spatial/media adjunct surfaces | Implemented now | landed `three.js`, `react-three-fiber`, `xr`, `model-viewer`, `remotion` packets | These are implemented bounded families, and the current Phase 1 browser-runtime landing now includes a first-party authoritative `Content/Browser/index.html` shell, bundled-runtime upgrade path, committed clean-checkout plain-JS fallback runtime, embedded `UHyperTwistBrowserWidget` bridge, the `2026-06-19` runtime-ready queue hardening that retains outbound Unreal shell traffic until the browser runtime is ready, a same-day first-party `Browser Runtime Status` surface with shared boot-state ownership across bundled and fallback shells, a follow-on typed Unreal-side `browser-runtime-status` capture seam that retains the last valid runtime snapshot across unrelated later envelope traffic until explicit reset, a second follow-on typed Unreal-side `hypertwist-runtime-ready` capture seam that raises the original handshake payload out of raw JSON-only handling without changing queue flush behavior, a third same-day native/operator-facing status surface that consumes those typed seams inside Unreal while clearing retained runtime ownership on shell-authority change, and a fourth same-day native training/operator diagnostics-panel continuation that wires that typed status ownership into `UHyperTwistTrainingPanelWidget` and the coach dashboard without making the dashboard inspect seam depend on stale rendered strings. This still is not proof of unlimited browser-shell parity. | +| Browser/spatial/media adjunct surfaces | Implemented now | landed `three.js`, `react-three-fiber`, `xr`, `model-viewer`, `remotion` packets | These are implemented bounded families, and the current Phase 1 browser-runtime landing now includes a first-party authoritative `Content/Browser/index.html` shell, bundled-runtime upgrade path, committed clean-checkout plain-JS fallback runtime, embedded `UHyperTwistBrowserWidget` bridge, the `2026-06-19` runtime-ready queue hardening that retains outbound Unreal shell traffic until the browser runtime is ready, a same-day first-party `Browser Runtime Status` surface with shared boot-state ownership across bundled and fallback shells, a follow-on typed Unreal-side `browser-runtime-status` capture seam that retains the last valid runtime snapshot across unrelated later envelope traffic until explicit reset, a second follow-on typed Unreal-side `hypertwist-runtime-ready` capture seam that raises the original handshake payload out of raw JSON-only handling without changing queue flush behavior, a third same-day native/operator-facing status surface that consumes those typed seams inside Unreal while clearing retained runtime ownership on shell-authority change, a fourth same-day native training/operator diagnostics-panel continuation that wires that typed status ownership into `UHyperTwistTrainingPanelWidget` and the coach dashboard without making the dashboard inspect seam depend on stale rendered strings, and a fifth same-day diagnostics-fidelity continuation that now carries bootstrap/runtime-ready timestamps, last command/shell-state receipt timestamps, and fallback reason through the same native operator/training seams. This still is not proof of unlimited browser-shell parity. | | Optional full-browser client path above Unreal backend authority | Deep-source grounded retained | landed first-party `Phase 8B` preparation packet + spec/evidence continuation | This branch remains a spec-only first-party option: a browser-owned rendering and input shell may sit above explicit Unreal backend seams while Unreal remains authoritative for puzzle, training, timer, replay, and persistence state. The current continuation now fixes the allowed seam families to catalog, session, action, state, continuity push, replay, persistence status, and runtime health, while keeping offline-first, public-hosted, and native renderer widening posture deferred. The landed embedded browser/CEF shell remains the current shipping posture, and this branch stays separate from any native `MagicTile` behavior or renderer widening. | | Rewritten browser spatial scene and renderer reference grounding | Implemented now | `mrdoob/three.js` retained permissive lane + first-party current code | Current live `Browser 3D and XR Support` reference side includes one rewritten first-party target grounded in retained `mrdoob/three.js`: the browser spatial scene and renderer contract. This does not displace the landed `Phase 3R-F` first-party browser spatial owner trio or absorb the adjacent `react-three-fiber` renderer-bridge and `xr` session slices. | | Rewritten React-side browser renderer and event-bridge grounding | Implemented now | `pmndrs/react-three-fiber` retained permissive lane + first-party current code | Current live `Browser 3D and XR Support` reference side includes one rewritten first-party target grounded in retained `react-three-fiber`: the React scene renderer and event bridge. This does not displace the landed `Phase 3R-F` first-party browser spatial owner trio or absorb the adjacent `three.js` scene substrate and `xr` session slices. | diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md b/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md index 0883390..5f2504e 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md @@ -155,6 +155,17 @@ Current consolidated milestone snapshot: `HyperTwist.Browser.*` tests including `CoachDashboard.RuntimeInspectSurface` and `TrainingPanel.RuntimeInspectSurface` +- that same embedded-browser lane then gained a native diagnostics-fidelity + continuation on `2026-06-19`, carrying typed browser bootstrap/runtime-ready + timestamps, last command/shell-state receipt timestamps, and fallback reason + through `FHyperTwistBrowserOperatorStatusSurface` plus the native + training/dashboard inspect seams so Unreal-side diagnostics stay closer to + the authoritative browser status surface, with refreshed primary-lane + `localhost:22022` validation at `14` green `HyperTwist.Browser.*` tests + exported to `Saved\AutomationReports\Browser-NativeOperatorTimelineFidelity-Verify`, + including `CoachDashboard.RuntimeInspectSurface`, + `TrainingPanel.RuntimeInspectSurface`, and + `Widget.OperatorStatusSurfaceLive` - classic-cube `Phase 9A` replay recording is now closed through first-party runtime capture, `.json` replay persistence, local playback reconstruction, schema-light replay normalization across save/load/viewer import, and live