v4: Only permit integration through API methods exposed through nunit.engine.api
We've faced various issues in v3 with it being unclear which public exposed methods are intended to be supported as interfaces. This leads to unexpected breaking changes for runners maintainers, and also lost time in trying to support interactivity with the engine through a range of unsupported methods.
For v4, I suggest we make only the methods in nunit.engine.api.dll publicly accessible. To do this, we would make methods internal in the other assemblies, and use InternalsVisibleTo to allow interaction between different assemblies.
Minor thing: I'd add "or any other API assemblies we decide we need."
We've made the basic decision: only API methods are guaranteed to remain stable. It remains to make current public methods internal or otherwise inaccessible to the greatest extent possible.