I think this is a consequence of how traits are accessed:
Scene.active.getTrait(CanvasScript);
You can see that each trait is accessed only by its class, so if you have multiple traits with the same class then only the first of them will be accessed in all the logic nodes. This API was probably made with only one trait type per object in mind, which – if you think about all other traits than canvases – is almost always the case.
But every trait has a name, so that could be used instead (however it’s probably not unique yet). I’m not exactly sure why the current approach was chosen (maybe the name is for debugging only), but I think there should be a way around this. It’s simply a limitation right now.
Or, there could be a way to get all traits of a type in an array. It might be useful as well and every approach has its pros and cons.