I came back to this late, but gameplay tags aren’t inherently data driven - you can define them statically from C++, and I left a link to how to do that in my previous post.
See the UE_DEFINE_GAMEPLAY_TAG series of macros.
You also can’t restrict C++ itself from assigning a wrong gameplay tag, but you can certainly force the editor to via the Categories meta specifier - All UPROPERTY Specifiers · ben🌱ui