docs(runtime): close projectile ownership
This commit is contained in:
parent
2aee33569f
commit
c30a3efeb0
11 changed files with 263 additions and 35 deletions
17
AGENTS.md
17
AGENTS.md
|
|
@ -116,7 +116,7 @@ user-gated. Deterministic world-lifecycle automation protects fresh login,
|
||||||
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
|
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
|
||||||
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
|
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
|
||||||
Release builds; the current performance-program checkpoint passes
|
Release builds; the current performance-program checkpoint passes
|
||||||
3,836 App tests / 3 skips and 8,413 complete-solution tests / 5 skips.
|
3,718 App tests / 3 skips and 8,591 complete-solution tests / 5 skips.
|
||||||
|
|
||||||
**M4 feature work order (paused while the authorized performance program
|
**M4 feature work order (paused while the authorized performance program
|
||||||
executes):** the six-slice pre-M4 world-interaction completion
|
executes):** the six-slice pre-M4 world-interaction completion
|
||||||
|
|
@ -303,7 +303,14 @@ and full-cell commits. App publishes prepared collision and projects committed
|
||||||
snapshots only. Runtime tests pass 314/314, App tests pass 3,718/3 skips, the
|
snapshots only. Runtime tests pass 314/314, App tests pass 3,718/3 skips, the
|
||||||
complete Release suite passes 8,588/5 skips, and both exact-binary
|
complete Release suite passes 8,588/5 skips, and both exact-binary
|
||||||
lifecycle/reconnect and canonical nine-stop collision/movement gates pass
|
lifecycle/reconnect and canonical nine-stop collision/movement gates pass
|
||||||
with graceful exits and zero failures. J5.6 projectile runtime is active.
|
with graceful exits and zero failures. J5.6 is complete at `2aee3356`:
|
||||||
|
Runtime owns the canonical projectile component/workset,
|
||||||
|
prediction/correction state, and unchanged retail projectile simulation while
|
||||||
|
App resolves immutable DAT shape data and projects committed frames. Runtime
|
||||||
|
tests pass 317/317, App tests pass 3,718/3 skips, 47 focused Core projectile
|
||||||
|
tests pass, the complete Release suite passes 8,591/5 skips, and the exact
|
||||||
|
arrow/bolt/spell, lifecycle/reconnect, and canonical nine-stop gates pass with
|
||||||
|
graceful exits and zero failures. J5.7 cleanup and closeout is active.
|
||||||
J0's rollback is
|
J0's rollback is
|
||||||
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
|
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
|
||||||
J1's rollback is
|
J1's rollback is
|
||||||
|
|
@ -341,6 +348,8 @@ J5.4's rollback is
|
||||||
`git revert aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`.
|
`git revert aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`.
|
||||||
J5.5's rollback is
|
J5.5's rollback is
|
||||||
`git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f`.
|
`git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f`.
|
||||||
|
J5.6's rollback is
|
||||||
|
`git revert 2aee33569f0268d7bc0f4f52437dfa0b405432a4`.
|
||||||
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
|
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
|
||||||
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
|
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
|
||||||
passes. Slice I is closed in
|
passes. Slice I is closed in
|
||||||
|
|
@ -360,7 +369,9 @@ closeout is `docs/research/2026-07-26-slice-j5-3-combat-magic-intent.md`; J5.4
|
||||||
closeout is
|
closeout is
|
||||||
`docs/research/2026-07-26-slice-j5-4-local-movement-ownership.md`; J5.5
|
`docs/research/2026-07-26-slice-j5-4-local-movement-ownership.md`; J5.5
|
||||||
closeout is
|
closeout is
|
||||||
`docs/research/2026-07-26-slice-j5-5-physics-remote-ownership.md`. The exact G4
|
`docs/research/2026-07-26-slice-j5-5-physics-remote-ownership.md`; J5.6
|
||||||
|
closeout is
|
||||||
|
`docs/research/2026-07-26-slice-j5-6-projectile-ownership.md`. The exact G4
|
||||||
visual rollback
|
visual rollback
|
||||||
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
|
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
|
||||||
the portal-warmup corrections. Evidence:
|
the portal-warmup corrections. Evidence:
|
||||||
|
|
|
||||||
17
CLAUDE.md
17
CLAUDE.md
|
|
@ -114,7 +114,7 @@ user-gated. Deterministic world-lifecycle automation protects fresh login,
|
||||||
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
|
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
|
||||||
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
|
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
|
||||||
Release builds; the current performance-program checkpoint passes
|
Release builds; the current performance-program checkpoint passes
|
||||||
3,836 App tests / 3 skips and 8,413 complete-solution tests / 5 skips.
|
3,718 App tests / 3 skips and 8,591 complete-solution tests / 5 skips.
|
||||||
|
|
||||||
**M4 feature work order (paused while the authorized performance program
|
**M4 feature work order (paused while the authorized performance program
|
||||||
executes):** the six-slice pre-M4 world-interaction completion
|
executes):** the six-slice pre-M4 world-interaction completion
|
||||||
|
|
@ -301,7 +301,14 @@ and full-cell commits. App publishes prepared collision and projects committed
|
||||||
snapshots only. Runtime tests pass 314/314, App tests pass 3,718/3 skips, the
|
snapshots only. Runtime tests pass 314/314, App tests pass 3,718/3 skips, the
|
||||||
complete Release suite passes 8,588/5 skips, and both exact-binary
|
complete Release suite passes 8,588/5 skips, and both exact-binary
|
||||||
lifecycle/reconnect and canonical nine-stop collision/movement gates pass
|
lifecycle/reconnect and canonical nine-stop collision/movement gates pass
|
||||||
with graceful exits and zero failures. J5.6 projectile runtime is active.
|
with graceful exits and zero failures. J5.6 is complete at `2aee3356`:
|
||||||
|
Runtime owns the canonical projectile component/workset,
|
||||||
|
prediction/correction state, and unchanged retail projectile simulation while
|
||||||
|
App resolves immutable DAT shape data and projects committed frames. Runtime
|
||||||
|
tests pass 317/317, App tests pass 3,718/3 skips, 47 focused Core projectile
|
||||||
|
tests pass, the complete Release suite passes 8,591/5 skips, and the exact
|
||||||
|
arrow/bolt/spell, lifecycle/reconnect, and canonical nine-stop gates pass with
|
||||||
|
graceful exits and zero failures. J5.7 cleanup and closeout is active.
|
||||||
J0's rollback is
|
J0's rollback is
|
||||||
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
|
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
|
||||||
J1's rollback is
|
J1's rollback is
|
||||||
|
|
@ -339,6 +346,8 @@ J5.4's rollback is
|
||||||
`git revert aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`.
|
`git revert aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`.
|
||||||
J5.5's rollback is
|
J5.5's rollback is
|
||||||
`git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f`.
|
`git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f`.
|
||||||
|
J5.6's rollback is
|
||||||
|
`git revert 2aee33569f0268d7bc0f4f52437dfa0b405432a4`.
|
||||||
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
|
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
|
||||||
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
|
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
|
||||||
passes. Slice I is closed in
|
passes. Slice I is closed in
|
||||||
|
|
@ -358,7 +367,9 @@ closeout is `docs/research/2026-07-26-slice-j5-3-combat-magic-intent.md`; J5.4
|
||||||
closeout is
|
closeout is
|
||||||
`docs/research/2026-07-26-slice-j5-4-local-movement-ownership.md`; J5.5
|
`docs/research/2026-07-26-slice-j5-4-local-movement-ownership.md`; J5.5
|
||||||
closeout is
|
closeout is
|
||||||
`docs/research/2026-07-26-slice-j5-5-physics-remote-ownership.md`. The exact G4
|
`docs/research/2026-07-26-slice-j5-5-physics-remote-ownership.md`; J5.6
|
||||||
|
closeout is
|
||||||
|
`docs/research/2026-07-26-slice-j5-6-projectile-ownership.md`. The exact G4
|
||||||
visual rollback
|
visual rollback
|
||||||
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
|
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
|
||||||
the portal-warmup corrections. Evidence:
|
the portal-warmup corrections. Evidence:
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ banner cannot silently override the current program state.
|
||||||
[`plans/2026-07-23-world-interaction-completion.md`](plans/2026-07-23-world-interaction-completion.md).
|
[`plans/2026-07-23-world-interaction-completion.md`](plans/2026-07-23-world-interaction-completion.md).
|
||||||
The eight-slice `GameWindow` decomposition and its connected visual matrix
|
The eight-slice `GameWindow` decomposition and its connected visual matrix
|
||||||
are complete.
|
are complete.
|
||||||
- **Current active engineering program:** Slices A–I, J0–J4, and J5.1–J5.5 of
|
- **Current active engineering program:** Slices A–I, J0–J4, and J5.1–J5.6 of
|
||||||
[`plans/2026-07-24-modern-runtime-architecture.md`](plans/2026-07-24-modern-runtime-architecture.md)
|
[`plans/2026-07-24-modern-runtime-architecture.md`](plans/2026-07-24-modern-runtime-architecture.md)
|
||||||
are complete. Production uses prepared world/collision packages, typed
|
are complete. Production uses prepared world/collision packages, typed
|
||||||
residence, retained render-scene/delta submission, bounded frame owners, and
|
residence, retained render-scene/delta submission, bounded frame owners, and
|
||||||
|
|
@ -23,8 +23,8 @@ banner cannot silently override the current program state.
|
||||||
gameplay state, selection/interaction transactions, and combat/magic intent.
|
gameplay state, selection/interaction transactions, and combat/magic intent.
|
||||||
App materialized projections and retained widgets borrow exact Runtime
|
App materialized projections and retained widgets borrow exact Runtime
|
||||||
identity and action owners. Runtime also owns the sole per-session physics,
|
identity and action owners. Runtime also owns the sole per-session physics,
|
||||||
collision, body/host, remote simulation, and cell-commit graph. J5.6
|
collision, body/host, remote/projectile simulation, and cell-commit graph.
|
||||||
projectile runtime is next in
|
J5.7 ownership cleanup and closeout is active in
|
||||||
[`plans/2026-07-26-modern-runtime-slice-j5.md`](plans/2026-07-26-modern-runtime-slice-j5.md).
|
[`plans/2026-07-26-modern-runtime-slice-j5.md`](plans/2026-07-26-modern-runtime-slice-j5.md).
|
||||||
- **Completed gates:** R6 locomotion/collision/projectile/teleport/radar and
|
- **Completed gates:** R6 locomotion/collision/projectile/teleport/radar and
|
||||||
the final two-client portal-out/materialization observer comparison (`#218`).
|
the final two-client portal-out/materialization observer comparison (`#218`).
|
||||||
|
|
@ -34,15 +34,14 @@ banner cannot silently override the current program state.
|
||||||
`#116` (two narrowed slide-response cases), and divergence rows TS-50/TS-51.
|
`#116` (two narrowed slide-response cases), and divergence rows TS-50/TS-51.
|
||||||
- **Active engineering track:** complete Slice J's coherent Runtime lifetime
|
- **Active engineering track:** complete Slice J's coherent Runtime lifetime
|
||||||
groups, then build the approved Linux/headless multi-session host in Slice K.
|
groups, then build the approved Linux/headless multi-session host in Slice K.
|
||||||
J5.5's exact rollback is
|
J5.6's exact rollback is
|
||||||
`git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f`.
|
`git revert 2aee33569f0268d7bc0f4f52437dfa0b405432a4`.
|
||||||
- **Divergence audit:** 178 active rows — IA 17, AD 37, AP 85, TS 34,
|
- **Divergence audit:** 178 active rows — IA 17, AD 37, AP 85, TS 34,
|
||||||
and UN 5 — plus the retained retired TS-37 history note.
|
and UN 5 — plus the retained retired TS-37 history note.
|
||||||
- **Latest automated baseline:** Release build succeeds; 8,588 tests pass and
|
- **Latest automated baseline:** Release build succeeds; 8,591 tests pass and
|
||||||
five are intentionally skipped. The exact J5.5 connected lifecycle/reconnect
|
five are intentionally skipped. The exact J5.6 arrow/bolt/spell,
|
||||||
gate completed two sessions and seven checkpoints, and its canonical
|
lifecycle/reconnect, and canonical nine-stop gates complete with graceful
|
||||||
nine-stop movement route completed all destinations and movement exercises,
|
zero-code exits and zero failures.
|
||||||
with graceful zero-code exits and zero failures.
|
|
||||||
|
|
||||||
## Sources of truth
|
## Sources of truth
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -236,7 +236,9 @@ src/
|
||||||
collision receipts, bodies/hosts/worksets
|
collision receipts, bodies/hosts/worksets
|
||||||
RuntimeRemotePhysicsUpdater.cs -> presentation-free remote simulation
|
RuntimeRemotePhysicsUpdater.cs -> presentation-free remote simulation
|
||||||
RuntimeOrdinaryPhysicsUpdater.cs -> presentation-free object simulation
|
RuntimeOrdinaryPhysicsUpdater.cs -> presentation-free object simulation
|
||||||
-> J3–J4 and J5.1–J5.5 complete; J5.6 projectile runtime active
|
RuntimeProjectile.cs -> canonical projectile component/prediction owner
|
||||||
|
RuntimeProjectilePhysicsUpdater.cs -> presentation-free projectile simulation
|
||||||
|
-> J3–J4 and J5.1–J5.6 complete; J5.7 cleanup/closeout active
|
||||||
-> may reference Core, Core.Net, Content, and Plugin.Abstractions only
|
-> may reference Core, Core.Net, Content, and Plugin.Abstractions only
|
||||||
-> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui
|
-> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui
|
||||||
|
|
||||||
|
|
@ -486,9 +488,9 @@ versions, and exact tombstones. `RuntimeEntityRecord` is presentation-free.
|
||||||
an App record. `MaterializeLiveEntity` claims the Runtime local ID and creates
|
an App record. `MaterializeLiveEntity` claims the Runtime local ID and creates
|
||||||
one graphical `LiveEntityRecord` sidecar in `LiveEntityProjectionStore`, keyed
|
one graphical `LiveEntityRecord` sidecar in `LiveEntityProjectionStore`, keyed
|
||||||
by exact `RuntimeEntityKey` (local ID plus `INSTANCE_TS`). The sidecar owns the
|
by exact `RuntimeEntityKey` (local ID plus `INSTANCE_TS`). The sidecar owns the
|
||||||
App animation, remote-motion, projectile, hydration, and effect presentation
|
App animation, hydration, and effect/render presentation state.
|
||||||
state. `RuntimeEntityRecord` deliberately still carries the canonical
|
`RuntimeEntityRecord` owns the canonical `PhysicsBody`, physics host, remote
|
||||||
`PhysicsBody`/physics-host facts until their coherent J5 move.
|
motion, projectile component, clocks, state, and full cell.
|
||||||
Live `PhysicsDesc` effect fields replace Setup defaults on that same exact
|
Live `PhysicsDesc` effect fields replace Setup defaults on that same exact
|
||||||
sidecar; rebucketing never recreates it.
|
sidecar; rebucketing never recreates it.
|
||||||
|
|
||||||
|
|
@ -517,8 +519,11 @@ MTS/jump/AP cadence lives in Runtime (`aa3f4a60`). One
|
||||||
graph, transition scratch, shadow registry, typed collision admissions,
|
graph, transition scratch, shadow registry, typed collision admissions,
|
||||||
canonical body/host/remote components, ordinary/remote worksets, simulation,
|
canonical body/host/remote components, ordinary/remote worksets, simulation,
|
||||||
and full-cell commits. App supplies prepared collision and animation/shape
|
and full-cell commits. App supplies prepared collision and animation/shape
|
||||||
inputs, then projects committed snapshots (`7e6033d0`). J5.6 next moves the
|
inputs, then projects committed snapshots (`7e6033d0`). The same Runtime
|
||||||
projectile component and prediction lifecycle.
|
physics owner now owns the canonical projectile component, exact-key workset,
|
||||||
|
prediction/correction lifecycle, retail projectile simulation, and cell
|
||||||
|
commits. App resolves immutable Setup/DAT collision shape data and projects
|
||||||
|
committed render, shadow, and effect-pose results only (`2aee3356`).
|
||||||
|
|
||||||
`GpuWorldState` owns spatial buckets only and retains the exact projection key
|
`GpuWorldState` owns spatial buckets only and retains the exact projection key
|
||||||
through loaded/pending movement, landblock retirement/reload, origin recenter,
|
through loaded/pending movement, landblock retirement/reload, origin recenter,
|
||||||
|
|
|
||||||
|
|
@ -476,9 +476,10 @@ useful ordering seam, but its ownership status is **partial**.
|
||||||
| Retained gameplay UI | **Mostly complete feature ownership** | `RetailUiRuntime` and focused panel/controllers own layout and behavior. `GameWindow.OnLoad` still performs substantial service composition, which is allowed until the final composition cleanup. |
|
| Retained gameplay UI | **Mostly complete feature ownership** | `RetailUiRuntime` and focused panel/controllers own layout and behavior. `GameWindow.OnLoad` still performs substantial service composition, which is allowed until the final composition cleanup. |
|
||||||
| Action/combat/magic/movement | **J5.1–J5.4 complete** | Runtime `RuntimeActionState` owns the exact selection, temporary target mode, interaction transactions, combat attack/target/mode, and spell-cast intent children. Interaction owns use/appraisal/pickup identity, ordered FIFO, and exact post-arrival token while borrowing J4's sole busy gate. `RuntimeLocalPlayerMovementState` owns the exact local controller, construction seam, autorun latch, typed view, and outbound MTS/jump/AP cadence. Retained bars, physical input, world/content queries, transport, lighting, toasts, drag/drop, effects, and animation remain App adapters/presentation. No parallel App owner remains (`b298f99f`, `f5f7b417`, `20df9d15`, `aa3f4a60`). |
|
| Action/combat/magic/movement | **J5.1–J5.4 complete** | Runtime `RuntimeActionState` owns the exact selection, temporary target mode, interaction transactions, combat attack/target/mode, and spell-cast intent children. Interaction owns use/appraisal/pickup identity, ordered FIFO, and exact post-arrival token while borrowing J4's sole busy gate. `RuntimeLocalPlayerMovementState` owns the exact local controller, construction seam, autorun latch, typed view, and outbound MTS/jump/AP cadence. Retained bars, physical input, world/content queries, transport, lighting, toasts, drag/drop, effects, and animation remain App adapters/presentation. No parallel App owner remains (`b298f99f`, `f5f7b417`, `20df9d15`, `aa3f4a60`). |
|
||||||
| Physics/remote simulation | **J5.5 complete** | `RuntimePhysicsState` owns one per-session engine, production cache/cell graph, transition scratch, shadow registry, typed collision admissions, canonical bodies/hosts/remotes, keyed ordinary/remote worksets, simulation, and cell commits. App streaming supplies immutable prepared collision; animation/shape adapters supply graphical inputs and project committed snapshots only (`7e6033d0`). |
|
| Physics/remote simulation | **J5.5 complete** | `RuntimePhysicsState` owns one per-session engine, production cache/cell graph, transition scratch, shadow registry, typed collision admissions, canonical bodies/hosts/remotes, keyed ordinary/remote worksets, simulation, and cell commits. App streaming supplies immutable prepared collision; animation/shape adapters supply graphical inputs and project committed snapshots only (`7e6033d0`). |
|
||||||
|
| Projectile simulation | **J5.6 complete** | `RuntimeEntityRecord`/`RuntimePhysicsState` own the canonical projectile component, exact-key workset, prediction/correction state, unchanged retail quantum/integration/sweep/collision loop, and cell commits. App resolves immutable Setup/DAT shape input and projects committed render, shadow, and effect-pose results only (`2aee3356`). |
|
||||||
| Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own typed-meter publication and exact retryable retirement. `StreamingController` owns stable destination/control/unload/Near/Far queues and destination reservation. CPU mesh-cache restaging requires an exact live owner. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`; Slice E closeout `91e82c3c`). |
|
| Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own typed-meter publication and exact retryable retirement. `StreamingController` owns stable destination/control/unload/Near/Far queues and destination reservation. CPU mesh-cache restaging requires an exact live owner. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`; Slice E closeout `91e82c3c`). |
|
||||||
| Render-frame orchestration | **Complete** | `RenderFrameOrchestrator` owns the GPU-flight, resource, world/PView/shared-alpha, private-presentation, diagnostics, screenshot, and recovery graph. `GameWindow.OnRender` takes one logical window-size snapshot and performs one immutable handoff (`9d7df1bf`). |
|
| Render-frame orchestration | **Complete** | `RenderFrameOrchestrator` owns the GPU-flight, resource, world/PView/shared-alpha, private-presentation, diagnostics, screenshot, and recovery graph. `GameWindow.OnRender` takes one logical window-size snapshot and performs one immutable handoff (`9d7df1bf`). |
|
||||||
| Unified `GameEntity` | **Slice J active at J5.6** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, J5.1–J5.4 action/combat/magic/movement state, and J5.5 physics/remote simulation share failure-safe Runtime owners while exact graphical sidecars stay in App. J5.6–J7 move projectiles and finish cleanup before one Runtime composition root. |
|
| Unified `GameEntity` | **Slice J active at J5.7** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, J5 action/combat/magic/movement/physics/remote/projectile simulation share failure-safe Runtime owners while exact graphical sidecars stay in App. J5.7 removes remaining temporary seams and proves no-window parity before J6–J7 add world handshakes and one Runtime composition root. |
|
||||||
|
|
||||||
### 4.3 Revised extraction sequence
|
### 4.3 Revised extraction sequence
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# acdream — strategic roadmap
|
# acdream — strategic roadmap
|
||||||
|
|
||||||
**Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, and J5.5 per-session physics/remote simulation at `7e6033d0`. J5.6 projectile runtime is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
|
**Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, J5.5 per-session physics/remote simulation at `7e6033d0`, and J5.6 projectile simulation at `2aee3356`. J5.7 cleanup and closeout is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
|
||||||
**Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file.
|
**Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -1764,7 +1764,14 @@ port in any phase — no separate listing here.
|
||||||
> App publishes prepared collision and projects committed snapshots. Its 314
|
> App publishes prepared collision and projects committed snapshots. Its 314
|
||||||
> Runtime tests, 3,718 App tests / 3 skips, 8,588-test / 5-skip complete
|
> Runtime tests, 3,718 App tests / 3 skips, 8,588-test / 5-skip complete
|
||||||
> Release suite, exact-binary lifecycle/reconnect gate, and canonical
|
> Release suite, exact-binary lifecycle/reconnect gate, and canonical
|
||||||
> nine-stop collision/movement route pass. J5.6 projectile runtime is active.
|
> nine-stop collision/movement route pass. J5.6 is complete at `2aee3356`:
|
||||||
|
> Runtime owns the canonical projectile component/workset,
|
||||||
|
> prediction/correction state, and unchanged retail projectile simulation
|
||||||
|
> while App resolves immutable DAT shape data and projects committed frames.
|
||||||
|
> Its 317 Runtime tests, 3,718 App tests / 3 skips, 47 focused Core projectile
|
||||||
|
> tests, 8,591-test / 5-skip complete Release suite, exact arrow/bolt/spell
|
||||||
|
> evidence, lifecycle/reconnect gate, and canonical nine-stop route pass.
|
||||||
|
> J5.7 cleanup and closeout is active.
|
||||||
> The historical exact cutover
|
> The historical exact cutover
|
||||||
> rollback remains
|
> rollback remains
|
||||||
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
|
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,13 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
|
||||||
commits; App publishes prepared collision and projects committed snapshots.
|
commits; App publishes prepared collision and projects committed snapshots.
|
||||||
Its 314 Runtime tests, 3,718 App tests / 3 skips, 8,588 full Release tests /
|
Its 314 Runtime tests, 3,718 App tests / 3 skips, 8,588 full Release tests /
|
||||||
5 skips, exact-binary lifecycle/reconnect route, and canonical nine-stop
|
5 skips, exact-binary lifecycle/reconnect route, and canonical nine-stop
|
||||||
collision/movement route pass. J5.6 projectile ownership is active under
|
collision/movement route pass. J5.6 completed at `2aee3356`: Runtime owns
|
||||||
|
the canonical projectile component/workset, prediction/correction state,
|
||||||
|
and unchanged retail projectile simulation while App resolves immutable DAT
|
||||||
|
shape inputs and projects committed frames. Its 317 Runtime tests, 3,718
|
||||||
|
App tests / 3 skips, 47 focused Core projectile tests, 8,591 full Release
|
||||||
|
tests / 5 skips, exact arrow/bolt/spell evidence, lifecycle/reconnect route,
|
||||||
|
and canonical nine-stop route pass. J5.7 cleanup and closeout is active under
|
||||||
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
|
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
|
||||||
Slice-I closeout evidence is
|
Slice-I closeout evidence is
|
||||||
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).
|
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).
|
||||||
|
|
@ -271,6 +277,8 @@ Slice-J5.4 closeout evidence is
|
||||||
[`../research/2026-07-26-slice-j5-4-local-movement-ownership.md`](../research/2026-07-26-slice-j5-4-local-movement-ownership.md).
|
[`../research/2026-07-26-slice-j5-4-local-movement-ownership.md`](../research/2026-07-26-slice-j5-4-local-movement-ownership.md).
|
||||||
Slice-J5.5 closeout evidence is
|
Slice-J5.5 closeout evidence is
|
||||||
[`../research/2026-07-26-slice-j5-5-physics-remote-ownership.md`](../research/2026-07-26-slice-j5-5-physics-remote-ownership.md).
|
[`../research/2026-07-26-slice-j5-5-physics-remote-ownership.md`](../research/2026-07-26-slice-j5-5-physics-remote-ownership.md).
|
||||||
|
Slice-J5.6 closeout evidence is
|
||||||
|
[`../research/2026-07-26-slice-j5-6-projectile-ownership.md`](../research/2026-07-26-slice-j5-6-projectile-ownership.md).
|
||||||
The historical exact G4 visual rollback remains
|
The historical exact G4 visual rollback remains
|
||||||
`git revert ef1d263337997bb030eadb7b8e71d73dc659907a`.
|
`git revert ef1d263337997bb030eadb7b8e71d73dc659907a`.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
**Date:** 2026-07-24
|
**Date:** 2026-07-24
|
||||||
|
|
||||||
**Status:** Slices A–I, J0–J4, and J5.1–J5.5 are complete. Flat-authoritative collision, zero-
|
**Status:** Slices A–I, J0–J4, and J5.1–J5.6 are complete. Flat-authoritative collision, zero-
|
||||||
allocation resolve scratch, parsed-graph removal, connected correctness/
|
allocation resolve scratch, parsed-graph removal, connected correctness/
|
||||||
lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices F–L were
|
lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices F–L were
|
||||||
explicitly approved 2026-07-24. Slice J0–J1 established the enforced Runtime
|
explicitly approved 2026-07-24. Slice J0–J1 established the enforced Runtime
|
||||||
|
|
@ -16,10 +16,11 @@ ownership into Runtime at `011efbea`; J4.3 moved the coupled magic/player-sheet
|
||||||
owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections
|
owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections
|
||||||
and the shared typed state-command seam at `dcb61efb`; J4.5 closed canonical
|
and the shared typed state-command seam at `dcb61efb`; J4.5 closed canonical
|
||||||
gameplay-state ownership at `89e6b207`. J5 movement, physics, interaction,
|
gameplay-state ownership at `89e6b207`. J5 movement, physics, interaction,
|
||||||
and combat ownership is active at J5.6 after canonical action state
|
and combat ownership is active at J5.7 after canonical action state
|
||||||
(`b298f99f`), interaction transactions (`f5f7b417`), and combat/magic intent
|
(`b298f99f`), interaction transactions (`f5f7b417`), and combat/magic intent
|
||||||
(`20df9d15`), local movement/outbound cadence (`aa3f4a60`), and per-session
|
(`20df9d15`), local movement/outbound cadence (`aa3f4a60`), and per-session
|
||||||
physics/remote simulation (`7e6033d0`) moved to Runtime.
|
physics/remote simulation (`7e6033d0`), and projectile simulation
|
||||||
|
(`2aee3356`) moved to Runtime.
|
||||||
|
|
||||||
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
|
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
|
||||||
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
|
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
|
||||||
|
|
@ -1277,7 +1278,7 @@ single Runtime shortcut/spellbook/inventory owners, graphical/no-window
|
||||||
command parity, failure-safe combined ledger, 8,544-test Release suite,
|
command parity, failure-safe combined ledger, 8,544-test Release suite,
|
||||||
exact-binary lifecycle/reconnect gate, and canonical nine-stop route pass.
|
exact-binary lifecycle/reconnect gate, and canonical nine-stop route pass.
|
||||||
J5 movement/physics/interaction/combat ownership is the current execution
|
J5 movement/physics/interaction/combat ownership is the current execution
|
||||||
point. J5.1–J5.5 are complete; J5.6 projectile runtime is active.
|
point. J5.1–J5.6 are complete; J5.7 cleanup and closeout is active.
|
||||||
Evidence:
|
Evidence:
|
||||||
[`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md)
|
[`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md)
|
||||||
and
|
and
|
||||||
|
|
@ -1297,6 +1298,8 @@ and
|
||||||
and
|
and
|
||||||
[`../research/2026-07-26-slice-j3-6-lifetime-closeout.md`](../research/2026-07-26-slice-j3-6-lifetime-closeout.md)
|
[`../research/2026-07-26-slice-j3-6-lifetime-closeout.md`](../research/2026-07-26-slice-j3-6-lifetime-closeout.md)
|
||||||
and
|
and
|
||||||
|
[`../research/2026-07-26-slice-j5-6-projectile-ownership.md`](../research/2026-07-26-slice-j5-6-projectile-ownership.md)
|
||||||
|
and
|
||||||
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
|
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
|
||||||
|
|
||||||
The intended order is therefore:
|
The intended order is therefore:
|
||||||
|
|
|
||||||
|
|
@ -311,7 +311,13 @@ scratch/shadow/collision/body/host/remote/workset graph; App publishes
|
||||||
prepared collision and projects committed snapshots. Its 314 Runtime tests,
|
prepared collision and projects committed snapshots. Its 314 Runtime tests,
|
||||||
3,718 App tests / 3 skips, 8,588 complete Release tests / 5 skips,
|
3,718 App tests / 3 skips, 8,588 complete Release tests / 5 skips,
|
||||||
exact-binary lifecycle/reconnect gate, and canonical nine-stop collision/
|
exact-binary lifecycle/reconnect gate, and canonical nine-stop collision/
|
||||||
movement route pass. J5.6 projectile runtime is next. Evidence:
|
movement route pass. J5.6 completed at `2aee3356`: Runtime owns the canonical
|
||||||
|
projectile component, exact-key workset, prediction/correction state, and
|
||||||
|
retail projectile simulation; App resolves immutable DAT shape data and
|
||||||
|
projects committed frames only. Its 317 Runtime tests, 3,718 App tests / 3
|
||||||
|
skips, 47 focused Core projectile tests, 8,591 complete Release tests / 5
|
||||||
|
skips, exact arrow/bolt/spell evidence, lifecycle/reconnect gate, and canonical
|
||||||
|
nine-stop route pass. J5.7 ownership cleanup and closeout is active. Evidence:
|
||||||
[`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md)
|
[`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md)
|
||||||
and
|
and
|
||||||
[`../research/2026-07-26-slice-j5-2-interaction-transactions.md`](../research/2026-07-26-slice-j5-2-interaction-transactions.md)
|
[`../research/2026-07-26-slice-j5-2-interaction-transactions.md`](../research/2026-07-26-slice-j5-2-interaction-transactions.md)
|
||||||
|
|
@ -320,7 +326,9 @@ and
|
||||||
and
|
and
|
||||||
[`../research/2026-07-26-slice-j5-4-local-movement-ownership.md`](../research/2026-07-26-slice-j5-4-local-movement-ownership.md)
|
[`../research/2026-07-26-slice-j5-4-local-movement-ownership.md`](../research/2026-07-26-slice-j5-4-local-movement-ownership.md)
|
||||||
and
|
and
|
||||||
[`../research/2026-07-26-slice-j5-5-physics-remote-ownership.md`](../research/2026-07-26-slice-j5-5-physics-remote-ownership.md).
|
[`../research/2026-07-26-slice-j5-5-physics-remote-ownership.md`](../research/2026-07-26-slice-j5-5-physics-remote-ownership.md)
|
||||||
|
and
|
||||||
|
[`../research/2026-07-26-slice-j5-6-projectile-ownership.md`](../research/2026-07-26-slice-j5-6-projectile-ownership.md).
|
||||||
|
|
||||||
- Move presentation-free movement interpretation, authoritative/predicted
|
- Move presentation-free movement interpretation, authoritative/predicted
|
||||||
physics state, selection identity, approach/use transactions, combat intent,
|
physics state, selection identity, approach/use transactions, combat intent,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Modern runtime Slice J5 — movement, physics, interaction, and combat
|
# Modern runtime Slice J5 — movement, physics, interaction, and combat
|
||||||
|
|
||||||
**Status:** ACTIVE — J5.1–J5.5 complete; J5.6 next
|
**Status:** ACTIVE — J5.1–J5.6 complete; J5.7 next
|
||||||
**Parent:** `2026-07-25-modern-runtime-slice-j.md`, J5
|
**Parent:** `2026-07-25-modern-runtime-slice-j.md`, J5
|
||||||
**Production base:** `2c67a2c3`
|
**Production base:** `2c67a2c3`
|
||||||
**Authorization:** the user approved Slices F–L, including the Slice J
|
**Authorization:** the user approved Slices F–L, including the Slice J
|
||||||
|
|
@ -90,8 +90,8 @@ commands to Runtime. The camera may not write the player heading directly.
|
||||||
| J5.3 combat and magic intent | complete | `20df9d155db50706a42420d60a9b15861cf4bfe7`; exact Runtime attack/mode/target/cast owners; 223 Runtime tests, 3,754 App tests / 3 skips, 8,566 complete Release tests / 5 skips, exact-binary connected lifecycle/reconnect pass |
|
| J5.3 combat and magic intent | complete | `20df9d155db50706a42420d60a9b15861cf4bfe7`; exact Runtime attack/mode/target/cast owners; 223 Runtime tests, 3,754 App tests / 3 skips, 8,566 complete Release tests / 5 skips, exact-binary connected lifecycle/reconnect pass |
|
||||||
| J5.4 local movement and outbound cadence | complete | `aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`; one Runtime movement/controller/cadence owner; 303 Runtime tests, 3,716 App tests / 3 skips, 8,575 complete Release tests / 5 skips, exact-binary lifecycle/reconnect and nine-stop movement gates pass |
|
| J5.4 local movement and outbound cadence | complete | `aa3f4a60f87f2cbebc3d8ecd5e33d779b7fb13c1`; one Runtime movement/controller/cadence owner; 303 Runtime tests, 3,716 App tests / 3 skips, 8,575 complete Release tests / 5 skips, exact-binary lifecycle/reconnect and nine-stop movement gates pass |
|
||||||
| J5.5 per-session physics and remote simulation | complete | `7e6033d0adcd0b572c20e89dd275746fb442d52f`; one Runtime engine/cache/scratch/shadow/body/host/remote/workset owner; 314 Runtime tests, 3,718 App tests / 3 skips, 8,588 complete Release tests / 5 skips, exact-binary lifecycle/reconnect and nine-stop collision/movement gates pass |
|
| J5.5 per-session physics and remote simulation | complete | `7e6033d0adcd0b572c20e89dd275746fb442d52f`; one Runtime engine/cache/scratch/shadow/body/host/remote/workset owner; 314 Runtime tests, 3,718 App tests / 3 skips, 8,588 complete Release tests / 5 skips, exact-binary lifecycle/reconnect and nine-stop collision/movement gates pass |
|
||||||
| J5.6 projectile runtime | active | canonical component/simulation plus App projection acknowledgements |
|
| J5.6 projectile runtime | complete | `2aee33569f0268d7bc0f4f52437dfa0b405432a4`; one Runtime projectile component/workset/simulation/correction owner; 317 Runtime tests, 3,718 App tests / 3 skips, 47 focused Core projectile tests, 8,591 complete Release tests / 5 skips, exact arrow/bolt/spell evidence, lifecycle/reconnect pass, and nine-stop route pass |
|
||||||
| J5.7 combined cleanup and closeout | pending | no mirrors, no-window parity, teardown, connected and visual gates |
|
| J5.7 combined cleanup and closeout | active | no mirrors, one ownership ledger, no-window parity, teardown, connected and visual gates |
|
||||||
|
|
||||||
## J5.1 — canonical action state
|
## J5.1 — canonical action state
|
||||||
|
|
||||||
|
|
@ -481,6 +481,12 @@ J5.5 rollback:
|
||||||
git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f
|
git revert 7e6033d0adcd0b572c20e89dd275746fb442d52f
|
||||||
```
|
```
|
||||||
|
|
||||||
|
J5.6 rollback:
|
||||||
|
|
||||||
|
```text
|
||||||
|
git revert 2aee33569f0268d7bc0f4f52437dfa0b405432a4
|
||||||
|
```
|
||||||
|
|
||||||
## Acceptance
|
## Acceptance
|
||||||
|
|
||||||
J5 is complete only when:
|
J5 is complete only when:
|
||||||
|
|
|
||||||
169
docs/research/2026-07-26-slice-j5-6-projectile-ownership.md
Normal file
169
docs/research/2026-07-26-slice-j5-6-projectile-ownership.md
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
# Slice J5.6 — projectile-simulation ownership
|
||||||
|
|
||||||
|
Date: 2026-07-26
|
||||||
|
Scope: ownership relocation only; no retail algorithm, packet, collision
|
||||||
|
policy, impact authority, or presentation change
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
|
||||||
|
Move the mutable projectile component, projectile workset, prediction version,
|
||||||
|
authoritative correction, and retail projectile step into the same
|
||||||
|
`AcDream.Runtime` physics lifetime that already owns the canonical entity
|
||||||
|
record, body, object clock, collision engine, shadows, and full cell.
|
||||||
|
|
||||||
|
App remains responsible for:
|
||||||
|
|
||||||
|
- resolving the projectile's immutable Setup/DAT collision sphere;
|
||||||
|
- supplying the current graphical projection validity acknowledgement;
|
||||||
|
- rebucketing and positioning the retained render projection after a Runtime
|
||||||
|
commit;
|
||||||
|
- synchronizing the render shadow and effect pose;
|
||||||
|
- drawing meshes, trails, particles, sounds, and impact effects.
|
||||||
|
|
||||||
|
ACE remains authoritative for targets, hits, damage, impact scripts, and
|
||||||
|
deletion.
|
||||||
|
|
||||||
|
## Named-retail oracle
|
||||||
|
|
||||||
|
Primary source:
|
||||||
|
`docs/research/named-retail/acclient_2013_pseudo_c.txt`.
|
||||||
|
|
||||||
|
- `CPhysicsObj::UpdateObjectInternal` `0x005156B0`
|
||||||
|
- `CPhysicsObj::update_object` `0x00515D10`
|
||||||
|
- `CPhysicsObj::SetPositionInternal(CTransition const*)` `0x00515330`
|
||||||
|
- `CPhysicsObj::set_velocity` `0x005113F0`
|
||||||
|
- `OBJECTINFO::missile_ignore` `0x0050CEB0`
|
||||||
|
- `Frame::set_vector_heading` `0x00535DB0`
|
||||||
|
|
||||||
|
The complete translated retail projectile control flow is pinned in
|
||||||
|
`docs/research/2026-07-13-retail-projectile-vfx-pseudocode.md`. The existing
|
||||||
|
Core `ProjectilePhysicsStepper` and collision driver were cross-checked there
|
||||||
|
against ACE's physics implementation and Holtburger/ACViewer's DAT
|
||||||
|
interpretation. J5.6 reuses those algorithms unchanged.
|
||||||
|
|
||||||
|
## Preserved control flow
|
||||||
|
|
||||||
|
```text
|
||||||
|
for each spatial projectile owned by the current incarnation:
|
||||||
|
reject static, frozen, parented, hidden, cell-less, or inactive bodies
|
||||||
|
advance the retained CPhysicsObj clock in retail 0.2-second quanta
|
||||||
|
for each due quantum:
|
||||||
|
calculate acceleration from the final PhysicsState
|
||||||
|
clamp speed to 50 world units/second
|
||||||
|
integrate position, velocity, omega, and AlignPath orientation
|
||||||
|
continuously sweep the authored Setup-local collision sphere
|
||||||
|
apply retail missile-ignore and inelastic/elastic collision rules
|
||||||
|
commit the accepted frame and full cell to the canonical record
|
||||||
|
stop the split prediction if any authority/incarnation token changed
|
||||||
|
publish one immutable committed frame to the host
|
||||||
|
```
|
||||||
|
|
||||||
|
The graphical host may reject the presentation acknowledgement after a
|
||||||
|
re-entrant delete, replacement, rebucket, or session reset. That rejection
|
||||||
|
invalidates the pending prediction; it cannot roll back or redirect a newer
|
||||||
|
canonical owner.
|
||||||
|
|
||||||
|
## Previous ownership gap
|
||||||
|
|
||||||
|
Before J5.6:
|
||||||
|
|
||||||
|
- `RuntimeEntityRecord` owned identity, body, state, clocks, and cell;
|
||||||
|
- `RuntimePhysicsState` owned the engine, shadows, remotes, and ordinary/remote
|
||||||
|
worksets;
|
||||||
|
- App `ProjectileController` still owned the projectile component, projectile
|
||||||
|
workset snapshot, quantum stepping, correction, and canonical cell commit.
|
||||||
|
|
||||||
|
That split made a no-window Runtime unable to fly the same projectile without
|
||||||
|
reconstructing App behavior and left projectile mutation on the wrong side of
|
||||||
|
the presentation boundary.
|
||||||
|
|
||||||
|
## Implemented boundary
|
||||||
|
|
||||||
|
- `RuntimeEntityRecord.Projectile` is the sole mutable projectile component
|
||||||
|
slot.
|
||||||
|
- `RuntimeProjectile` owns the canonical body, authored collision sphere, and
|
||||||
|
prediction-authority version.
|
||||||
|
- `RuntimePhysicsState` owns binding, refresh, spatial membership, authoritative
|
||||||
|
vector/state correction, and the exact-key projectile workset.
|
||||||
|
- `RuntimeProjectilePhysicsUpdater` owns the unchanged retail quantum,
|
||||||
|
integration, sweep, collision, cell-crossing, and split-prediction logic.
|
||||||
|
- Runtime cell commits flow through the same typed
|
||||||
|
`RuntimePhysicsCellCommit` used by ordinary and remote objects.
|
||||||
|
- App `ProjectileController` resolves DAT/Setup shape data, delegates the
|
||||||
|
simulation, and applies only retained render projection, shadow, and effect
|
||||||
|
pose acknowledgements.
|
||||||
|
- Delete, GUID reuse, visibility withdrawal, pending-to-loaded recovery,
|
||||||
|
authoritative correction, and session teardown use the canonical Runtime
|
||||||
|
record and workset; they never reconstruct from stale spawn data.
|
||||||
|
|
||||||
|
No gameplay outcome moved client-side. No projectile-specific render pass,
|
||||||
|
second GUID map, body mirror, effect owner, or collision owner was introduced.
|
||||||
|
|
||||||
|
## Automated acceptance
|
||||||
|
|
||||||
|
On production commit
|
||||||
|
`2aee33569f0268d7bc0f4f52437dfa0b405432a4`:
|
||||||
|
|
||||||
|
- Runtime tests: 317 passed.
|
||||||
|
- App tests: 3,718 passed / 3 skipped.
|
||||||
|
- Focused Core projectile tests: 47 passed.
|
||||||
|
- Complete Release solution: 8,591 passed / 5 skipped.
|
||||||
|
- Release solution build: zero warnings and zero errors.
|
||||||
|
|
||||||
|
The focused fixtures cover:
|
||||||
|
|
||||||
|
- canonical component/body/workset identity;
|
||||||
|
- 0.2-second catch-up quanta and prediction invalidation;
|
||||||
|
- clamp, gravity, omega, full 3-D AlignPath, and collision;
|
||||||
|
- thin walls and inelastic stopping;
|
||||||
|
- missile/ethereal/designated-target exclusion;
|
||||||
|
- loaded, pending, landblock crossing, and hydration;
|
||||||
|
- State/Vector/Position correction order;
|
||||||
|
- deletion, same-GUID reuse, reset, and 96-owner lifetime stress;
|
||||||
|
- no duplicate mesh, body, shadow, script, effect, or projectile owner.
|
||||||
|
|
||||||
|
## Connected acceptance
|
||||||
|
|
||||||
|
All connected processes used the exact embedded/source commit
|
||||||
|
`2aee33569f0268d7bc0f4f52437dfa0b405432a4` and closed gracefully.
|
||||||
|
|
||||||
|
- Arrow plus representative spell projectile:
|
||||||
|
`.test-out/j56-projectile-20260726-143256`
|
||||||
|
recorded an authoritative missile attack, live Arrow spawn, live Acid Stream
|
||||||
|
spawn, and matching authoritative deletes.
|
||||||
|
- Crossbow bolt:
|
||||||
|
`.test-out/j56-crossbow-evidence-20260726-145612`
|
||||||
|
recorded a missile attack, live Quarrel spawn with Setup `0x0200012A`,
|
||||||
|
authoritative ammo pickup/update, projectile delete, and target death.
|
||||||
|
- Lifecycle/reconnect:
|
||||||
|
`logs/connected-world-gate-20260726-145731/report.json`
|
||||||
|
passed capped login plus fresh uncapped reconnect, all seven checkpoints,
|
||||||
|
zero failures, and two code-zero exits.
|
||||||
|
- Canonical nine-stop route:
|
||||||
|
`logs/connected-r6-soak-20260726-151349.report.json`
|
||||||
|
materialized all nine destinations, passed the Caul/Holtburg/Caul-return
|
||||||
|
forward, jump, combat, and movement-truth exercises, matched source and
|
||||||
|
binary, and exited with code zero and zero failures.
|
||||||
|
|
||||||
|
The first route attempt,
|
||||||
|
`logs/connected-r6-soak-20260726-150347.report.json`, intentionally remains in
|
||||||
|
the evidence trail. Its strict plateau check saw the already-known late lazy
|
||||||
|
mesh population (`582 -> 604`) while sampled entity counts happened to match
|
||||||
|
and therefore reported one failure. The immediate warm-machine rerun saw the
|
||||||
|
same class of late population (`581 -> 598`) together with one changed visible
|
||||||
|
owner and correctly classified it as workload variation. The accepted J5.5
|
||||||
|
baseline exhibited the same late Caul behavior (`575 -> 597`), and the J5.6
|
||||||
|
diff contains no mesh-cache, mesh-preparation, streaming, or residency change.
|
||||||
|
This is not waived as a projectile result and no threshold was loosened.
|
||||||
|
|
||||||
|
## Divergence and rollback
|
||||||
|
|
||||||
|
J5.6 changes ownership only. The retail algorithm, constants, packet order,
|
||||||
|
server authority, and presentation are unchanged, so it introduces no new
|
||||||
|
retail-divergence row.
|
||||||
|
|
||||||
|
Exact rollback:
|
||||||
|
|
||||||
|
```text
|
||||||
|
git revert 2aee33569f0268d7bc0f4f52437dfa0b405432a4
|
||||||
|
```
|
||||||
Loading…
Add table
Add a link
Reference in a new issue