D236 pass 10: refute "nondeterministic instantiation", it's room occlusion

Per the rule-2-clarification pass-10 brief in findings.md, applied the new
three-bucket taxonomy to D280's leading theory that the 0x0c184b50
discrete-tree-card render-mode class instantiates inconsistently across
runs of the deterministic -level_36 boot (~4 tris vs ~720).

Added a small env-gated diagnostic (GE_D236RM, port/fast3d/gfx_pc.cpp
gfx_sp_tri1) counting that class's per-frame triangle count, heartbeat-
logged every 300 frames even at zero. Three independent -level_36
launches (one with sustained GE_INPUTSCRIPT camera rotation) produced
byte-identical per-frame counts, falsifying the "run-to-run dependent"
premise outright. Cross-referencing with the existing GE_D104 room-census
probe in the same run shows the count drops to zero at the exact frame
the player's curRoom transitions from 12 (17-20 rooms drawn, an outdoor
vista) to 18 (1-5 rooms, an enclosed indoor space) via the boot's own
scripted intro camera — ordinary portal/room occlusion, not a bug. None
of buckets (a)/(b)/(c) apply; no src/game or port/ fix made or warranted.

The original "wall not discrete sprites" symptom is untouched by this
pass — narrowed the real next step to getting a camera into room 12
facing the tree line directly, in docs/dev/findings.md.

Added the generalisable "deterministic boot flag != deterministic camera
path" quirk to porting-notes.md §E. findings-index.csv regenerated.
This commit is contained in:
James Dansereau committed 2026-09-16 17:58:01 -04:00
1 parent 1c60da6f46
commit 23da815dda
5 files changed
+114 -4

No files matched your search

+16
View File
@@ -1129,6 +1129,22 @@ made mutually acceptable (dual validation / one-time migration).
fixed-tick mode was assessed not-narrow (redesigns retrace/tick
semantics); design is in §F D117 if someone picks it up, after which
`framediff.py --exact` becomes usable.
- **A "deterministic boot" flag (`-level_XX`) pins the level and starting
state, but NOT the camera's later path through it — don't assume two
captures from the same boot flag are comparing the same view.** D236
pass 10 (M-155) found a render-mode-class triangle count that looked
"run-to-run dependent" across separate captures using the same
`-level_36` boot; three independent re-launches (including one with a
full `GE_INPUTSCRIPT` sustained-rotation sweep) actually produced
byte-identical, fully deterministic per-frame counts — the real
variance was the boot's own scripted intro camera walking from an
outdoor room into an indoor one at a fixed frame, and the two captures
being compared had sampled before vs. after that walk (or against an
unrelated live/free-play session entirely). **Before concluding a
count/state is nondeterministic across runs of the same boot flag,
correlate against a room/position probe (`GE_D104`-style) in the SAME
run** to rule out "the camera simply isn't where you assumed it was
yet" before chasing an instantiation or streaming bug.
- **Anything blocking on the scheduler thread throttles the whole sim**
(D186, cf. D134). The gfx task runs synchronously on `src/sched.c`'s
thread, and that same thread delivers VI-retrace events; any `sysSleep` /