fix(rendering): reconcile shadow roots from live runtime
Recover ordinary live roots from LiveEntityRuntime's canonical active spatial workset instead of relying on already-retained derived records. Keep attached children callback-authoritative, cache immutable selection geometry fingerprints, and pin zero-allocation retained update paths with regression tests. Release gate: 3,733 App tests / 3 skips; 8,217 complete-solution tests / 5 skips. Co-Authored-By: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
056bbd4efd
commit
91463db551
7 changed files with 272 additions and 15 deletions
|
|
@ -22,7 +22,7 @@ retail-faithful gameplay
|
|||
| F2 — static projection journal | complete | Static and EnvCell-shell projections now append ordered deltas only after the final activation receipt and exact detach receipt. Same-landblock rehydrate reconciles retained/new/omitted identities; stale Far completions are inert. Seven focused lifecycle tests pass inside the 3,708-App / 8,192-solution Release gate. The scene remains unconstructed and non-drawing in production. |
|
||||
| F3 — live/equipped projection | complete | Exact EntityReady/resource teardown, visibility, attachment pose/removal, and active-only final-frame seams now drive generation/incarnation-gated live records. Duplicate CreateObject, pending/loaded rebucket, hidden/appearance, reentrancy, session clear, attachment, and GUID-generation replacement pass 11 focused tests. Production still constructs no render scene. |
|
||||
| F4 — dynamic indices | complete | The contained scene now maintains outdoor/static, per-cell static/dynamic, special dynamic-route, translucent, selectable, light-candidate, and dirty indices incrementally. Final-frame live/equipped synchronization remains active-only, and active animated statics are synchronized from the scheduler's active workset rather than a resident-world scan. The production scene remains unconstructed and non-drawing. |
|
||||
| F5 | active — connected gate | Lifecycle automation now constructs the otherwise-absent non-drawing scene, drains ordered static/live deltas after post-network spatial reconciliation, compares the accepted current partition every 30 rendered frames and at every canonical checkpoint, retains only the first field-level mismatch, and publishes scene/journal/index/memory evidence in checkpoint JSON. Focused and complete App suites are green; capped/uncapped nine-stop and dense-Arwic physical gates remain. |
|
||||
| F5 | active — connected redrive | Lifecycle automation now constructs the otherwise-absent non-drawing scene, drains ordered static/live deltas after post-network spatial reconciliation, compares the accepted current partition every 30 rendered frames and at every canonical checkpoint, retains only the first field-level mismatch, and publishes scene/journal/index/memory evidence in checkpoint JSON. The first exact `056bbd4e` capped route passed the harness and graceful-shutdown gates but correctly exposed missing live roots after a same-location Sawato revisit. Root synchronization now recovers ordinary roots from `LiveEntityRuntime`'s canonical active spatial workset while attached children remain callback-authoritative. Immutable selection geometry is fingerprinted once per GfxObj/mesh identity, and retained scene/journal update paths have zero-allocation regression tests. Release is green at 3,733 App tests / 3 skips and 8,217 complete-solution tests / 5 skips; all three connected routes must be redriven before F5 closes. |
|
||||
| G0–G5 | pending | No production consumer has switched. |
|
||||
|
||||
The exact pre-F/G runtime rollback anchor remains `e7d9d6fa`. F0 is
|
||||
|
|
@ -404,6 +404,31 @@ switched. F may temporarily cost memory and a small amount of CPU in diagnostic
|
|||
mode; those costs are reported separately and shadow comparison is disabled by
|
||||
default after its gate.
|
||||
|
||||
#### F5 connected-gate correction record
|
||||
|
||||
The first physical capped nine-stop route on exact commit `056bbd4e` completed
|
||||
the harness and graceful shutdown, but the shadow referee rejected the route at
|
||||
the same-location Sawato revisit. The first mismatch was a missing live root
|
||||
(`sourceChannel=live`, `field=presence`), while journal pending and rejected
|
||||
delta counts remained zero. This proved the problem was source-workset
|
||||
reconciliation rather than a drain failure.
|
||||
|
||||
The derived live journal had been synchronizing only records it already
|
||||
retained. Once a root projection was absent, that loop could not recover it.
|
||||
The correction sources ordinary world roots from the canonical active spatial
|
||||
workset already owned by `LiveEntityRuntime`. Attached children deliberately
|
||||
remain callback-authoritative and are refreshed only while retained, preventing
|
||||
removed equipment from being resurrected.
|
||||
|
||||
The same route also showed that the diagnostic referee was re-hashing immutable
|
||||
selection polygons and vertices every sampled frame. Geometry fingerprints are
|
||||
now cached by GfxObj and mesh identity, and all retained projection collection
|
||||
walks use allocation-free indexed access. Permanent tests cover root recovery,
|
||||
attachment non-resurrection, cached selection geometry, retained transform
|
||||
updates, and active animated-static synchronization. The capped, uncapped, and
|
||||
dense-town routes are all rerun from the corrective commit; no F5 success is
|
||||
claimed from the rejected `056bbd4e` route.
|
||||
|
||||
## 6. Slice G — Frame product and production cutover
|
||||
|
||||
### G0 — Borrowed double-buffered frame product
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue