fix(streaming): preserve portal destination ownership

Detach old-world spatial ownership atomically, prioritize destination retirement dependencies, and reveal the viewport at the retail transition edge. Give private paperdoll views independent mesh ownership and retain dormant ACE entities so portal revisits preserve server objects without extending active GPU lifetimes.
This commit is contained in:
Erik 2026-07-25 08:35:12 +02:00
parent 2c848d4167
commit 823936ec31
57 changed files with 2551 additions and 324 deletions

View file

@ -1632,8 +1632,11 @@ port in any phase — no separate listing here.
> shadow referee, production cutover, and acceptance matrix. The user
> explicitly approved Slices FL, including the F/G and J gates, on
> 2026-07-24. Slice F and G0G4 are implemented; 46,599 automated G4
> comparisons have zero mismatches. Its physical-display visual gate and G5
> old-path deletion remain pending, with exact rollback
> comparisons have zero mismatches. The 2026-07-25 connected visual gate
> accepted the retained scene after independent portal scheduling/private-view/
> ACE-revisit ownership regressions were corrected; G5 old-path deletion and
> production-only profiling are now active. The historical exact cutover
> rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
> retained UI/frame work, exact bounded light selection, and
> pooled/borrowed/direct network I/O pass 8,292 Release tests / 5 skips and the

View file

@ -108,13 +108,15 @@ publication, retirement, upload, warmup, or resource backlog. Capped/uncapped
CPU p99 is 34.7%/30.4% below Slice A and maximum frame allocation is
84.7%/82.2% lower. The user explicitly approved Slices FL, including both
the F/G ECS and Slice J gameplay-owner gates, on 2026-07-24. Slice F and
G0G4 are implemented; G4's automated gate has zero mismatches while its
physical-display visual gate and G5 deletion remain pending. Slice H is
G0G4 are implemented; G4's automated gate has zero mismatches and its
2026-07-25 connected visual gate passes after the portal scheduling/private
viewport/ACE revisit regression correction. G5 deletion and production-only
profiling are active. Slice H is
complete: retained UI/frame work, exact bounded light selection, and
pooled/borrowed/direct network I/O pass 8,292 Release tests / 5 skips and the
seven-checkpoint connected lifecycle/reconnect gate. Slice I is active under
[`2026-07-25-modern-runtime-slice-i.md`](2026-07-25-modern-runtime-slice-i.md).
The exact G4 visual rollback remains
The historical exact G4 visual rollback remains
`git revert ef1d263337997bb030eadb7b8e71d73dc659907a`.
Slice 1's 18-cell favorite-spell overflow bar is user-accepted. Slice 2's

View file

@ -423,6 +423,40 @@ frame allocation fell 84.7%/82.2%. Relative to Slice C, CPU p99 improved
21.4%/16.1% and largest frame allocation fell 33.5%/9.7%. Full evidence:
[`../research/2026-07-24-slice-e-cost-budgeted-streaming-report.md`](../research/2026-07-24-slice-e-cost-budgeted-streaming-report.md).
### Post-closeout portal regression correction — 2026-07-25
The first retained-scene visual pass exposed four scheduling/ownership defects
that the original E6 route did not isolate:
- a 25x25 shared-origin window admitted 625 detach operations over many
frames even though no intermediate old spatial subset was observable;
- destination publication could sit behind an unrelated retirement receipt,
small-mesh upload count, or composite upload count while most byte budget
remained unused;
- private paperdoll/appraisal meshes borrowed world ownership and the
paperdoll discarded its private object during temporary player
unavailability;
- ACE could retain an expired GUID in `KnownObjects`, omit CreateObject on
revisit, and leave doors, signs, portals, and NPCs permanently absent.
The correction atomically swaps the old spatial generation into exact deferred
receipts, advances only the destination's same-key receipt out of order, and
orders destination worker/publication work first. A reveal-generation render
profile raises only the small-object mesh count from 8 to 64 and composite
count from 16 to 64; all 8 MiB byte/array/buffer/mipmap ceilings remain
unchanged. Ordinary work still advances when no destination completion exists.
Private viewports now own independent mesh leases and the paperdoll survives
temporary SmartBox absence. `DormantLiveEntityStore` retains only cold accepted
spawn data after active teardown so an ACE revisit can hydrate through the
ordinary generation-safe transaction.
The world-availability edge now ends at retail's portal/world viewport swap;
the one-second `WorldFadeIn` protocol tail still sends LoginComplete and closes
teleport state later. The user confirmed faster portal transit, continuous
paperdoll presentation, and persistent server-spawned objects after repeated
portal travel. Full evidence:
[`../research/2026-07-25-portal-regression-closeout.md`](../research/2026-07-25-portal-regression-closeout.md).
## 10. Acceptance
Slice E closes only when:

View file

@ -2,7 +2,7 @@
**Date:** 2026-07-24
**Status:** approved 2026-07-24; Slice F complete, Slice G active
**Status:** approved 2026-07-24; Slice F and G4 complete, G5 active
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
@ -27,8 +27,8 @@ retail-faithful gameplay
| G1 — scene-query replacement | complete | Exact `e346f8bb` passed capped and uncapped nine-stop routes plus uncapped dense Arwic: 29,392 + 29,025 + 1,522 same-frame candidate comparisons, zero mismatches, equal counts/digests at every checkpoint, exact binary/source identity, and graceful shutdown. Evidence: `docs/research/2026-07-25-slice-g1-scene-query-candidate-gate.md`. |
| G2 — packed dispatcher input | complete | Exact `f9829d5f` passed capped and uncapped nine-stop routes plus dense Arwic. Candidate order, packed input, classified output, and selection each completed 16,879 + 17,282 + 770 comparisons with zero mismatch; journal/rejection counts were zero and shutdown graceful. Evidence: `docs/research/2026-07-25-slice-g2-packed-dispatcher-gate.md`. |
| G3 — retained classification/storage | complete | Exact `6a026c5a` passed capped and uncapped nine-stop routes plus dense Arwic with 17,069 + 16,827 + 757 exact comparisons in every channel, zero mismatch, warm cross-frame reuse, and graceful shutdown. Evidence: `docs/research/2026-07-25-slice-g3-retained-classification-gate.md`. |
| G4 — production cutover | automated gate complete; visual gate pending | Exact cutover `ef1d263337997bb030eadb7b8e71d73dc659907a` makes the retained frame product the production entity source at the existing five retail PView stages. Exact `03b10183` passed capped/uncapped nine-stop and uncapped dense-Arwic automation with 46,599 total product comparisons, zero mismatch, every reveal ready, and graceful shutdown. The old route referee remains until the user visual gate passes. Evidence: `docs/research/2026-07-25-slice-g4-production-cutover-automated-gate.md`. |
| G5 | pending | Physical performance/lifecycle closeout follows the user visual gate. |
| G4 — production cutover | complete | Exact cutover `ef1d263337997bb030eadb7b8e71d73dc659907a` makes the retained frame product the production entity source at the existing five retail PView stages. Exact `03b10183` passed capped/uncapped nine-stop and uncapped dense-Arwic automation with 46,599 total product comparisons and zero mismatch. The 2026-07-25 connected visual pass accepted the retained scene after its independent portal scheduling/ownership regressions were corrected. Evidence: `docs/research/2026-07-25-slice-g4-production-cutover-automated-gate.md` and `docs/research/2026-07-25-portal-regression-closeout.md`. |
| G5 | active | The accepted visual gate unblocks production-only performance/lifecycle closeout and old-route deletion. |
The exact pre-F/G runtime rollback anchor remains `e7d9d6fa`. F0 is
non-drawing diagnostic infrastructure and therefore is not a visual-cutover
@ -646,9 +646,12 @@ the scene journal was empty, source and binary hashes matched, and every
process closed gracefully. The gate corrected whole-retained-world composite
warmup discovery by sourcing the exact published 3×3 destination neighborhood;
that correction is draw-path independent. Fixed-camera artifacts are captured.
The user visual gate is the only remaining G4 acceptance item, so old-route
deletion and G5 production-only profiling remain blocked. Evidence:
`docs/research/2026-07-25-slice-g4-production-cutover-automated-gate.md`.
The user completed the connected visual gate on 2026-07-25. The retained scene
itself remained exact; the pass exposed independent portal scheduling, private
viewport ownership, and ACE revisit-liveness defects. Their root-cause
correction is recorded in
`docs/research/2026-07-25-portal-regression-closeout.md`. G4 is accepted and
old-route deletion plus G5 production-only profiling are unblocked.
### G5 — Physical performance and lifecycle gate

View file

@ -2,8 +2,8 @@
**Status:** COMPLETE (2026-07-25)
**Parent plan:** `2026-07-24-modern-runtime-architecture.md`, Slice H
**Prerequisite state:** Slice G4 production cutover is automated-gated; its
user visual gate remains pending.
**Prerequisite state at execution:** Slice G4 production cutover was
automated-gated; its user visual gate later passed on 2026-07-25.
## 1. Safety boundary
@ -11,8 +11,8 @@ Slice H removes work which scales with presentation rate. It does not change
retail gameplay rules, visible-cell authority, light membership, packet
ordering, acknowledgement timing, heartbeat placement, or UI presentation.
The G4 old-route referee remains available until the user accepts the visual
gate. Slice H must not delete or alter that rollback boundary.
Slice H did not delete or alter the G4 old-route referee while its visual gate
was pending. That gate has since passed; G5 owns the final deletion boundary.
If the G4 visual result is wrong, revert only:

View file

@ -1,7 +1,7 @@
# Modern runtime Slice I — flat collision assets and zero-allocation physics
**Status:** I0 COMPLETE — retail oracle, representative graph fixtures, and
four-mover allocation baselines fixed; I1 reusable scratch is next
four-mover allocation baselines fixed; accepted G5 closeout now precedes I1
**Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice I
**Purpose:** remove parsed DAT object graphs and steady collision allocations
without changing one retail collision decision, float, comparison, or traversal