# Slice J5.7 — simulation-ownership closeout Date: 2026-07-26 Scope: ownership and teardown cleanup only; no retail algorithm, packet, timing, collision policy, gameplay outcome, or graphical presentation change ## Objective Close the temporary seams left by J5.1–J5.6 so one Runtime lifetime owns the complete presentation-independent simulation graph: - canonical entity/object identity and accepted wire state; - selection, interaction, combat, magic, and local movement intent; - per-session physics, remote motion, projectiles, shadows, and spatial worksets; - reset, projection withdrawal, and terminal retirement. App remains the graphical host. It supplies physical input, immutable DAT/content inputs, transport and projection acknowledgements, then presents committed Runtime state through animation, meshes, particles, audio, cameras, retained UI, markers, and diagnostics. ## Named-retail invariant J5.7 preserves the already-ported retail control flow. The one relocated initialization detail follows: - `CPhysicsObj::set_description` at `0x00514F40` CreateObject velocity and angular velocity are installed once when Runtime constructs the canonical remote body. Later authoritative Vector updates flow through the existing retail timestamp gate and canonical record. App no longer constructs a second body or repeats the accepted CreateObject vector install. The projectile, movement, collision, interaction, combat, and spell algorithms remain those documented by the preceding J5 evidence notes. No constant, branch, packet order, server-authority boundary, or visible effect changed. ## Closed ownership gaps Production commit `cdee7a4b49addb5e1500753f6a885f7c899bd0f0`: - removes the App remote-motion/physics-host/canonical-runtime/cell/placement compatibility aliases after production consumers moved to Runtime types; - deletes `LiveEntityRemoteMotionRuntimeView` and the App `RemotePhysicsBodyInitializer`; - makes `LiveEntityNetworkUpdateController` borrow the canonical `LiveEntityRuntime` and delegate body, remote-motion, vector, wakeup, and activation work to `RuntimePhysicsState`; - makes Runtime install accepted CreateObject velocity and angular velocity exactly once at canonical body construction; - makes `RuntimeEntityObjectLifetime.CompleteProjectionRetirement` own final simulation-component retirement after the App projection acknowledges withdrawal; - removes App-side mutation of canonical remote/body/host/placement component slots; - makes current-runtime checkpoints borrow `IRuntimeEntityView` and inventory views rather than reconstructing state from App projections or `ClientObjectTable`; - adds terminal clearing for `PhysicsEngine`, `ShadowObjectRegistry`, spatial worksets, collision residence, bodies, hosts, remotes, and projectiles; - adds `RuntimeSimulationOwnershipSnapshot`, one terminal ledger spanning entity/object, physics, and gameplay ownership; - adds a Runtime-only fixture host that drives movement, use, combat, casting, and projectile simulation without loading App, UI, Silk.NET, OpenAL, ImGui, Arch, or a native window. `ILocalPlayerMotionSource` remains as a presentation-facing source name for the animation projection seam. It does not construct, store, or mutate a second movement owner; graphical animation borrows the exact `RuntimeLocalPlayerMovementState`. ## Failure and parity matrix The closeout fixtures cover every J5.7 boundary: | Boundary | Evidence | |---|---| | construction | per-instance entity/object/physics/gameplay owners; canonical remote-body acquisition; no presentation/backend assembly load | | subscription | entity, communication, gameplay, and projection observers isolate failures and detach exactly | | command | graphical and direct movement, use, combat, and magic commands reach the same exact owners | | projection acknowledgement | vector, rebucket, projectile, and terminal projection failures preserve canonical committed state and allow retry/convergence | | reset | interaction, action, movement, session, entity/object, and physics reset paths converge without replay | | disposal | combined simulation ledger, physics residence, shadows, worksets, objects, and subscriptions reach exact zero | Normalized graphical/direct parity is pinned by: - `CurrentGameRuntimeAdapterTests.GraphicalAndDirectCombatMagicCommands_ReachTheExactSameOwners`; - `CurrentGameRuntimeAdapterTests.DirectAndGraphicalHosts_ProduceIdenticalEntityObjectTrace`; - `RuntimeLocalPlayerMovementStateTests.GraphicalAndDirectCommandsMutateOneAutorunLatch`; - `RuntimeSimulationFixtureHostTests.RuntimeOnlyHostDrivesCompleteJ5SimulationWithoutPresentation`. The projection-failure fixture additionally proves that a failed graphical acknowledgement cannot strand or roll back canonical simulation state: - `RuntimeSimulationFixtureHostTests.ProjectionAcknowledgementFailureStillAllowsTerminalConvergence`. ## Automated acceptance On the production commit: - focused App ownership/entity/projectile/hydration suite: 198 passed; - Runtime tests: 323 passed; - App tests: 3,717 passed / 3 skipped; - complete Release solution: 8,596 passed / 5 skipped; - Release solution build: zero errors; 17 pre-existing warnings; - source/dependency guards pass; - `git diff --check` is clean. The combined Runtime fixture loads no presentation or backend assembly and its terminal `RuntimeSimulationOwnershipSnapshot.IsConverged` is true after normal operation and injected projection failure. ## Connected acceptance Both accepted connected gates used the exact rebuilt executable and source commit `cdee7a4b49addb5e1500753f6a885f7c899bd0f0`. - Lifecycle/reconnect: `logs/connected-world-gate-20260726-160825/report.json` passed all seven fresh-login, outdoor, dungeon, revisit, graceful-disconnect, and uncapped fresh-process reconnect checkpoints. Both processes exited gracefully with code zero, with zero failures and only the 25 expected world-edge empty-landblock misses. - Canonical nine-stop route: `logs/connected-r6-soak-20260726-161406.report.json` reported `binaryMatchesSource = true`, materialized all nine destinations, passed forward, jump, combat, and authoritative movement-truth exercises at Caul, Holtburg, and the Caul return, and exited gracefully with code zero and zero failures. Every checkpoint converged with zero pending publication, retirement, worker-completion, or destination backlog. The earlier post-commit route `logs/connected-r6-soak-20260726-155912.report.json` was behaviorally green but is deliberately rejected as exact-binary evidence because its embedded binary SHA preceded the source commit. It remains in the audit trail. The solution was rebuilt and both accepted gates were then rerun. The user-accepted connected behavior carried through J5 includes local movement and target-facing, near/far object use, combat and spell bars, projectile presentation, collision, repeated portal/recall, and reconnect. J5.7 changes only ownership seams and the exact-binary routes exercise those same owners after cleanup. ## Divergence and rollback J5.7 removes duplicate ownership and compatibility seams. It introduces no new retail behavior or divergence, so the divergence register requires no new row. Exact rollback: ```text git revert cdee7a4b49addb5e1500753f6a885f7c899bd0f0 ```