docs(runtime): close cost-budgeted streaming slice
Record the exact physical-display evidence, ownership fixes, budget semantics, and performance deltas that close Slice E. Reconcile the architecture, roadmap, milestones, issues, documentation map, and session instructions before the explicit F/G approval gate. Co-authored-by: Erik Nilsson <erikn@users.noreply.github.com>
This commit is contained in:
parent
91e82c3c68
commit
e7d9d6fa7d
12 changed files with 290 additions and 46 deletions
|
|
@ -750,6 +750,18 @@ outer visibility notice cannot be observed partially. Settings and native
|
|||
callbacks may defer policy changes, but cannot bypass the frame meter to drain
|
||||
pending publication.
|
||||
|
||||
Loaded spatial residency is deliberately distinct from world availability.
|
||||
During login/portal quiescence, destination live objects acquire and retain
|
||||
their renderer projection so composite/readiness preparation can converge
|
||||
offscreen. `GpuWorldState.IsLiveEntityProjectionResident` is the ownership
|
||||
predicate used by `LiveEntityRuntime`; `IsLiveEntityVisible` additionally
|
||||
applies generation availability and remains the consumer predicate for
|
||||
drawing, collision, picking, radar/status targeting, effects, and audio. CPU
|
||||
mesh-cache hits may stage a missing GPU upload only while their exact owner
|
||||
token is live, preventing an evicted projection from recreating stale work.
|
||||
The Slice E connected closeout is recorded in
|
||||
`docs/research/2026-07-24-slice-e-cost-budgeted-streaming-report.md`.
|
||||
|
||||
### World-reveal readiness ownership
|
||||
|
||||
`WorldRevealCoordinator` is the single App-layer owner of each login or portal
|
||||
|
|
|
|||
|
|
@ -393,6 +393,15 @@ sign-invariant complete orientation, and cell changes so an in-place turn or a
|
|||
same-pose EnvCell crossing cannot leave offset Setup shapes stale.
|
||||
The projectile controller retains its separate body/InWorld/shadow edge owner.
|
||||
|
||||
During login/portal quiescence, loaded projection residency and gameplay
|
||||
visibility are separate. `LiveEntityRuntime` validates spatial ownership
|
||||
through `GpuWorldState.IsLiveEntityProjectionResident`, allowing destination
|
||||
renderer preparation to converge offscreen. World consumers continue through
|
||||
availability-gated `IsLiveEntityVisible`, so drawing, collision, picking,
|
||||
radar/status targeting, effects, and audio remain closed until reveal. This
|
||||
distinction is part of the Slice E connected gate, not an alternate live-entity
|
||||
lifetime.
|
||||
|
||||
Remote teleport placement is bounded in `Physics/RemoteTeleportController`,
|
||||
not `GameWindow`: it retains at most one pending request per materialized
|
||||
incarnation, scopes it by the live generation and accepted PositionSequence,
|
||||
|
|
@ -453,10 +462,10 @@ useful ordering seam, but its ownership status is **partial**.
|
|||
| World environment | **Complete ownership** | `WorldEnvironmentController` solely owns WorldTime, the loaded DAT sky, current day group, Weather, server synchronization, AdminEnvirons bridging, and debug time/weather cycles. `GameWindow` keeps ABI-compatible readonly aliases to the same clock/weather instances and composes one render source plus the two live-session callbacks. TS-54/TS-55 register the remaining centered UI sound and full fog/ambient/radar behavior gaps. |
|
||||
| Live identity/lifetime | **Complete App integration** | `LiveEntityRuntime` owns incarnation identity, accepted snapshots/timestamps, runtime components, and logical/spatial lifetime. `LiveEntityHydrationController`, `LiveEntityRuntimeTeardownController`, and `LiveEntityNetworkUpdateController` own DAT-backed hydration, retryable cleanup, and accepted Position/Vector/State/Movement presentation without a second GUID owner (`aa90c646`). |
|
||||
| Inbound/object-frame order | **Complete App orchestration** | `UpdateFrameOrchestrator` owns the complete typed host phase graph; `RetailInboundEventDispatcher`, `RetailLiveFrameCoordinator`, `LiveObjectFrameController`, `LiveSpatialPresentationReconciler`, streaming/input/teleport/player-mode/camera owners preserve the accepted order. `GameWindow.OnUpdate` is one profiler-scoped handoff (`e91f3102`). |
|
||||
| World reveal | **Complete** | `WorldRevealCoordinator` owns login/portal readiness, generation quiescence, and the exact streaming destination reservation. Login auto-entry and portal completion close only their active generation; stale completion cannot clear its replacement. Delayed portals retain the authored tunnel and centered retail wait notice rather than force-revealing incomplete content. |
|
||||
| World reveal | **Complete** | `WorldRevealCoordinator` owns login/portal readiness, generation quiescence, and the exact streaming destination reservation. Login auto-entry and portal completion close only their active generation; stale completion cannot clear its replacement. Delayed portals retain the authored tunnel and centered retail wait notice rather than force-revealing incomplete content. Quiesced destination projections may become spatially resident for renderer preparation while all availability-gated gameplay consumers stay closed. |
|
||||
| Retained gameplay UI | **Mostly complete feature ownership** | `RetailUiRuntime` and focused panel/controllers own layout and behavior. `GameWindow.OnLoad` still performs substantial service composition, which is allowed until the final composition cleanup. |
|
||||
| Selection/interaction | **Complete** | `WorldSelectionQuery` owns read-only picking/classification/range queries; `SelectionInteractionController` owns selection intent, Use/PickUp transport, exact-incarnation queues, and auto-walk deferral; `ItemInteractionController` owns ItemHolder policy plus the shared retail inventory-request transaction. `GameWindow` retains construction and narrow lifecycle forwarding only. |
|
||||
| Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own publication and exact retryable retirement. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`). |
|
||||
| Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own typed-meter publication and exact retryable retirement. `StreamingController` owns stable destination/control/unload/Near/Far queues and destination reservation. CPU mesh-cache restaging requires an exact live owner. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`; Slice E closeout `91e82c3c`). |
|
||||
| Render-frame orchestration | **Complete** | `RenderFrameOrchestrator` owns the GPU-flight, resource, world/PView/shared-alpha, private-presentation, diagnostics, screenshot, and recovery graph. `GameWindow.OnRender` takes one logical window-size snapshot and performs one immutable handoff (`9d7df1bf`). |
|
||||
| Unified `GameEntity` | **Deferred target** | `LiveEntityRuntime` already supplies the critical canonical owner. Full type aggregation is a separate high-risk migration and is not required to make `GameWindow` thin. |
|
||||
|
||||
|
|
|
|||
|
|
@ -202,7 +202,9 @@ landblock: atlas-tier GfxObjs plus the synthetic geometry ids prepared by the
|
|||
independent EnvCell shell pipeline. `WbMeshAdapter.IsRenderDataReady` opens the
|
||||
gate only after `ObjectMeshManager` has real GPU render data. Its bounded CPU
|
||||
cache retains texture payloads and stages a missing GPU object through a
|
||||
deduplicated upload queue on cache hit, covering eviction and revisit churn.
|
||||
deduplicated upload queue on cache hit only when the exact renderer owner is
|
||||
still live, covering eviction and revisit churn without letting an unowned
|
||||
cache hit recreate stale staged work. Reacquiring an exact owner stages once.
|
||||
GPU upload is deliberately not an ownership acquire: atlas GfxObjs use their
|
||||
landblock/entity pins, while synthetic EnvCell geometry uses a no-generic-decode
|
||||
pin balanced from each landblock snapshot. A late upload after all owners have
|
||||
|
|
@ -216,6 +218,20 @@ rendering and landblock mesh pins while retaining the terrain slot. Core's
|
|||
matching physics demotion preserves the terrain surface but removes indoor
|
||||
cells, portals, buildings, and static shadow registrations.
|
||||
|
||||
**Cost-budgeted publication seam (2026-07-24).** WorldBuilder's editor path
|
||||
publishes a complete manager-owned scene; acdream's live streamer instead
|
||||
advances prepared render, physics, static, building, EnvCell, and spatial
|
||||
receipts under one typed frame meter. Stable cursor work may span frames, while
|
||||
building/EnvCell replacement and the final `GpuWorldState` spatial identity
|
||||
swap remain observer-atomic. Destination live-object render ownership prepares
|
||||
while the world is quiesced. `GpuWorldState.IsLiveEntityProjectionResident`
|
||||
answers that spatial ownership question; availability-gated drawing,
|
||||
collision, picking, radar/status targeting, effects, and audio continue to use
|
||||
`IsLiveEntityVisible`. This is an acdream async-integration seam around the
|
||||
extracted WB pipeline, not a second mesh or DAT implementation. Connected
|
||||
evidence:
|
||||
`docs/research/2026-07-24-slice-e-cost-budgeted-streaming-report.md`.
|
||||
|
||||
**Bounded residency and GPU retirement seam (2026-07-18).** Runtime DAT access
|
||||
keeps raw file payload caching disabled and layers bounded typed-object and
|
||||
decoded-pixel LRUs above the single `DatCollection`. `ObjectMeshManager`, the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue