Technicaly there shouldnt be a main, since that is device dependant. Which main is taken is decided at playback level.
Lets say you only have a venus2000 like machine, but the script has linear, twist, and vibration. Linear makes no sense in this case. So it shouldnt default to main. Since this one is speed dependant, it gets a script that is usualy more similar to vibration scripts.
So you can choose to map this to vibration or linear yourself. If it would automaticly take main, it might do the wrong thing. Otherwise it doesnt do anything unless explicitly chosen. This is important for safety reasons since unexpected behaviour is dangerous even if the device itself should already have taken care of safety.
Main is only needed if the format is backward compatible (ie. most of the scriptplayers can use this file without requiring any update). But if the script cannot be understood by most older programs, main must be excluded from the standard. If targeting a legacy device the playback tool does the mapping for you.
Dont define a main in a standard that doesnt need one, especialy if it can result in counter productive behaviour. Quick conversions of old scripts to this format is undesired! If its a legacy script, keep the old format.
So in this case, linear/linear1 is what should be used instead. That does define which type of device is targeted. Dont promote a main axis when a format is ment for multi axis at all.
So i would suggest that the moment any of the channels are used, only the channels are used. So whichever legacy main channel there was, its effectively discarded. However, to avoid duplicate data, we can still use it if we apply a sort of mapping system in the script.
So to use your example script, i propose this addition:
},
"actions":[{"at":0,"pos":50}],
"channels": {
"linear": {
"channel":"main"
},
"random_text": {
"actions":[{"at":0,"pos":50}]
},
This then allows all channels to load in another channel, and while it might be ugly that 2 channels perform the same thing, It sometimes still works fine.
Or as alternative, we define the target of the main axis:
"duration": 180.0017,
"durationTime": "00:03:00.017"
},
"actions":[{"at":0,"pos":50}],
"channel": "linear"
"channels": {
"random_text": {
Which then at least prevents someone from mapping all channels to just a single one (which for multi axis is otherwise ugly.