It looks like this blames to D19126, which added some more complex constraint logic but overlooked "range" constraints, which are handled separately.
- Added a custom "date" field to Maniphest with "search": true.
- Executed a range query against the field.
- Before: Warnings about undefined indexes in the log.
- After: No such warnings.
This is where the other type of constraint gets built, with these values.
This is where we unpack these values from all constraint types unconditionally, then only use them for constraint types which will actually have legal values.
A more tailored patch would be to do this unpacking only after we find a constraint type which we'll examine them for, but it seems reasonable that all constraints should have the same fields available.