test(vfx): harden live missile and effect lifetimes
Add deterministic 96-owner lifecycle and renderer-resource stress gates plus an exact twelve-cycle recall/portal ownership gate. Prove zero retained records, projectiles, spatial buckets, script queues, particle/light owners, shadows, pending effects, and mesh references after churn, GUID reuse, deletion, and session reset. Make logical teardown incarnation-specific and reentrancy-safe with lifetime epochs, atomic resource registration, generation-aware effect/teleport cleanup, projection mutation tokens, and failure-isolated visibility fan-out. Finish canonical spatial transactions before reporting observer failures and never discard superseded cleanup failures. Synchronize architecture, roadmap, milestones, retail research, divergence bookkeeping, and durable memory. All three independent review tracks are clean; Release build and the full 5,454-pass/5-skip suite are green. Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
parent
1e98d81448
commit
8d63e5c28a
21 changed files with 2704 additions and 100 deletions
|
|
@ -471,8 +471,8 @@ include dungeons.
|
|||
`PlayerDescription.Options1` preserves retail's player secure-trade
|
||||
preference. See
|
||||
`docs/research/2026-07-13-retail-give-item-pseudocode.md` and issue #216.
|
||||
- **M2/M3 missile, effect, and portal presentation campaign (Steps 0–8
|
||||
independently reviewed 2026-07-14)** — named-retail projectile and
|
||||
- **M2/M3 missile, effect, and portal presentation campaign (automated Steps 0–9
|
||||
complete and independently reviewed 2026-07-14)** — named-retail projectile and
|
||||
physics-script behavior is pinned in one oracle, the complete `PhysicsDesc`
|
||||
and F754/F755 wire surfaces are parsed with retail timestamp gates, and
|
||||
`LiveEntityRuntime` now separates logical lifetime from spatial rebucketing.
|
||||
|
|
@ -533,8 +533,34 @@ include dungeons.
|
|||
`teleport_hook` teardown followed by a placement snap before the airborne
|
||||
gate. Ordinary visible CreateObject does not fabricate UnHide; pending
|
||||
F754/F755 packets replay only after construction-state effects. TS-43 is
|
||||
retired. The remaining Step 9 is final hardening plus the two-client visual
|
||||
gate.
|
||||
retired. Step 9 adds a deterministic 96-owner whole-lifecycle gate spanning
|
||||
projectile ticks, repeated DAT-effect plays, loaded↔pending landblock churn,
|
||||
dynamic lights, particle bindings, collision shadows, rapid deletion,
|
||||
same-GUID generation reuse, unknown pre-create effect packets, and session
|
||||
reset. A separate 96-owner renderer-seam gate balances every
|
||||
`EntitySpawnAdapter` mesh reference. Teardown now proves zero retained live
|
||||
records/bodies/projectiles, render owners, spatial buckets/rescues,
|
||||
PhysicsScript queues/anchors, effect profiles/packets, emitters/logical IDs,
|
||||
poses, lights, and active/suspended shadow registrations. The hardening pass
|
||||
also fixed undrained persistent-rescue retention and rejects queued spatial
|
||||
visibility edges that no longer match current incarnation truth. A companion
|
||||
twelve-cycle gate drives exact recall motion `0x10000153` through CallPES,
|
||||
Hidden, unloaded-destination placement, hydration, and UnHide. Logical
|
||||
teardown is incarnation-specific across callback-driven GUID reuse; per-GUID
|
||||
epochs reject create resurrection after a nested delete/reset, resource
|
||||
registration is atomic, terminal session clear rejects registrations outside
|
||||
its teardown snapshot, and visibility fan-out drains all owners before
|
||||
aggregating observer failures. Canonical cell/projection state finishes
|
||||
committing before those aggregates rethrow; per-GUID epoch tombstones survive
|
||||
accepted delete until session clear, and superseded creates cannot discard a
|
||||
prior-incarnation cleanup failure. Per-record projection tokens also prevent
|
||||
an outer rebucket/withdrawal from overwriting a replacement incarnation or a
|
||||
newer same-record projection created synchronously by an observer.
|
||||
TS-26's
|
||||
`UpdatePosition` freshness gap is retired by the nine-channel timestamp
|
||||
gates; TS-49 remains the explicit
|
||||
DetectionManager/`LeftDetection` gap. The final two-client visual gate is
|
||||
still pending.
|
||||
- **L.1c local attack receive path (implemented 2026-07-11; live gate pending)** —
|
||||
local non-autonomous mt-0 UpdateMotion now uses retail's wholesale interpreted
|
||||
funnel and action-stamp gate, so ACE's server-selected melee/missile action
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue