docs(rendering): close slice F shadow gate
Record exact capped, uncapped, and dense physical parity evidence before any production draw-source cutover. The pre-F/G runtime rollback anchor remains e7d9d6fa.
This commit is contained in:
parent
81e2f1a575
commit
9b5a530e7b
2 changed files with 105 additions and 3 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
**Date:** 2026-07-24
|
**Date:** 2026-07-24
|
||||||
|
|
||||||
**Status:** approved 2026-07-24; Slice F active
|
**Status:** approved 2026-07-24; Slice F complete, Slice G active
|
||||||
|
|
||||||
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
|
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
|
||||||
|
|
||||||
|
|
@ -22,8 +22,8 @@ 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. |
|
| 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. |
|
| 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. |
|
| 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 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. |
|
| F5 | complete | Exact `81e2f1a5` passed capped and uncapped nine-stop routes plus uncapped dense Arwic. Across the final checkpoints the referee completed 1,663 + 1,677 + 81 comparisons with zero mismatches, zero pending deltas, zero rejected operations, exact binary/source identity, and graceful shutdown. Evidence: `docs/research/2026-07-24-slice-f5-render-scene-shadow-gate.md`. |
|
||||||
| G0–G5 | pending | No production consumer has switched. |
|
| G0–G5 | active | F's non-drawing referee is accepted. No production consumer has switched yet; G0 begins the borrowed double-buffered frame product. |
|
||||||
|
|
||||||
The exact pre-F/G runtime rollback anchor remains `e7d9d6fa`. F0 is
|
The exact pre-F/G runtime rollback anchor remains `e7d9d6fa`. F0 is
|
||||||
non-drawing diagnostic infrastructure and therefore is not a visual-cutover
|
non-drawing diagnostic infrastructure and therefore is not a visual-cutover
|
||||||
|
|
@ -479,6 +479,23 @@ removal, and final logical teardown. Missing-projection diagnostics also carry
|
||||||
the expected class, server GUID, local ID, and parent cell for any further
|
the expected class, server GUID, local ID, and parent cell for any further
|
||||||
failure. Repeat capped F5 on the exact corrective commit before advancing.
|
failure. Repeat capped F5 on the exact corrective commit before advancing.
|
||||||
|
|
||||||
|
The exact corrective commit `81e2f1a5` passed the complete physical gate:
|
||||||
|
|
||||||
|
- capped nine-stop route `connected-r6-soak-20260724-232827`: 1,663/1,663
|
||||||
|
successful comparisons;
|
||||||
|
- uncapped nine-stop route `connected-r6-soak-20260724-233826`: 1,677/1,677
|
||||||
|
successful comparisons;
|
||||||
|
- uncapped dense-Arwic route `connected-dense-town-20260724-234807`: 81/81
|
||||||
|
successful comparisons.
|
||||||
|
|
||||||
|
Every canonical checkpoint had the shadow enabled, the active projection count
|
||||||
|
equal to the current-path oracle, no first mismatch, no journal carry-over, and
|
||||||
|
no rejected delta. All three processes used a Release binary whose embedded
|
||||||
|
commit exactly matched source and all closed gracefully. This closes Slice F.
|
||||||
|
The shadow scene remains diagnostic-only and is safe to retain if a later
|
||||||
|
production cutover is reverted. The pre-cutover runtime rollback anchor remains
|
||||||
|
`e7d9d6fa`.
|
||||||
|
|
||||||
## 6. Slice G — Frame product and production cutover
|
## 6. Slice G — Frame product and production cutover
|
||||||
|
|
||||||
### G0 — Borrowed double-buffered frame product
|
### G0 — Borrowed double-buffered frame product
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
# Slice F5 Render-Scene Shadow Gate
|
||||||
|
|
||||||
|
**Date:** 2026-07-24
|
||||||
|
|
||||||
|
**Candidate:** `81e2f1a57577457436f244f8c9d083e14a9de362`
|
||||||
|
|
||||||
|
**Result:** accepted; Slice F is complete
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Slice F built the future render scene without allowing it to draw. The physical
|
||||||
|
gate compared its active projections with the accepted current renderer after
|
||||||
|
streaming, network, teleport, animation, attachment composition, and the final
|
||||||
|
update-boundary journal publication. This was an exact state referee, not a
|
||||||
|
screenshot approximation.
|
||||||
|
|
||||||
|
The retained scene can contain inactive identities that have temporarily left
|
||||||
|
spatial presentation. Therefore the binding count is the active matched
|
||||||
|
projection count, not total retained entity capacity. Logical teardown still
|
||||||
|
removes those identities through `OnResourceUnregister`.
|
||||||
|
|
||||||
|
## Exact physical evidence
|
||||||
|
|
||||||
|
| Route | Report | Final comparisons | Mismatch | Pending | Rejected | Exit |
|
||||||
|
|---|---|---:|---:|---:|---:|---|
|
||||||
|
| Capped nine-stop | `logs/connected-r6-soak-20260724-232827.report.json` | 1,663 / 1,663 | 0 | 0 | 0 | graceful |
|
||||||
|
| Uncapped nine-stop | `logs/connected-r6-soak-20260724-233826.report.json` | 1,677 / 1,677 | 0 | 0 | 0 | graceful |
|
||||||
|
| Uncapped dense Arwic | `logs/connected-dense-town-20260724-234807.report.json` | 81 / 81 | 0 | 0 | 0 | graceful |
|
||||||
|
|
||||||
|
Every route reported:
|
||||||
|
|
||||||
|
- `Passed=true`, `ExitCode=0`, and `GracefulExit=true`;
|
||||||
|
- source commit, embedded binary commit, and candidate commit equal to
|
||||||
|
`81e2f1a57577457436f244f8c9d083e14a9de362`;
|
||||||
|
- shadow comparison enabled at every canonical checkpoint;
|
||||||
|
- active matched projections equal to the current-path oracle;
|
||||||
|
- `firstMismatch=null`;
|
||||||
|
- cumulative rejected-generation, out-of-order, stale-incarnation, and
|
||||||
|
missing-record counts all zero.
|
||||||
|
|
||||||
|
The two nine-stop routes covered Caul, Sawato, Rynthid, Aerlinthe, Holtburg,
|
||||||
|
same-location Sawato revisit, Caul return, Sawato plateau, and Caul plateau.
|
||||||
|
The route exercised movement, jump, combat, portal churn, repeated
|
||||||
|
materialization, generation replacement, and graceful shutdown. Dense Arwic
|
||||||
|
covered 15,040 active projections and 111 animated entities during the turn
|
||||||
|
sample.
|
||||||
|
|
||||||
|
## Shadow footprint
|
||||||
|
|
||||||
|
The final checkpoint's estimated retained shadow footprint was:
|
||||||
|
|
||||||
|
- capped Caul plateau: 21,891,296 bytes for 21,216 retained identities;
|
||||||
|
- uncapped Caul plateau: 21,894,656 bytes for 21,218 retained identities;
|
||||||
|
- dense Arwic: 20,001,016 bytes for 15,791 retained identities.
|
||||||
|
|
||||||
|
This footprint is intentionally additional during Slice F because both the
|
||||||
|
current and candidate representations coexist. Slice G must remove the old
|
||||||
|
whole-world partition ownership after production parity; Slice F numbers are
|
||||||
|
not the post-cutover steady-state memory target.
|
||||||
|
|
||||||
|
## Rejected evidence and root corrections
|
||||||
|
|
||||||
|
Earlier physical runs were deliberately rejected:
|
||||||
|
|
||||||
|
- `056bbd4e`: ordinary roots could not be recovered after same-location
|
||||||
|
rehydration because derived synchronization walked only retained records;
|
||||||
|
- `91463db5`: the ordinary journal drain was skipped while simulation was
|
||||||
|
quiesced instead of being a final update-frame commit;
|
||||||
|
- `9fab1feb`: destination pose could not restore an equipped projection after
|
||||||
|
presentation withdrawal;
|
||||||
|
- `bb1f4a64`: equipped spatial withdrawal was incorrectly treated as logical
|
||||||
|
identity destruction.
|
||||||
|
|
||||||
|
The final model separates logical lifetime from spatial presence. Ordinary
|
||||||
|
roots reconcile from `LiveEntityRuntime`'s canonical active workset. Equipped
|
||||||
|
children remain callback-owned, retain their exact inactive scene identity
|
||||||
|
during spatial withdrawal, reactivate only from an authoritative visibility or
|
||||||
|
pose edge, and unregister only on logical resource teardown.
|
||||||
|
|
||||||
|
## Rollback
|
||||||
|
|
||||||
|
No production draw consumer changed in Slice F. The exact pre-F/G runtime
|
||||||
|
rollback anchor remains `e7d9d6fa`. A later visual failure in Slice G must
|
||||||
|
revert the exact production cutover commit recorded in the plan and render
|
||||||
|
pipeline digest; it must not discard this referee or evidence work.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue