Ugh, I'm getting very close to scrapping the way synchronization works and starting over.
I've been distracted lately, so let me make sure sure I understand what is happening here...
Starting with all tracks in Reset, and the host transport running.
You want the very first track recorded to use host sync since there is nothing else to sync with. This track immediately becomes the TrackSyncMaster. All other tracks then sync with the TSM rather than the host.
If that's the case, then then FancyRecord script I posted before is more complicated than it needs to be. It doesn't need to look for tracks that are using host sync, it just needs to see if there is a TrackSyncMaster or not. If there is a TSM, use it, if not fall back to Host sync.
#name LessFancyRecord
if trackSyncMaster != 0
syncSource=:track
else
syncSource=:host
Record
Starting in build 45, there is a better way to do this. You can use parameter overrides in the function call that apply only to one use of Record without changing the parameter globally for other tracks.
if trackSyncMaster != 0
Record(syncSource=:track)
else
Record(syncSource=:host)
But this is just a simpler way to get the recording started, it won't solve the problem of the extra host bar wait.
Approximately where are you in time when you press the button to run the script? If it is very close to the edge of the host bar, then even if you're just a millisecond past the bar start, you'll still wait a full bar. If you're running the script at least a beat ahead of the bar, then there shouldn't be a problem.
Maybe it was related to the script jiggling the syncSource before recording. Instead of all tracks defaulting to syncSource=Host, have them all default to syncSource=Track. It shouldn't matter because either of the scripts above should override what was in the session. But it would be good to rule that out.