fix(physics): #30 #34 L.2a movement truth diagnostics

Pass explicit grounded/airborne contact bytes from MovementResult into MoveToState and AutonomousPosition, and add ACDREAM_DUMP_MOVE_TRUTH logging for outbound movement plus player UpdatePosition echoes.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-04-29 21:52:53 +02:00
parent d4c3f947d2
commit 3be0c8b7c7
5 changed files with 166 additions and 56 deletions

View file

@ -177,33 +177,6 @@ missing is the plugin-API surface.
---
## #30 — AutonomousPosition contact byte is too often grounded
**Status:** OPEN
**Severity:** HIGH
**Filed:** 2026-04-29
**Component:** physics / net / movement
**Description:** Outbound movement can claim grounded contact even when the
local resolver result is uncertain or airborne. `AutonomousPosition.Build`
defaults `lastContact` to 1, and the app path needs an audit to ensure
`ResolveResult.IsOnGround` is what reaches the wire.
**Root cause / status:** Tracked under Phase L.2b. This can make ACE accept
movement that is not actually retail-valid and can hide edge/step-down bugs.
**Files:** `src/AcDream.Core.Net/Messages/AutonomousPosition.cs`,
`src/AcDream.Core.Net/Messages/MoveToState.cs`,
`src/AcDream.App/Input/PlayerMovementController.cs`.
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
**Acceptance:** Ground contact byte is derived from the current resolved
movement result for both autonomous heartbeat and movement-state sends. Tests
cover grounded, airborne, and failed-transition cases.
---
## #31 — Low outdoor cell id can go stale after transition movement
**Status:** OPEN
@ -285,33 +258,6 @@ one live creature case no longer use the single-cylinder fallback.
---
## #34 — Missing routine local/server correction diagnostic
**Status:** OPEN
**Severity:** MEDIUM
**Filed:** 2026-04-29
**Component:** physics / net / diagnostics
**Description:** The client needs an opt-in diagnostic that logs local predicted
position/contact/cell, outbound movement fields, server `UpdatePosition` echo,
and correction delta. Current correction visibility is too focused on portal
arrival and not enough on normal walking.
**Root cause / status:** Tracked under Phase L.2a/L.2b. Without this probe,
ACE's tolerance can hide local collision divergence.
**Files:** `src/AcDream.Core.Net/WorldSession.cs`,
`src/AcDream.App/Input/PlayerMovementController.cs`,
`src/AcDream.App/Rendering/GameWindow.cs`.
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
**Acceptance:** With the diagnostic enabled, a walking session logs local
resolved placement, outbound cell/contact fields, server echo placement, and
correction delta in a grep-friendly format.
---
## #2 — Lightning visual mismatch (sky PES path disproved)
@ -494,6 +440,28 @@ If hypothesis (a) is correct, this issue effectively rolls into **#28** — the
# Recently closed
## #34 — [DONE 2026-04-29] Missing routine local/server correction diagnostic
**Closed:** 2026-04-29
**Commit:** `(this commit)`
**Resolution:** Added `ACDREAM_DUMP_MOVE_TRUTH=1`, which logs local resolved
position/contact/cell, outbound movement fields, server `UpdatePosition` echo,
and local/server correction delta for the player in grep-friendly
`move-truth OUT` / `move-truth ECHO` lines.
---
## #30 — [DONE 2026-04-29] AutonomousPosition contact byte is too often grounded
**Closed:** 2026-04-29
**Commit:** `(this commit)`
**Resolution:** `GameWindow` now derives the movement contact byte from
`MovementResult.IsOnGround` and passes it explicitly to both `MoveToState.Build`
and `AutonomousPosition.Build`. Added packet tests proving both builders encode
an explicit airborne contact byte.
---
## #27 — [DONE 2026-04-26] Cloud meshes appeared missing or faint vs retail
**Closed:** 2026-04-26