9aa9bc0db0
The least-squares 3x3 that mapped the develop onto the camera's JPEG won on luminance, whose variance is ~80x the chroma's, so it paid for its match by crushing the R-G axis: 11.6 -> 4.6 standard deviations, against 8.3 in the camera's own preview and 12.3 in its JPEG. That is the olive cast -- the sky and the rice both shifted yellow-green. The colour chain was never at fault: camera_mul x rgb_cam already agrees with LibRaw to the digit, and the app's fit is bit-identical to a numpy reference of the same problem, which is how the 3x3 was cleared. Fit only the per-channel tone curve now. R-G comes back to 8.6 (900px) and 10.5 (full), and B/G lands on the preview's 0.841 to three places.