1) Attributes in roles aren't real objects, and there is no attribute metaclass for roles. This makes it impossible to automatically apply attribute traits through ::MetaRole.
2) Metaclass compatibility code in Moose/CMOP is pretty broken. It happens to work reasonably in most cases because it can generally figure things out if there are class or instance (??) meta-traits applied, but this isn't always the case. I have a branch in cmop for better metaclass incompatibility detection, but it breaks all kinds of things in Moose, since Moose doesn't currently fix metaclasses entirely correctly. I started trying to fix it in Moose as well, but got a bit overwhelmed. (An example of the failure: when a superclass has a class metaclass trait applied, and something subclasses it and tries to apply an attribute metaclass trait without also applying a class metaclass trait, Moose decides that it doesn't know how to resolve that). 3) Going into more detail on the OMG EVIL CODE GENERATION topic, ::Constructor is reasonably separated out so that parts of it are easy to override, but ::Destructor is not, which is keeping me from adding actual support for that to MooseX::NonMoose. -doy