7.2 KiB
R5 entry handoff — fresh-session entry point (2026-07-03, night)
Successor to 2026-07-03-r4-verify-session-handoff.md (now fully closed
out — its items 1-4 are all struck through with outcomes). Worktree
vigorous-joliot-f0c3ad, branch claude/vigorous-joliot-f0c3ad, tree
CLEAN at 304327b0. Full suite green: 3,964.
State — the R2-R4 arc is DONE
R4 shipped + user-verified; the whole follow-up queue closed today, all user-verified live:
| Item | Outcome |
|---|---|
| #161 landing pose | FIXED b1cf0102 — retail's apply pass runs with ModifyInterpretedState=false (the BN decomp SMEARS the params bitfield store into the mush at raw 305778: (word & 0x37ff) | cancelMoveTo<<15 | disableJump<<17; ACE MotionInterp.cs:444-449 confirms). Fwd is PRESERVED through a fall; HitGround re-dispatches it → landing link. Plus: HitGround must run BEFORE the DR gravity-bit clear (its verbatim state&0x400 gate — AP-81); K-fix17 SetCycle blocks deleted; copy_movement_from now copies current_style (raw 0051e757); ALL apply_current_movement caller polarities fixed (raw arg3 = DisableJumpDuringLink → (N,0) = allowJump TRUE). Lesson: feedback-bn-decomp-field-names (2nd artifact class). |
| #162 glide class | CLOSED, no adaptation. User A/B: retail does NOT glide — and post-#161 acdream matches (walk/run-by-distance movetos + clean mid-chain key takeover). Head-interrupt + CancelMoveTo re-audited retail-verbatim; ACE's mt-0 reflections carry the mover's REAL locomotion, so cancels never strand the legs. Evidence: ISSUES Recently-closed #162 + the launch-162 capture analysis. |
| #163 temp diags | STRIPPED 5ebe2be3 ([autowalk-gate]+clock, [autowalk-feed], [MOVETO-CANCEL]). Durable ProbeAutoWalk family kept. |
| R2-R4 visual pass | PASSED (jump/ledge momentum, run-in-circles, stop settle, retail-observer view). Filed #165 (remote wall-swallow) + #166 (slope-landing sled — the AD-25+AP-7+TS-4 composite, post-R6 per user). |
NEXT: R5 — MovementManager facade + PositionManager (Sticky/Constraint) + TargetManager
Retires: TS-39 (MoveToManager StickTo/Unstick are unbound no-op
seams — sticky movetos complete-and-stop instead of sticking; retail
hands off to PositionManager::StickTo(tlid, radius, height), and every
PerformMovement head calls unstick_from_object →
PositionManager::UnStick) and AP-79 (the P4 TargetTracker minimal
adapter — GameWindow feeds HandleUpdateTarget from the entity table;
retail's TargetManager is a full voyeur-subscription system with
per-target quantums).
Retail function inventory (grep'd, addresses verified)
- MovementManager (facade, mostly thin): 00524000 MakeMoveToManager · 00524020 SetWeenieObject · 005240d0 PerformMovement · 00524170 move_to_interpreted_state · 005241b0 CancelMoveTo · 005241c0 EnterDefaultState · 00524260 IsMovingTo · 00524280 motions_pending · 005242d0 MotionDone · 005242f0 UseTime · 00524300 HitGround · 00524320 LeaveGround · 00524340/00524350 HandleEnter/ExitWorld · 00524360 ReportExhaustion · 00524440 unpack_movement · 00524790 HandleUpdateTarget (routes TargetInfo → MoveToManager). Much of this facade's BEHAVIOR is already ported piecemeal (funnel, RouteServerMoveTo, TickRemoteMoveTo, the UseTime/CheckForCompletedMotions slots) — R5's job is the STRUCTURE: one owner object per entity replacing the GameWindow wiring sprawl, without changing dispatch behavior pinned by the 183-case + funnel + moveto suites.
- StickyManager: 00555400 UnStick · 00555430 adjust_offset · 00555610 UseTime · 005556e0 SetPhysicsObject · 00555710 StickTo · 00555780 HandleUpdateTarget.
- ConstraintManager: 00556090 SetPhysicsObject · 005560c0 UnConstrain ·
005560d0 IsFullyConstrained · 00556180 adjust_offset · 00556240
ConstrainTo. (
jump_is_allowedalready calls anIsFullyConstrainedstub — find it before re-porting.) - PositionManager (owns the two): CPhysicsObj::MakePositionManager
00510210 (also sets transient bit 0x80 + update_time).
stick_to_object/unstick_from_objecton CPhysicsObj are the entry seams (today Action seams on MotionInterpreter, wired per-entity in GameWindow). - TargetManager: 0051a370 ctor · 0051a4a0 SetTargetQuantum · 0051a4f0
SendVoyeurUpdate · 0051a5e0 GetInterpolatedPosition · 0051a650
CheckAndUpdateVoyeur · 0051a6f0 NotifyVoyeurOfEvent · 0051a7e0
ClearTarget · 0051a830 AddVoyeur · 0051a930 ReceiveUpdate · 0051aa90
HandleTargetting · 0051ac30 SetTarget · 0051ad90 RemoveVoyeur.
AP-79's seams (
_setTarget/_clearTarget/quantum get/set + GameWindow's tracker blocks for remotes AND the_playerMoveToTarget*player twin) are the integration points to replace.
Already ported — do NOT re-port
MoveToManager (R4, full incl. the queue model), MotionInterpreter (R3
full; #161 corrected the apply-pass params), MotionTableManager +
GetObjectSequence (R2), CSequence (R1), RemoteWeenie + PhysicsBody.InWorld
(R4-V5), DefaultSink binding order (bind BEFORE SetPosition — the
LoginQueue_DrainsToEmpty_UnderProductionFeed invariant).
R5-adjacent verification items (found reading unpack_movement this session)
- Head stance-change dispatch: raw @00524502-0052452c — before the
type switch, for ALL movement types:
if (InqStyle() != command_ids[stanceIdx]) CMotionInterp::DoMotion(style, defaults)(BN mislabels InqStyle asCBaseFilter::GetPinVersion). Verify our UM path does this for types 6-9 (mt-0 handles style inside the funnel). - mt-0 header flags: 0x100 → read sticky guid →
stick_to_object(raw @00524589); 0x200 →standing_longjumpstore (raw @0052458e).UpdateMotion.csPARSES both (cited §2f) — verify they're APPLIED (sticky needs TS-39's machinery = this phase; longjump flag should reachMotionInterpreter.StandingLongJump). - #164 (filed): action-replay dispatches drop the per-action Autonomous bit (raw 305982 sets params bit 0x1000 → AddAction). Fix while touching the action path.
The load-bearing lessons (compressed)
- The queue model (unchanged from R4): every
pending_motionsenqueue needs a manager completion partner; one orphan = permanent MotionsPending wedge. - BN smeared bitfield stores: a fresh local struct + later "mush" expression = decode the mush BEFORE porting "ctor defaults". ACE's C# port of the same function is the fastest cross-check. Cost of missing it: #161 + the wrong W6 entry-cache theory + a wrong pinned test.
- Tests can pin bug values:
AirborneBody_NoCycleDispatches_...asserted the CLOBBERED fwd (0x40000015) with a comment admitting it was untested. When flipping behavior, audit what the old assertions PINNED.
Session gotchas
- Launch recipe unchanged (CLAUDE.md). Client LOCKS builds — ask the user to close it, never kill. Graceful close clears the ACE session in ~5 s.
- PowerShell
Tee-Objectwrites UTF-16 → grep the background task's plain-text output file instead of the tee'd log. - ACDREAM_DUMP_MOTION=1 + ACDREAM_REMOTE_VEL_DIAG=1 give the full UM/seq evidence chain ([UM_RAW] hex incl. autonomy byte, [FWD_WIRE], [SEQSTATE], [MOTIONDONE]); #165's first step is ACDREAM_PROBE_RESOLVE at a wall.