So regarding the trait-link, I would be ok to move it to widgets.
The first modification that I wanted to do is one of the following:
Only allow only for one target HasTrait, and rollback to the previous value in case of TraitError when setting the link.
Or, keep the multiple targets HasTrait but make the following change: in case of a TraitError when setting the link, don't stop setting links for the following targets in the list. Otherwise you end up with half the links set up...
The first option is not backward compatible but simplifies things.