docs(render): resolve #458 — the a9c9 doorway admission is a 0.5 % edge-plane precision boundary (AD-118)

Two live cdb captures on the paired 2013 client at the Holtburg doorway:
the blockset template (every Render::block_check call of one frame — 2,601
resident blocks x 2 exit views) proves retail tests a9c9 at ring slot
25,46 and returns PARTIALLY then OUTSIDE; the blockcheck template dumps
its four corner interval vectors (0 0 0 0 300.4|310.2 and 0 0 0 1001 ...,
slab 75..330). acdream's replay at the same P pose reproduces the sentinel
pattern, the four edge planes and both verdicts, drawing a9c9 once, with
clip heights 298.8/308.5 m — a 0.5 % plane difference (about 0.35 px of
projected door-vertex position). At the fixture pose that margin is what
flips the south-west corner from inside to outside on the fourth edge
plane, so retail's four-corner unanimity test says OUTSIDE where ours
says PartiallyInside. Not fixable bit-exactly short of D3D's x87
transform; the KnownFailure row stays with its comment rewritten, the
register carries AD-118, and the first filtered capture's silent miss
(cdb sign-extends poi() inside .if; use dwo()) is noted in the template.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 14:43:14 +02:00
parent 086dd0f192
commit 37e42aafc4
8 changed files with 11145 additions and 2 deletions

View file

@ -12,6 +12,7 @@ capture is the detach frame and carries no events — never count it.
| `holtburg-doorway-still` | interior `a9b4013f`, ov=2 | walk / parts / alphadepth |
| `terrace-edge` | outdoor `f418000b` (14 buildings, identical to FW0) | walk / parts / alphadepth |
| `foundry-deep` | interior `a9b40176`, ov=1 | walk / parts / alphadepth |
| `holtburg-doorway-still` #458 follow-up (2026-09-03 afternoon, a NEARBY pose — its own `P` line, not the walk capture's) | interior `a9b4013f`, ov=2 | `blockset` (every `Render::block_check` call of one frame: 2,601 blocks × 2 views + the return codes; `oh-capture-blockset.cdb.template`) / `blockcheck` (block `a9c9` only: the four corner interval vectors, z slab 75..330, ret 1 then 0; `oh-capture-blockcheck.cdb.template`) |
`oh-recon.log` is the offset/breakpoint recon that PASSED before the poses.
Per-pose counts and observations: `../s3-walk-ownership-map.md` §6b.

View file

@ -0,0 +1,124 @@
Opened log file 'C:/Users/erikn/source/repos/acdream/.claude/worktrees/peaceful-blackburn-5333f0/logs/oh-capture/holtburg-doorway-still.blockcheck.log'
0:018> .sympath C:\Users\erikn\source\repos\acdream\refs
Symbol search path is: C:\Users\erikn\source\repos\acdream\refs
Expanded Symbol search path is: c:\users\erikn\source\repos\acdream\refs
************* Path validation summary **************
Response Time (ms) Location
OK C:\Users\erikn\source\repos\acdream\refs
0:018> .symopt+ 0x40
Symbol options are 0xB0367:
0x00000001 - SYMOPT_CASE_INSENSITIVE
0x00000002 - SYMOPT_UNDNAME
0x00000004 - SYMOPT_DEFERRED_LOADS
0x00000020 - SYMOPT_OMAP_FIND_NEAREST
0x00000040 - SYMOPT_LOAD_ANYTHING
0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
0x00010000 - SYMOPT_AUTO_PUBLICS
0x00020000 - SYMOPT_NO_IMAGE_SEARCH
0x00080000 - SYMOPT_NO_PROMPTS
0:018> .reload /f acclient.exe
0:018> r $t0 = 0
0:018> r $t8 = 0
0:018> bp 00453aa0 "r $t0 = @$t0 + 1; .printf \"F %d\\n\", @$t0; .printf \"P %08x %08x %08x %08x %08x %08x %08x %08x\\n\", poi(0081ef00+4), poi(0081ef00+0x3c), poi(0081ef00+0x40), poi(0081ef00+0x44), poi(0081ef00+8), poi(0081ef00+0xc), poi(0081ef00+0x10), poi(0081ef00+0x14); .if (@$t0 < 0n2) { gc }"
0:018> * NOTE (2026-09-03, first run): `poi(...) == 0xa9c9ffff` never matched ? cdb
0:018> * sign-extends the 32-bit read inside `.if`, so the equality is false for any
0:018> * DID with the top bit set. `dwo(...)` reads an unsigned dword; the blockset
0:018> * template proved the register facts (did=a9c9ffff at gx=25 gy=46, twice a
0:018> * frame for the two doorway views).
0:018> bp 0054dc50 ".if (dwo(@esi+0x28) == 0xa9c9ffff) { r $t8 = 1; .printf \"BC did=%08x gx=%d gy=%d max=%08x min=%08x\\n\", dwo(@esi+0x28), @ebx, @ebp, dwo(@esp+0x14), dwo(@esp+0x18); .printf \"W0\"; dd poi(@esp+4) L20; .printf \"W1\"; dd poi(@esp+8) L20; .printf \"E0\"; dd poi(@esp+0xc) L20; .printf \"E1\"; dd poi(@esp+0x10) L20 }; gc"
0:018> bp 005061e9 ".if (@$t8 == 1) { .printf \"BR ret=%d\\n\", @eax; r $t8 = 0 }; gc"
0:018> g
F 1
P a9b4013f 430542ff 415c0def 42c0a8f8 bf7bf267 3e13e94a 3c745f23 bdd02083
BC did=a9c9ffff gx=25 gy=46 max=43a50000 min=42960000
W017c59818 00000000 00000000 00000000 00000000
17c59828 43963738 00000000 03000000 00000000
17c59838 02000000 04030201 06090704 090e0a06
17c59848 0c120e08 0f17110a 131c150c 1621190e
17c59858 19251c10 1c2b2012 1f2f2314 23332615
17c59868 27392a18 2a3f2f1a 2d43321c 3148351e
17c59878 334d3920 37523d22 3b584124 3e5b4426
17c59888 41614828 45654b2a 47694e2b 496c502c
W117c59898 00000000 00000000 00000000 00000000
17c598a8 439b1786 00000000 537c5c33 537c5c33
17c598b8 537c5c33 537c5c33 527a5a32 51795a32
17c598c8 50765731 4e73552f 4c70532e 496c502c
17c598d8 47694e2b 45654b2a 41614828 3e5c4426
17c598e8 3b584124 37523d22 344e3a20 3148351e
17c598f8 2d43321c 2a3f2f1a 27392a18 24352716
17c59908 20302414 1c2b2012 19251c10 1621190e
E017c57e18 00000000 00000000 00000000 00000000
17c57e28 43963738 00000000 5818005c 00561700
17c57e38 16005916 5716005a 004d1700 16003c17
17c57e48 3b18003a 003b1700 16004116 5417004e
17c57e58 00571600 14005615 4e150054 00401300
17c57e68 0e003411 230a002d 00160700 01000201
17c57e78 09030004 000f0400 08001806 2e090024
17c57e88 00380b00 0c00410c 530d004a 005c1100
E117c57e98 00000000 00000000 00000000 00000000
17c57ea8 439b1786 00000000 04007e04 8008007f
17c57eb8 00800c00 13007f10 8010007f 00801200
17c57ec8 1d008018 7a1e007f 00782300 1e006d23
17c57ed8 4d1c005a 00471a00 1a00471a 50190048
17c57ee8 00591900 19005f19 60160062 00591600
17c57ef8 15005516 4f160053 00461700 16003a16
17c57f08 3b17003a 003f1600 18004917 5f180056
BR ret=1
BC did=a9c9ffff gx=25 gy=46 max=43a50000 min=42960000
W017c59818 00000000 00000000 00000000 447a4000
17c59828 4396371f 00000000 03000000 00000000
17c59838 02000000 04030201 06090704 090e0a06
17c59848 0c120e08 0f17110a 131c150c 1621190e
17c59858 19251c10 1c2b2012 1f2f2314 23332615
17c59868 27392a18 2a3f2f1a 2d43321c 3148351e
17c59878 334d3920 37523d22 3b584124 3e5b4426
17c59888 41614828 45654b2a 47694e2b 496c502c
W117c59898 00000000 00000000 00000000 447a4000
17c598a8 439b176b 00000000 537c5c33 537c5c33
17c598b8 537c5c33 537c5c33 527a5a32 51795a32
17c598c8 50765731 4e73552f 4c70532e 496c502c
17c598d8 47694e2b 45654b2a 41614828 3e5c4426
17c598e8 3b584124 37523d22 344e3a20 3148351e
17c598f8 2d43321c 2a3f2f1a 27392a18 24352716
17c59908 20302414 1c2b2012 19251c10 1621190e
E017c57e18 00000000 00000000 00000000 447a4000
17c57e28 4396371e 00000000 5818005c 00561700
17c57e38 16005916 5716005a 004d1700 16003c17
17c57e48 3b18003a 003b1700 16004116 5417004e
17c57e58 00571600 14005615 4e150054 00401300
17c57e68 0e003411 230a002d 00160700 01000201
17c57e78 09030004 000f0400 08001806 2e090024
17c57e88 00380b00 0c00410c 530d004a 005c1100
E117c57e98 00000000 00000000 00000000 447a4000
17c57ea8 439b176a 00000000 04007e04 8008007f
17c57eb8 00800c00 13007f10 8010007f 00801200
17c57ec8 1d008018 7a1e007f 00782300 1e006d23
17c57ed8 4d1c005a 00471a00 1a00471a 50190048
17c57ee8 00591900 19005f19 60160062 00591600
17c57ef8 15005516 4f160053 00461700 16003a16
17c57f08 3b17003a 003f1600 18004917 5f180056
BR ret=0
F 2
P a9b4013f 430542ff 415c0def 42c0a8f8 bf7bf267 3e13e94a 3c745f23 bdd02083
eax=27948130 ebx=00000009 ecx=00a566d8 edx=3e900471 esi=00a566d8 edi=009a09b0
eip=00453aa0 esp=001afe84 ebp=001aff74 iopl=0 nv up ei pl nz na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00200206
acclient!SmartBox::RenderNormalMode:
00453aa0 a130f38600 mov eax,dword ptr [acclient!RenderDevice::render_device (0086f330)] ds:002b:0086f330=00a64b88
0:000> .echo ===DETACHING===
===DETACHING===
0:000> qd
quit:
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\atlmfc.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\concurrency.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\cpp_rest.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\ObjectiveC.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\stl.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\Windows.Data.Json.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\Windows.Devices.Geolocation.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\Windows.Devices.Sensors.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\Windows.Media.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\windows.natvis'
NatVis script unloaded from 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\Visualizers\winrt.natvis'

File diff suppressed because it is too large Load diff