From 3dd41c66e1bf5c57f9ed90d401c82f58e2d131f1 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 7 Aug 2026 11:22:27 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20#345=20live=20retail=20trace=20?= =?UTF-8?q?=E2=80=94=20the=20glide=20is=20cliff=5Fslide=20firing=20every?= =?UTF-8?q?=20tick;=20our=20insert=20loop=20never=20routes=20there?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cdb on the PDB-paired retail client during the user's 45-degree glide: edge_slide/cliff_slide 594 each in lockstep, set_sliding_normal 538, step_up ZERO. Ours: 18 edge-family firings total, stuck ticks dead-looping on insert retries. The divergent branch is transitional_insert's handling of the refused steep walkable — retail proceeds into the step-down-failed/edge path per tick, we retry from scratch. The D0 code-reading's 'retries from scratch, retail-identical' conclusion is corrected by the runtime evidence: the profile is what the decomp reading could not see. Co-Authored-By: Claude Opus 5 --- docs/ISSUES.md | 23 +++++++++++++++++++++++ tools/cdb/345-glide-profile.cdb | 26 ++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 tools/cdb/345-glide-profile.cdb diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 107fec3d..5f56a824 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -206,6 +206,29 @@ and trace validate_walkable @0x0050d010 / transitional_insert @0x0050b6f0 / adjust_sphere_to_plane @0x00538210 WHILE the glide happens — the diff between retail's live inputs and ours in the same scenario IS the answer. +### LIVE RETAIL TRACE 2026-08-08 — the glide IS cliff_slide, firing every tick; the divergent branch is pinned + +cdb attached to the PDB-paired retail client while the user glided the +45-degree protocol (`345-retail-glide.cdb.log`): `edge_slide` and +`cliff_slide` fired **594 times each, in lockstep** (~30/s through the glide +windows) with `set_sliding_normal` tracking at 538; **`step_up` fired ZERO +times**; `adjust_sphere_to_plane`/`walkable_hits_sphere` zero (outdoor +terrain walkables go through `validate_walkable` only). Ours in the same +scenario: the edge family fired 18 times total and the stuck ticks +dead-looped on insert retries without reaching it. + +**The divergence, exactly:** retail's `transitional_insert`, when the +walkable validation refuses the steep plane, proceeds INTO the +step-down-failed/edge_slide path on every tick — the D0 pass's +"Adjusted just retries from scratch" reading missed the branch retail +actually takes here. Ours retries the insert without entering the edge +family, exhausts attempts, restores. The fix target is that one branch in +our `TransitionalInsert` against retail's @0x0050b6f0, with the edge-entry +anchors already mapped in the #32 research (step-down-failed at +~0x0050b8xx-0x0050b921). The response machinery downstream is already +proven faithful AND live-healthy (this morning's 18 firings all applied +clean constraints). + **The two prior validations (both now resolved — the user's observation answers 1 and mandates 2's runtime session):** 1. **The cheapest decisive test needs no debugger: the USER walks their diff --git a/tools/cdb/345-glide-profile.cdb b/tools/cdb/345-glide-profile.cdb new file mode 100644 index 00000000..7f46270a --- /dev/null +++ b/tools/cdb/345-glide-profile.cdb @@ -0,0 +1,26 @@ +.logopen C:\Users\erikn\source\repos\acdream\345-retail-glide.cdb.log +.sympath C:\Users\erikn\source\repos\acdream\refs +.symopt+ 0x40 +.reload /f acclient.exe + +r $t0 = 0 +r $t1 = 0 +r $t2 = 0 +r $t3 = 0 +r $t4 = 0 +r $t5 = 0 +r $t6 = 0 +r $t7 = 0 +r $t8 = 0 + +bp acclient!OBJECTINFO::validate_walkable "r $t0 = @$t0 + 1; .if (@$t0 % 500 == 0) { .printf \"[c] vwalk=%d tins=%d edge=%d cliff=%d adjplane=%d whits=%d stepup=%d vtrans=%d slidn=%d\\n\", @$t0, @$t1, @$t2, @$t3, @$t4, @$t5, @$t6, @$t7, @$t8 }; .if (@$t0 >= 20000) { qd } .else { gc }" +bp acclient!CTransition::transitional_insert "r $t1 = @$t1 + 1; gc" +bp acclient!CTransition::edge_slide "r $t2 = @$t2 + 1; gc" +bp acclient!CTransition::cliff_slide "r $t3 = @$t3 + 1; gc" +bp acclient!CPolygon::adjust_sphere_to_plane "r $t4 = @$t4 + 1; gc" +bp acclient!CPolygon::walkable_hits_sphere "r $t5 = @$t5 + 1; gc" +bp acclient!CTransition::step_up "r $t6 = @$t6 + 1; gc" +bp acclient!CTransition::validate_transition "r $t7 = @$t7 + 1; gc" +bp acclient!COLLISIONINFO::set_sliding_normal "r $t8 = @$t8 + 1; gc" + +g