Card CI-T1 - written 2026-09-26 17:59:18 -0700 (clock-read) BEFORE tracing. Wave 4. DIAGNOSTIC readout (stock-equal), zero credit.
Target: parked _player_effect_update_camera_impulse (752 padded / 738 meaningful), lane HEAD 262dcfa6
(player_effects.c byte-identical to my wave-2 copy). Differences vs January (alndiff, 267 = 267 insns): jitter
cross product FLD/FMUL leaf choice at +0x1c4..0x1cd and +0x1e0/0x1e3; left.direction dot (+0x29c) and
facing.direction dot (+0x2b5) ours k,j,i vs January i,k,j.
Trace: sorttrace2.py (PRE/S2 0x10710ed9, S3 0x1076dc5e; ungated, pre-MARK segment k-1), then basechk.py on the
decisive S2 compares for each dot to read the base temps' slot IDs.
Prediction (from x87-noncircular 7.1/8.6): the dot products' decisive keys are facing/left leaf (direct, ~0x22xx) x
indirect leaf through a class-3 pointer temp (key16 0x8008, ID & 3 = 2) or through the direction parameter
(0x6008); January needs the two temps' IDs shifted by s != 0 (mod 4). The jitter cross-product difference is an
L-SWAP / leaf-key order in the MUL lists of effect->direction x global_up3d (p 0.6 that its deciding term is also a
temp-base ID residue).

OUTCOME (appended 2026-09-26 18:01:47 -0700): stock-equal True (fn 44 of 45). Decisive S2 re-sorts (second round):
- facing.direction dot, CMP hits 1696-1698: k 0103c577 = [*(t530)+0 key 0x18008, facing.k 0x122a0], j 0103c4f7 =
  [*(t534)+0 0x18008, facing.j 0x12260], i 0103a3b7 = [*(direction param)+0 0x6008.., facing.i]. left.direction dot,
  hits 1600-1602: k 0103c677, j 0103c5f7, i 0103a3f7 (same t530/t534). Both temps class 3, ID & 3 = 2.
- Jitter cross product (a = effect->direction, b = *global_up3d), S2 hits 1293/1294/1323/1324/1349/1350; leaves are
  all *(base)+0 with key16 = 8 + (base hash << 8): a.i base = parameter effect (class 5 id 5) 0xa008; a.j t442 (&3=2)
  0x8008; a.k t444 (&3=0) 0x0008; b.i global _global_up3d (class 7 id 32) 0x0008; b.j t613 (&3=1) 0x4008; b.k t632
  (&3=0) 0x0008. FLD = sorted-first leaf. January differs exactly in a.i*b.j (needs b.j > 0xa008 -> class 3) and
  a.j*b.k (needs b.k > a.j), and must keep the other four.
Prediction held (dots = t530/t534 residue; cross product = temp-base residues too).
DERIVED PREDICTION (all six temps shifted together by s): January needs s == 2 (mod 4) - classes become a.j 0, a.k 2,
b.j 3, b.k 2 (cross product = January on all six products) and t530/t534 -> 0 (both dots i,k,j). s = 1 or 3 fixes the
dots but NOT the cross product (s=1: b.j 2 < 0xa008; s=3: b.j 0). A shift starting after t444 cannot work (b.k = a.j
tie keeps a.j). So: January has 2 (mod 4) more (or fewer) value-numbered expressions BEFORE effect->direction.j's
address temp (t442).
