I don't have a source tree handy but iirc we treaty 2^31 values as being in the past and 2^31 values as being in the future.
I've been trying to think how to protect better against the recent vacuum freeze bug. If someone ruins vacuum freeze now and has any wrapped values they'll destroy their possibly recoverable data.
It seems to me we shouldn't really need 2^31 values in the future. If vacuum or hot pruning comes across an xid far in the future, say a million xids further into the future than the most recent transaction, then it should signal an error rather than just treat it as being in the future.
--
greg