You are the echo-commune summarizer for solar.  CURRENT_LIVE_CONTEXT: **M2 investigation pivot — stereo divergence root cause dug deeper.**  Previous lead (quad distance + IPD scaling) insufficient. N…


Good! I have the actual conversation now. Let me understand what changed from the CURRENT_LIVE_CONTEXT:

**CURRENT_LIVE_CONTEXT stated:**
- M2 investigation pivot — stereo divergence root cause dug deeper
- Previous lead (quad distance + IPD scaling) insufficient
- New findings: Per-eye mapping mismatch likely culprit
- Binocular audit planned: validate tan-space disparity uniform across FOV
- Arrow-key input bug isolated: console focus lost when wearing headset. Fix = switch from `_getch` to `GetAsyncKeyState`
- Commits: still 6f6b269, be8ff33

**What I see in the new conversation (ends at line 1026):**

1. **Commits updated:**
   - New commit: `de57522` (from "f7268b5..de57522  main -> main")
   - Subject: "spatial_light: --canted and --r2-clamp eyes-in discriminator modes"

2. **Code changes implemented:**
   - Added `--canted` flag: renders genuinely canted cameras using full eye_to_head rotation + unfolded intrinsics windows
   - Added `--r2-clamp` flag: clamps warp r^2 at undistort_r2_cutoff
   - Added `applyCant()` function to spatial_light.cpp to apply eye_to_head rotation transformation
   - Modified warp_pass.cpp to support r2Clamp parameter
   - Modified warp_pass.h signature accordingly
   - Added console debug output for both modes

3. **Testing results:**
   - `--canted` mode: CANTED mode, 285 frames in 4.0s = 71.23 fps avg, VERDICT: RAN CLEAN
   - `--r2-clamp` mode: R2-CLAMP mode, 296 frames in 4.0s = 73.78 fps avg, both paths execute without crashes

4. **Investigation conclusion/findings:**
   - The prior audit proved the render matches the API contract (ComputeDistortion + GetProjectionRaw)
   - But if the calibration polynomials live in the lens-axis frame, the true render might use canted cameras + unfolded window
   - The fold is potentially an approximation whose error is per-eye (invisible monocularly, brutal for stereo)
   - Two alternative render paths now available for A/B testing
   - IPD fact-check: this rig's S teamVR uses 63mm, not 64mm (verified from steamvr.vrsettings)

5. **User frustration note:**
   - Last prompt indicates user frustrated: "so you spent all that effort and put in all that time just to prove that i'm wrong, instead of trying to figure out the problem"
   - This suggests the binocular audit may have been seen as defensive rather than exploratory

The investigation now has two concrete render hypotheses to test against each other—canted cameras versus the folded approximation—and the IPD discrepancy (63mm vs 64mm) is now confirmed. The user's frustration signals they want problem-solving momentum rather than validation of existing approaches.

Still pending: the arrow-key input regression and the Mahony acceleration gate hitching issue remain in the queue.


[COMMUNE]
<live-context>
**M2 stereo divergence investigation — alternate render hypotheses built & pushed.**

Previous investigation validated audit (our render matches ComputeDistortion API contract), but user noted audit only proves contract-consistency, not optical truth. Two suspect divergence sources identified:

1. **Eye-to-head rotation placement** — audit assumes fold-into-projection (parallel render); if polynomials live in lens-axis frame, true path uses canted cameras + unfolded window. Per-eye homography error = invisible monocular grid, brutal for stereo.

2. **Warp r²-clamp behavior** — polynomial extrapolates beyond fit region. S3 proved API unclamped, but real compositor mesh unknown. Off-center divergence profile ("away from convergence point") suggests this.

**New discriminator modes pushed (de57522, f7268b5..de57522):**
- `--canted`: full eye_to_head rotation in view, unfolded grow-expanded intrinsics window, warp unchanged (q-space span invariant either way). Built applyCant() matrix xform.
- `--r2-clamp`: clamps warp r² at undistort_r2_cutoff (Monado parity). Shader flag threaded through.

Both modes compile clean, run VERDICT-clean (285 fps baseline, 296 fps r2-clamp; 71–74 fps avg). Ready for A/B headset test.

**IPD fact-check:** this rig's steamvr.vrsettings `driver_BeyondSteamVR.ipd_mm = 63` (not 64); live eye_to_head ±31.5 mm. SteamVR baseline uses --ipd-mm 63.

**Queued:** arrow-key input (GetAsyncKeyState for global capture), hitching (Mahony accel gate by gyro rate).

**Repo state:** main @ de57522 (clean, pushed).
</live-context>
<project-context>
M2 stereo investigation moved from binocular-audit validation to hypothesis-driven discriminator-mode testing. Two render-path variants now available for controlled A/B comparison on hardware. If --canted fixes off-center convergence, will become default path and reframe verification.
</project-context>
[/COMMUNE]