Hi!
In my view, FullTransactionId type was implemented without considering 64 bit wraparound. Which seems to be unlikely to happen. Then on that basis xid8 type was created. Details of that particular implementation infiltrated into documentation and became sort of normal. In my opinion, semantically, both of these types should be treated as similar types although with different sizes. Thus, again, xid and xid8 types should be a ring and have no min and max functions. At least, in a sort of "conventional" way when minimal value is minimal in a mathematical way and so for maximum.
For example, max may be implemented as max(0, 42, 18446744073709551615) = 42, which is a bit weird.
--
Best regards,
Maxim Orlov.