Might be whatever, app bug or might be that even monitor have disabled DDC/CI (maybe your monitor have this to enable/disable maybe not)
You have also, this ddcutil:
https://packages.debian.org/sid/ddcutil
Idea there is because you said:
My monitor unfortunately doesn't have saturation control so that's out.
You might still could control color saturation actually, via these tools if let say is just not exposed on your monitor OSD, etc...
Or you might check on Windows this via softmccs:
https://www.entechtaiwan.com/lib/softmccs.shtm
Whatever, don't believe to these tools 100% on what they are reporting
i don't have classic 1 way rgb color hue/saturation, but i have '6 axis color saturation/hue control' via OSD but still here they are reporting as i don't have it
~$: ddcutil getvcp color
VCP code 0x0b (Color temperature increment ): 100 degree(s) Kelvin
VCP code 0x0c (Color temperature request ): 3000 + 35 * (feature 0B color temp increment) degree(s) Kelvin
VCP code 0x10 (Brightness ): current value = 34, max value = 100
VCP code 0x11 (Flesh tone enhancement ): mh=0x00, ml=0x00, sh=0x00, sl=0x00
VCP code 0x12 (Contrast ): current value = 98, max value = 100
VCP code 0x13 (Backlight control ): mh=0x00, ml=0x00, sh=0x00, sl=0x00
VCP code 0x14 (Select color preset ): User 1 (sl=0x0b)
VCP code 0x16 (Video gain: Red ): current value = 34, max value = 100
VCP code 0x17 (User color vision compensation): current value = 0, max value = 0
VCP code 0x18 (Video gain: Green ): current value = 34, max value = 100
VCP code 0x1a (Video gain: Blue ): current value = 25, max value = 100
VCP code 0x1f (Auto color setup ): Auto setup not active (sl=0x00)
VCP code 0x2e (Gray scale expansion ): mh=0x00, ml=0x00, sh=0x00, sl=0x00
VCP code 0x59 (6 axis saturation: Red ): current value = 0, max value = 0
VCP code 0x5a (6 axis saturation: Yellow ): current value = 0, max value = 0
VCP code 0x5b (6 axis saturation: Green ): current value = 0, max value = 0
VCP code 0x5c (6 axis saturation: Cyan ): current value = 0, max value = 0
VCP code 0x5d (6 axis saturation: Blue ): current value = 0, max value = 0
VCP code 0x5e (6 axis saturation: Magenta ): current value = 0, max value = 0
VCP code 0x6b (Backlight Level: White ): current value = 0, max value = 0
VCP code 0x6c (Video black level: Red ): current value = 100, max value = 100
VCP code 0x6d (Backlight Level: Red ): current value = 0, max value = 0
VCP code 0x6e (Video black level: Green ): current value = 100, max value = 100
VCP code 0x6f (Backlight Level: Green ): current value = 0, max value = 0
VCP code 0x70 (Video black level: Blue ): current value = 100, max value = 100
VCP code 0x71 (Backlight Level: Blue ): current value = 0, max value = 0
VCP code 0x72 (Gamma ): SL: 0x00 , SH: 0x00
VCP code 0x8a (Color Saturation ): current value = 0, max value = 0
VCP code 0x90 (Hue ): current value = 0, max value = 0
VCP code 0x9b (6 axis hue control: Red ): current value = 0, max value = 0
VCP code 0x9c (6 axis hue control: Yellow ): current value = 0, max value = 0
VCP code 0x9d (6 axis hue control: Green ): current value = 0, max value = 0
VCP code 0x9e (6 axis hue control: Cyan ): current value = 0, max value = 0
VCP code 0x9f (6 axis hue control: Blue ): current value = 0, max value = 0
VCP code 0xa0 (6 axis hue control: Magenta ): current value = 0, max value = 0