God-Emperor
Deity
Yes, that is the current implementation. Your suggestion to rebuild the list from scratch by looping all the cities in the game and looking for all these buildings would solve this problem. I suppose that completing a landing stage building is infrequent enough that building the list from scratch would not hurt the runtime too much; I will try that out. There is a middle approach involving detecting the destruction of a contract building and re-adding its UR to the list as available; but there is no onBuildingDestroyed callback, and faking it seems risky.
If each of the contract buildings has a different building class (I don't see how they couldn't), you don't have to loop over all the cities in python, just all the players. The CyPlayer class has a getBuildingClassCount method.