docs(rendering): close retained-scene G5

Record the exact visual, route, lifecycle, production CPU/GPU/memory, and allocation evidence for retiring the normal InteriorEntityPartition. Reconcile the roadmap, milestones, shared session instructions, and Slice I handoff so the measured transition/query scratch remainder has one owner.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-25 13:55:38 +02:00
parent 14fbe92b08
commit 2effba5127
8 changed files with 173 additions and 95 deletions

View file

@ -1,52 +1,117 @@
# Slice G5 production profile — 2026-07-25
# Slice G5 production closeout — 2026-07-25
## Status
Work in progress. The retained-scene connected visual re-gate passed on
2026-07-25. Normal production now consumes retained frame-product ranges for
both mesh submission and attached-particle ownership and does not build
`InteriorEntityPartition`. The legacy partition is retained only for
standalone tests and explicitly enabled diagnostic/oracle probes. This note
records production-only evidence gathered without enabling the referee or
lifecycle automation; the exact post-removal route matrix is still pending.
Complete. Normal production consumes retained `RenderFrameView` route ranges
for both mesh submission and attached-particle ownership and does not build
`InteriorEntityPartition`. The former partition remains only for standalone
tests and explicitly enabled diagnostic/oracle probes.
## First steady RDP sample
The connected retained-path visual gate is also complete. The user accepted
stable server objects and paperdoll state across travel, restored distant
interaction, and retail-shaped `/ls` plus spell-recall materialization without
character pop or recall-animation tail.
The client was idle in-world at 60 Hz with the normal capped Release
presentation, High quality, a 4/12 near/far radius, and no developer or
automation UI. The title reported 173/625 landblocks, 10,383 entities, and 51
active animations. Five seconds of process CPU plus three one-second Windows
GPU counter samples measured:
## Exact implementation
| Metric | Value |
|---|---:|
| CPU | 2.68% of 16 logical processors, about 42.9% of one logical core |
| Working set | 255.8 MiB |
| Private bytes | 1,193.9 MiB |
| Threads / handles | 26 / 663 |
| GPU 3-D engine | 55.74% average, 56.26% maximum |
| Dedicated GPU process memory | 422 MiB |
| Shared GPU process memory | 141 MiB |
| Commit | Purpose |
|---|---|
| `10ccce3f2dc38d1ff8ce5d0fbc962156a50b022d` | Retire the production `InteriorEntityPartition`; derive all five production mesh routes and attached-particle owner sets from the retained frame product. |
| `14fbe92b08a74326e59b085eba34d7b772e9c940` | Treat active-monitor refresh telemetry as temporarily unavailable during Windows console/RDP topology replacement, preventing a GLFW monitor-query exception from escaping the native move callback. |
This is an RDP presentation sample, not the required physical-local reference
matrix and not evidence of a plateau across travel. It establishes that the
post-cutover retained path is active and gives G5 a pre-deletion production
point. The complete capped/uncapped nine-stop, dense-Arwic, lifecycle,
allocation, GC, stage-timing, and screenshot/instance-set matrix remains
mandatory after the visual re-gate.
## Prepared old-route dependency removal
`RenderFrameRouteOwnerSelector` derives attached particle owner IDs from the
exact retained PView route ranges. It supports exact-route replace/union and
all-range exclusion without allocation after warmup. It now supplies the
`RenderFrameRouteOwnerSelector` supports exact-route replace/union and
all-range exclusion without warm-frame allocation. It supplies the
landscape-static, outside-dynamic, look-in, cell-static, and dynamic-last
particle passes. `RetailPViewRenderer` builds the former partition only when
the retained frame product is unavailable in a standalone test or when an
explicit legacy comparison/probe is enabled. The production frame result
copies retained source and route counts before releasing its arena, so
diagnostics do not require the partition either.
particle passes. `RetailPViewRenderer` constructs the legacy partition only
when no retained product exists in a standalone test or when a legacy
comparison/probe explicitly requires it. Production diagnostics copy retained
source and route counts before arena release and therefore do not resurrect the
old enumeration.
The focused route suite, 3,825 App tests / 3 skips, Release solution build,
and 8,334 complete-solution tests / 5 skips are green. The production-only
reference matrix below remains the G5 closeout gate.
## Connected correctness and lifecycle matrix
All reports identify the checked-out source and measured binary exactly and
end through graceful client shutdown.
| Gate | Exact commit | Result | Evidence |
|---|---|---|---|
| Capped canonical nine-stop | `10ccce3f` | Pass, 0 failures | `logs/connected-r6-soak-20260725-105133.report.json` |
| Uncapped canonical nine-stop | `10ccce3f` | Pass, 0 failures | `logs/connected-r6-soak-20260725-121035.report.json` |
| Dense Arwic, 15,530 entities / 111 animated | `10ccce3f` | Pass, 0 failures | `logs/connected-dense-town-20260725-123107.report.json` |
| Fresh login, outdoor/dungeon/facility/revisit, graceful logout, fresh uncapped reconnect | `14fbe92b` | Pass, 0 failures, 7 checkpoints | `logs/connected-world-gate-20260725-131552/report.json` |
| Exact post-fix dense redrive | `14fbe92b` | Pass, 0 failures | `logs/connected-dense-town-20260725-134935.report.json` |
The lifecycle gate's only warning is the canonical route's 25 expected
world-edge landblock misses. DAT-driven missing-emitter diagnostics remain the
known VFX-content warnings in the soak reports; no fallback effect is created.
The final dense redrive changed from the physical console to RDP before its
stationary sample, so its absolute timing is diagnostic only. It still proves
dense-scene construction, route completion, resource cleanup, and graceful
shutdown on the exact post-fix binary.
## Ordinary production profile
A separate Release client ran uncapped with:
- no UI probe or automation route;
- no automation artifact owner or screenshot/current-path oracle;
- no developer tools;
- no WB diagnostic comparison;
- only the permanent frame profiler and frame-history recorder.
The physical-display capture stayed at the normal Aerlinthe scene for its final
stable minute. The retained frame product was the sole production draw source.
| Metric | Final stable 60 seconds |
|---|---:|
| Frames / throughput | 31,180 / 519.7 FPS |
| CPU frame p50 / p95 / p99 / max | 1.869 / 2.306 / 2.484 / 6.727 ms |
| GPU frame p50 / p95 / p99 / max | 1.096 / 1.108 / 1.136 / 1.342 ms |
| Update p50 / p95 / p99 | 0.239 / 0.274 / 0.366 ms |
| Frame-thread allocation p50 / p95 / p99 | 22,880 / 24,056 / 24,216 B |
External five-second CPU and three-sample Windows GPU counters measured:
| Resource | Value |
|---|---:|
| Process CPU | 9.74% of 16 logical processors, about 1.56 cores while uncapped |
| Working set | 652.1 MiB |
| Private bytes | 928.3 MiB |
| Threads / handles | 35 / 755 |
| GPU 3-D engine | 32.11% average, 64.37% maximum |
| Dedicated / shared GPU process memory | 449.8 / 17.3 MiB |
Evidence:
`logs/g5-production-uncapped-20260725-134345.frame.csv` and
`logs/g5-production-uncapped-20260725-134345.out.log`.
This is not presented as a capped-versus-uncapped memory comparison: scene,
camera, pacing, and cache age must match before making that claim. It is an
honest ordinary-production absolute point. Relative to Slice H's separate
ordinary-production frame-thread baseline, median allocation fell from
25.6 KiB to 22.34 KiB (12.7%), CPU p95 improved from 2.52.8 ms to
2.306 ms, and GPU median improved from 1.21.3 ms to 1.096 ms.
## Remaining allocation owner
G5 removed the retained current-render partition identified by Slice H.
Ordinary production still allocates 22.34 KiB/frame, above the program's
initial 4 KiB/frame whole-client target. The prior allocation-tick stacks and
the four-mover Slice-I baseline identify reset-complete `Transition`
collision/query scratch as the next dominant owner. That storage/lifetime
change is intentionally Slice I1, where differential trajectory tests can
prove that reusing scratch changes no retail collision decision or float.
G5 therefore closes its render-scene ownership contract without weakening the
program-level allocation target. Slice I owns the measured remainder.
## Verification
- Focused display-pacing/callback/settings suite: 70 passed.
- Release solution build: pass; 16 already tracked test-project warnings.
- Complete invariant-culture Release suite: 8,335 passed / 5 skipped.
- Connected lifecycle/reconnect: pass on exact `14fbe92b`, both sessions exit
code 0 and graceful logout confirmed.
- User visual acceptance: pass on 2026-07-25.
- No new retail divergence was introduced.