I just noticed that color spaces do not all document the ranges of expected values and are somewhat inconsistent, e.g., XYZColor seems to assume values scaled from 0...1 and LChab assumes values from 0...100 (for L and C). The current implementation of the CAMs then again expects XYZ values from 0...100.
So at the very least this should be documented everywhere, and then maybe things should be made consistent in the future (but this is of course a backwards compatibility problem).
I will definitely adjust the CAMs, so they don't produce unexpected behavior when used with the values from XYZColor objects.