docs(#182): retire TS-3, narrow AD-25 + add AD-39/40/41, update ISSUES for the shipped rebuild

TS-3 (frames_stationary_fall accounting absent) retired — ported in the verbatim
UpdateObjectInternal rebuild. AD-25 narrowed to the remote-DR sweep (player half retired).
AD-39 (fsf ladder placement vs ACE's interleave), AD-40 (fsf bit-encode in the Core
writeback + CachedVelocity computed-not-consumed), AD-41 (candidateMoved gates only
handle_all_collisions) added. ISSUES #182 → rebuild shipped, awaiting the visual gate,
with the fsf-not-cached_velocity correction + the #137 Slice-3 residual note.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-07 14:30:07 +02:00
parent 54d5622960
commit e3c4c59b84
2 changed files with 28 additions and 17 deletions

View file

@ -72,23 +72,32 @@ the wrong scene set, or a far-LOD placement offset. Not yet investigated.
## #182 — Player wedges in a packed monster crowd, can't wiggle free (hand-rolled SphereCollision)
**Status:** IN-PROGRESS — CSphere port shipped (`96ae2740`) but **visual-gate FAILED**;
the real fix is a velocity-model rebuild (see design spec), deferred to a new session.
**Status:** VELOCITY-MODEL REBUILD SHIPPED (Slices 1+2, `8bb8b204``54d56229`) —
**awaiting the user visual gate** (crowd glide/land + normal-locomotion regression pass).
**Severity:** MEDIUM
**Filed:** 2026-07-07
**Component:** physics / collision
**GATE OUTCOME (2026-07-07):** The CSphere-family port below was faithful but did NOT
fix the crowd feel and INTRODUCED an airborne "stuck in the falling animation"
regression. Player-attributed retail cdb trace proved retail's local client fully runs
player-vs-creature collision (~78% OK, glides) — NOT server-authoritative. Root
divergence: retail's per-frame `UpdateObjectInternal` sets velocity = ACTUAL movement/dt
(blocked → velocity collapses → gravity → glide); acdream integrates+reflects (jump
velocity persists → hang). Fix = verbatim rebuild of the per-frame player-physics loop,
velocity model first. Design:
`docs/superpowers/specs/2026-07-07-player-physics-update-verbatim-rebuild-design.md`.
#182 stays as the base (user), so the codebase carries the airborne regression until
the rebuild lands.
**REBUILD SHIPPED (2026-07-07):** The `CPhysicsObj::UpdateObjectInternal` velocity chain
was ported verbatim, fixing the airborne "stuck in the falling animation" regression the
CSphere port had exposed. **Refinement of the design's framing:** the airborne-stuck
bleed is the `frames_stationary_fall` counter (`ValidateTransition` increments it when a
gravity mover can't advance; `handle_all_collisions` zeros the velocity at fsf>1 → gravity
resumes → glide/fall), NOT the `cached_velocity` field (a separate retail reporting/DR
value). Slice 1 = the fsf round-trip in the kept transition internals (retires **TS-3**) +
ungated small-velocity-zero; Slice 2 = `PhysicsObjUpdate.HandleAllCollisions` wired into
`PlayerMovementController`, gated on `candidateMoved` (retail pc:283657), replacing the
ad-hoc airborne-only reflect + Velocity.Z snap (AD-25 narrowed to the remote-DR sweep;
AD-39/40/41 added). Tests: `FramesStationaryFallTests`, `HandleAllCollisionsTests`,
`Issue182CrowdJumpTests` (a blocked jump bleeds to ~0 and grounds instead of hanging with
+12). Core 2617 / App 741 green. Plan:
`docs/superpowers/plans/2026-07-07-player-physics-update-verbatim-rebuild.md`.
**A/B instrument:** `ACDREAM_CAPTURE_RESOLVE``tools/analyze_resolve_capture.py` (before =
52.8% OK / 22.1% stuck / 107 airborne-stuck; retail target ~78% OK / 0 airborne-stuck).
**Residual (design §7 Q3, measure after the gate):** the general ground-jam (22% stuck vs
retail 13%) may need a second divergence in the #137 sliding-normal-provenance family
(TS-4) — the fsf ladder only climbs when the sweep runs, and a purely-horizontal push has
its offset absorbed by the sliding normal. #182 keeps the CSphere port as the base.
**Description:** In a large group of monsters packed around the player it was too
easy to get stuck — the player couldn't shuffle/slide out. Retail leaves room to