Previously if a promotion could require 2 promotions from branch A but 1 branch B and the branch B also lead to an earlier promotion from branch A, it erroneously consider that a loop. Solved by copying the logic from the ruleset Validator (going child up to parent, rather than parent to child and passing in the hashset rather than using a global one)
* Defensive Tileset loading
* Deleting a mod should do the same cleanup as downloading a new one
* Extensive RulesetValidator checks on Tileset mod integrity
* Fix Mod Manager not displaying some freshly downloaded mods immediately
(and scroll it into view)
* Mod Manager DL-from-URL stays open after invalid link
* Minor lint
* Another lint on an unfortunate lint
* IHasUniques without INamed removed - treat ModOptions same as GlobalUniques in that respect
* Unify uniqueObjects and uniqueMap initialization
* Move and split RulesetValidator
* Split Ruleset file to make it pure single-class
* Minor linting
* Treat remaining untyped Uniques in default rulesets, make unit test catch them
* Change untyped filtering Uniques check to Validation by inclusion in GlobalUniques instead of UniqueType.AircraftMarker
* Wiki for untyped filtering Uniques
* Re-include the "Who knows" of Future Tech on the Tech picker
* Added tests to ensure that resources from buildings behave as expected
* More tests suggested by @SeventhM
* Caught an edge case - if you pillage your own tile improvement, your resources would not have updated!
* Actually every time an improvement changes you could have a resource change
* Update resources eon every improvement change because they could be providing resources via uniques
* Reduce conversion of local mod folder names to treat only ending spaces/dashes
* Wiki entry for GlobalUniques
* Missing originRuleset coverage
* Nicer RulesetValidator messages when name or originRuleset are missing
* Clean up some differences between units that can move on water, water units, and land units
* Strangely no evidence this actually comes up?
* refernce the cache in more places
* Decided to change this back to match expected results
* Remove unnecessary parenthesis
* Overhaul NUKE code to behave closer to original
* Separate garrison protection of Bomb Shelter to its own Unique
* Reduce code duplication: getNukeBlastRadius
* Disallow nuking unknown civs
* Don't show Nuke attack table when the Nuke has just been selected
* World map display of nuke blast radius and friendly fire
* Reduce conversion of local mod folder names to treat only ending spaces/dashes
* Wiki entry for GlobalUniques
* Missing originRuleset coverage
* Nicer RulesetValidator messages when name or originRuleset are missing
* Allow a few working UniqueType-UniqueTarget combos in RulesetValidator
* RulesetValidator checks GlobalUniques
* Alternate Settlers and Workers recognized via Unique - same rules in RulesetValidator and GameStarter, wiki clarification