POSITIONT tiny-RHW causal repair, 2026-10-23
Finding: production scalar perspective correction overflows; the fixture input and opaque-red oracle are justified. Candidate repair is tested offline only.
The retained baseline from 80b28a502f18f933c2bf5b45be04a26e79acbf9a
failed at test/test-d3d9-positiont-com-qualification.js:180, via check:137
and frameOracle:28. baseline.log retains the actual assertion diff: expected
red/opaque bytes become zero in covered pixels. Nine prior COM/software-pixel
cases passed. The assertion compares complete 256-byte BGRA frames; preceding
draws exercise depth, but this first failing BGRA assertion does not itself dump
the depth buffer. No baseline replay occurred in this task.
Causal data flow
Exact inputs are fixture 7aef3ff22f0dbe4fbfe739196bf92ad7a9435fb6, accepted
offline aea185d3dfc1b772cea00ca1a4aed14b9553dfed, and the supplied retained
source manifest. source-excerpts.txt records numbered original source lines
and verified blob/SHA identities; candidate-delta.json records the exact delta.
- Fixture lines 119–125 store FLOAT4 position, red diffuse
[1,0,0,1], UV[.25,.25]withDataView.setFloat32. Lines 179–180 submit triangle(0,0),(4,0),(0,4), z=.5, RHW=1e-39 after clearing an 8x8 target black, opaque, depth=1. The white 1x1 texture and MODULATE apply to RGB and alpha; depth LESS accepts .5. No geometric or texture-state reason changes red. - The actual Float32 RHW is 1.0000002153053333e-39, bits
0x000ae398. It is positive and finite. Its Float32 reciprocal is Infinity.lib/d3d-shader-ir.js:135–137rejects it before descriptor allocation: shared admission requires positive power-of-two RHW in[2^-16,2^16]. The earlier shared admission protection therefore cannot fix this fallback. lib/d3d9-software-backend.js:328emits transformed flags17, including screen-space output16.src/09aj-d3d-fixed.wat:513–516copies POSITIONT unchanged. The backend sets the pretransformed raster flag at lines899–900.src/09ah-d3d-software.wat:584–600uses RHW directly asiw, copies XYZ, and stores each varying multiplied byiw. This admits the finite tiny RHW without ever reconstructing infinite clip-space W.- Original raster lines1264–1292 interpolate
iw, computeriw=1/iw, and multiply interpolated varyingOverW byriw. Here nonzero diffuse becomes Infinity, zero diffuse becomes NaN, and UV becomes Infinity. Direct divisionvaryingOverW/iwremains finite (zero, one, and .25 for this fixture). src/09ag-d3d-shader-vm.wat:1252–1255explicitly returns zero samples for nonfinite UV. MODULATE then combines zero with infinite/NaN diffuse;src/09ah-d3d-software.wat:829–831maps NaN channels to zero. This explains the observed zero color/alpha bytes. This is a source/arithmetic causal finding consistent with the retained failure, not a newly observed native frame or an assertion of native repair success.
Minimal candidate and rejecting evidence
Only production path changed: src/09ah-d3d-software.wat. New helper at
lines823–826 retains reciprocal multiplication when the reciprocal is finite,
and uses direct division otherwise. Three existing correction sites (fog,
28 main varyings, four secondary-color components) call it. No geometry,
admission, fixture, expected frame, depth, sampler, or fallback policy changed.
No 286-pin refresh: the original pin file is untouched. The candidate intentionally
requires independent source-delta review before a provenance-qualified rebuild.
Run from this isolated repository:
python3 docs/re-notes/render-positiont-tiny-rhw-cause-repair-20261023/run-focused.py
The JS probe parses the source, checks balanced expressions and all three helper
call sites, and interprets the actual helper's small scalar expression using
Math.fround after each arithmetic operation. It imports only Node builtins.
arithmetic.json/log: exit0, ten covered pixel centers, 30 finite tiny-RHW
quotients, exact zero/one diffuse and .25 UV; finite-reciprocal cases including
unequal weights remain bit-identical to the original multiplication.
reject-multiply-mutation.json/log: exit1 at finite tiny-RHW quotient after
restoring the old multiplication expression. This is a rejecting arithmetic
control, separate from the three unexecuted COM controls. Both process groups
were reaped; captures remain below the shared 512KiB limit.
Admission, preservation, and remaining qualification
focused-admission.json records tool paths/hashes, manifest/input identities,
installed tools and read-only donors separately, and task source/Git/index/temp/
evidence, EXTERNAL launcher, separate Codex JSONL/growth, and 8MiB reserve.
Initial projection 29,402,768/67,108,864 bytes; host free after projected growth
5,953,718,640 >= 2,982,150,144. Node runs in place, old-space256MiB (not an RSS
limit), CPU/wall60s, file24MiB, bounded aggregate capture with TERM/KILL and reap.
Each probe records fresh MemAvailable >=805,306,368. No dependency installs.
The original retained module remains 1,883,322 bytes,
SHA256 93f41b0fdce5494a235c789bd92f5dcf6cddb7ee16d721d0654a9f9958e7f0bb;
provenance remains 1,002 bytes,
SHA256 190a3d56230da32fcba586230ec08e6a6d96c552cc475eece9750a8e84373383.
Neither artifact was modified. Their recovery/build recipe remains the guarded
qualification donor report; Git does not back up the ignored module bytes.
Native validation, canonical/diagnostic compilation, corrected COM pixels/depth, allocator reuse, queue lifetime, final release and all three original COM controls remain UNQUALIFIED/UNEXECUTED for this candidate. The helper introduces calls in the hot loop; native inlining/performance is also unmeasured. A fresh independent task must review the one-path delta, explicitly update that source pin, admit a new guarded diagnostic build and run the complete unchanged fixture plus its three controls. The original retained module cannot contain this repair and must not be used to claim it passes. No native execution was indispensable for this finding.
No workers, builds, WebAssembly constructors, arenas, COM execution, guest, Boat/browser/GPU, shared integration, main mutation, merge, deployment, cleanup, or intervention in other processes. Shadow Man, RichEdit, Claude B&W2 and laptop claims preserved. No box assigned/contacted: ID/state/expiry N/A; lifecycle and any future shutdown remain coordinator-owned. Stop after publication; coordinator assigns independent acceptance and any native retest.