Tag naming conventions

Flexible tags have been implemented some time ago an I believe it’s time for a discussion on tag naming conventions. So far, all tags needed to be listed in beets/beets/autotag/hooks.py, but flexible tags allow to create new tags on the fly (for example get the list of performers and create a tag for each instrument). That means that it is no longer possible to have an exhaustive list of tags. That also means that potentially tags could collide/get overwritten by other parts of beets or plugins.
What are the constraints on tag names?
@adrian alread said in https://github.com/beetbox/beets/pull/3589 that tag names should not contain spaces, are there other constraints? Should they use a latin script?
How do we mark tags to not get overwritten? I propose that if a plugin creates new tags, it uses a prefix specific for the plugin, but maybe you have other ideas. Then the handling of tags and how they get overwritten is constrained to the plugin only.
Anyway, it would be worth it to specify these rules in the documentation.
What are your thoughts on this?