Hi,
I ran into exactly this issue and I believe I might have a solution, which at the very least works in Dorico 5.1.60.2187), which I’m putting here in case anyone finds this thread in the future.
The TLDR answer is that Dorico stops rendering a track when there are no notes present in order to save resources. If you need to send transport state from a plugin, make sure that the track containing the plugin has a note in every single bar.
Basically, what I needed to do was to send the transport state (bars, beats, ticks, tempo and meter) to synchronize Dorico with another project in MaxMSP. I’ve implemented a simple VST3 plugin utilizing the JUCE AudioPlayHead class to send transport info from the host over OSC.
As Ulf mentioned, nearly all fields of the transport state are optional in the VST3 specification, and older versions of Dorico didn’t send them at all, but Dorico 5+ correctly passes current tick, tick of the start of current bar, tempo and meter and active flag (transport running) to the plugin. It does unfortunately not pass bar number.
Adding my plugin as an effect to a random track (which had some notes only in the first bar, but was silent for the remainder of the project) reproduced exactly the issue described here: it would send transport info for about 4 bars, then stop. It turns out that when there are no notes, Dorico stops the audio callback (processBlock) entirely for the given effect in order to save resources, which seems pretty reasonable in 99.9% of all cases, but turns out to be a problem here.
A pretty simple workaround is to just add a single note at the start of every bar in the track containing the VST used for synchronization, in order to force Dorico to continue the audio callback for the track. Then it’s perfectly fine to mute the entire track, the audio callback will still be present (at least as of Dorico 5.1.60.2187).