I'm doing some work around surface tessellations, and I decided to test against a number of random points on a surface. Come to find out, the surface domain node was broken. I've fixed that now, and the domain node now returns the minimum and maximum in U and V for a surface. Creating random points was another problem altogether! As you can see in the attached workflow image, it takes splitting apart the results of the domain operation, creating two random sequences and then a ton of mappings to get the random sequences back into UVs. It's messy.

Here's 10000 points "randomly" arrayed on a revolved surface.