Add native browser diagnostics timeline fidelity

This commit is contained in:
axiomlogicnexus 2026-06-19 20:55:07 +00:00
parent 48dbe00a35
commit b1e908dc87
11 changed files with 286 additions and 2 deletions

View file

@ -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(

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
}

View file

@ -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

View file

@ -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

View file

@ -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`

View file

@ -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:

View file

@ -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. |

View file

@ -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