4.3 Read-side reconciliation
A file can carry several color signals at once — a colorInteropID, a CICP tuple, chromaticities, an ICC profile, gamma tags — and they can disagree. Today each reader improvises. The design replaces that with one centrally implemented heuristic: a priority list, checked in order, that adjudicates all signals in one place. A colorInteropID in a format that officially supports it (OpenEXR) always wins; CICP is read as display-referred by default; and when no signal survives the list, the result is no identity claim — never a guess.
Centralizing the list is what makes the rest of the system composable: format readers keep their ramp geometry (how to extract each signal from each container) but stop making identity decisions. In the demo, ColorConfig.resolve(spec) walks the list over an ImageSpec’s attributes and returns both the verdict and the evidence that produced it.