I'm somewhat surprised they wrote it, actually, considering that Magic has a very well-defined set of rules. I bet what happened here is that their Card object has a GetCmc() method, and they just implemented that to always count X as zero... which I guess could easily happen to most of us if we tried to write this code from memory. But if you look at the comprehensive rules, there is a whole block of rules about how to calculate CMC for every eventuality, and it very clearly says
202.3e When calculating the converted mana cost of an object with an {X} in its mana cost, X is treated as 0 while the object is not on the stack, and X is treated as the number chosen for it while the object is on the stack.
You would think for a product this big that has to really get every edge case right they would basically just translate the comprehensive rules into code 1-to-1 for every game mechanic thing they implement (and ideally have an L4 judge with ...