feat(physics): port retail complete object frame pipeline

Restore the named-retail object update order across local, remote, static, projectile, animation, shadow, teleport, and effect lifetimes. Separate authoritative root commits from spatial rebucketing, preserve per-owner hook/FIFO ordering, and remove update-path allocations with exact lifecycle and residency gates.

Add deterministic conformance, adversarial lifetime, GUID-reuse, pending-cell, quaternion, timestamp, and allocation coverage. Release build is warning-free and all 6,446 tests pass with five intentional skips; retail, architecture, and adversarial reviews are clean.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-20 09:10:31 +02:00
parent 31a0889f08
commit f961d70023
77 changed files with 12513 additions and 1871 deletions

View file

@ -872,9 +872,52 @@ diagnostic scaffolding, not yet the final collision system.
183-case/funnel/moveto/chase/sticky suites unmodified. Arc close-out:
`docs/research/2026-07-03-r5-managers/r5-wiring-handoff.md`. Open follow-ons
carried: #167 (ConstraintManager arming). TS-42's per-tick completion/
manager order retired in the first R6 cutover on 2026-07-19; complete-frame
plumbing, PositionManager interpolation, quantum ownership, and side-channel
deletion remain R6 scope.
manager order retired in the first R6 cutover on 2026-07-19. The second R6
cutover now carries complete CSequence Frames (translation + DAT omega),
one incarnation-stable live-object quantum clock across local, remote,
Hidden, and projectile components, complete interpolation orientation, and
no ObservedOmega/synthetic-turn side channel. It also ports the 96-unit
PartArray Active gate plus immediate-active `prepare_to_enter_world` rebasing
and preserves live identity across loaded/pending rebucketing. Semantic
AnimationDone is in retail's pre-transition manager slot; TS-50 explicitly
carries the remaining pose-dependent hook-router delivery delay. The
Setup/state-driven `static_animating_objects` workset is now separate as
retail requires for both DAT and live physics-Static owners, including
unconditional PartArray default installation, direct 30-fps
DefaultAnimation, short residency-gap catch-up, and the greater-than-two-
second discard. Live static entries reuse the canonical record PartArray and
body; `animate_static_object` applies its raw omega without elapsed scaling
and commits changed render/effect/collision roots together without zero-omega
refloods or Hidden-shadow resurrection.
No-animation live remotes remain in the canonical ordinary-object workset,
and one animation-optional inbound dispatcher now owns their same retail
UpdateMotion funnel and near-correction consumption. `PerformMovement`
reactivates its owner before validation. A shared update-thread inbound FIFO
now prevents synchronous App callbacks from interleaving packets or frame
tails, while exact-record Position/State/Vector/Movement authority versions
preserve retail's independent timestamp channels and a narrow velocity token
resolves their one overlapping write. Projectile Begin/Complete prediction,
teleport placement, landing callbacks, Hidden transitions, and deferred
animation hooks all revalidate those exact ownership boundaries. Pose-owner
lifetime versions are captured before AnimationDone and checked before each
semantic completion and routed hook, closing delete/local-ID reuse during
both capture and drain. Direct frame/packet FIFO dispatch and spatial
animation update/render traversal are allocation-free after warmup; only
real nested work allocates a retained queue node. TS-51 records
the remaining shared particle/PhysicsScript tail timing. The ordinary
live-object scheduler and generic body transition path now live outside
GameWindow; body-backed animations, retained post-Missile bodies, visibility-
edge clock/shadow residency (including initial pending materialization),
callback-safe cross-cell rebucketing, and teardown all share the canonical
live record. Local and authoritative remote collision publication now occurs
only after exact-owner spatial revalidation; remote shadows refresh for
translation, complete orientation, or cell change. Folding
InterpolationManager into the owned
PositionManager facade remains the final R6 ownership cleanup.
Final 2026-07-20 gate: three independent retail/architecture/adversarial
re-reviews are clean; Release build is warning-free; the repository suite is
6,446 passed / 5 skipped. A connected locomotion/collision/projectile/
teleport visual and performance rebaseline remains the next gate.
- **L.2g — Inbound motion interpretation (remote-entity CMotionInterp funnel).**
ACTIVE 2026-07-02. Port retail's inbound motion pipeline verbatim for ALL
remote entities (players, NPCs, monsters — one funnel, user-approved):

View file

@ -10,10 +10,15 @@ favorite spell bar, connected casting/enchantment effects, and portal-space
presentation have passed their single-client visual gates. The corrective bounded
render/resource-lifetime integration passed its seven-destination connected
stress gate without a crash or cumulative collapse. The remaining M3 visual
requirement is the final two-client portal-out/materialize observer gate.
requirement is the final two-client portal-out/materialize observer gate. The
new R6 object-update cutover also requires one connected locomotion/collision/
projectile/teleport visual and performance rebaseline before that observer gate.
Carried:
#145-residual, #116 slide-response, the remaining R6 object-pipeline cutover
(TS-42 manager order retired 2026-07-19), and Track MP0.
#145-residual, #116 slide-response, the remaining R6 ownership cleanup plus
registered TS-50/TS-51 timing residuals (the complete-root-Frame/object-workset
cutover is automated-test complete 2026-07-20; three independent re-reviews are
clean, Release builds with zero warnings, and 6,446 tests pass / 5 skip), and
Track MP0.
---