A second sensor is not a second dataset

The calibration-free solve reads each colour channel as one LED direction — dIk/Iref ≈ gxcos θk + gysin θk. So a channel permutation does not tint an image, it rotates the whole recovered gradient field.

Sparsh's frames reach us with R and B exchanged. It was found by scoring the depth stage on its own: its two reconstructions of the same contact correlated at −0.13, against 0.69–0.83 on every other dataset, and both rendered a round sphere press wrongly in orthogonal directions.

Measured, not searched

For a sphere the surface gradient points radially outward, so the dipole direction of each channel's difference is that channel's LED azimuth. Thirty sphere presses per sensor:

rest hue RGB
our Mini172.1°259.2°5.1°51.1°
Sparsh, as-is42.1°75.7°4.3°259.8°
Sparsh, R↔B197.9°259.8°4.3°75.7°

Swapped, R and G land within 1° of ours. A different gel tint cannot align LED azimuths; a channel-order difference does exactly that.

Sparsh channel fix
The same frames before and after, at every stage. Sphere axis ratio 3.62 → 1.53 (1.0 is a circle), agreement with the LUT −0.125 → +0.920, flat-gel leak 0.0272 → 0.0071. Across the dataset, agreement −0.082 → +0.895.

Why the force numbers never showed it

Force ρ on Sparsh was 0.909 before the fix and 0.894 after; the LUT gained 0.822 → 0.894. Contact size tracks force whatever the shape does, so a ρ cannot see a geometry this wrong. That is the argument for scoring image→depth separately from depth→newtons.

A correction of ours: a six-permutation search first put Sparsh's best at (90,330,210) and that was written up as “LED wiring differs per sensor”. It is the same fact said uselessly — (90,330,210) is (210,330,90) with R and B exchanged. The azimuths never differed.