The specification is correct here.
An appropriate implementation would start a search, and then terminate it once a checkmate has been found in
x full moves, or
I believe this should say "search for mate in x plies", as plies are used in most of the protocol.
This is not the case.
The way that mate scores are handled is one of the quirks of the UCI Protocol. As it happens, using full moves to describe mates is consistent with the rest of the protocol.
For example, here is the section which describes how scores should be reported:
* cp <x>
the score from the engine's point of view in centipawns.
* mate <y>
mate in y moves, not plies.
If the engine is getting mated use negative values for y.
Here, the mate scores must also be reported in full moves, just like the requirement for
go mate <x>.
You are, however, right to find this unusual, as most chess engines do represent mate scores in plies internally.