According to the reference doc, colors are essentially clipped to the boundary of the gamut. There is an example on page 109 of the API doc pdf file. In the doc search for “gamut mapping”.
If a color lies outside the gamut, the colorfulness (“C” of the LCh) is reduced such that the new C lies right on the gamut boundary. This is done using constant h (hue angle), and L is also unchanged. Since L is unchanged, I guess you can think of it as a slice through the LCh cylinder space perpendicular to the L axis. So in that slice, each point on the boundary of the gamut is described by rectangular coordinates ‘a’ and ‘b’. In that slice, as the hue angle (h) changes, the gamut boundary has corresponding a and b coordinates defined and the max C for any given h angle is the hypotenuse of the triangle formed by a and b for that particular h.
So mapping is achieved by reducing C until it matches the same C value you get at the gamut boundary.
What isn’t described there is how C gets “reduced”. Do they desaturate by adding white? Some other method? Off hand I’m not sure why it would not escape the challenge we see with v6.