Ok, got all your updates to the dyson code, and to your utility functions. Do you want me to include all the other changes in the updated nanocaust.tar ? You'd said previously that the new code wasn't ready yet so just wanted to make sure.
The LongRangePlanning thing was, I think, because I added default (mostly empty) implementations of that and other methods to SpecialFaction_Base and had the various factions inherit from that instead of just implementing ISpecialFactionImplementation directly. This didn't prevent you from declaring methods of the same name without the "override" keyword, but it made those not get called because as far as the interface was concerned, your parent class had already taken care of it.
Anyway, after I added override to that method it was getting called.
On the visualization race condition, bear in mind that the vis code and per-sim-step are not on the same thread, and so the vis code should avoid complex analyses of the gamestate. It could be changing at the same moment. For that reason I try to stick to objects that I know will be there (the planet list does not gain or lose members during the vis code, during the game) and to do atomic reads (checking an int field may return state that becomes stale before you use it, but it won't throw an exception, whereas looping over a potentially-changing list can lead to bounds exceptions).
I don't know exactly how you were checking your nanocaust state in there, but it needn't be fundamentally more complex than checking a bool or int on a Planet object, because you can store it in the external data. That said, having a concept of "Faction X has influence over planet Y, despite not owning the controller" is broadly useful, so I've added it. As an example when 0.602 is out, see how the Dyson claims influence over its home planet (there's no code for de-influencing it if the dyson somehow dies, that would need to be handled manually somehow). And notice how the display code sees that influence and uses the Dyson's color instead of the controller's color.