Hi Robert.
I am a fan of your design metrics (linux.ime.usp.br/~joaomm/mac499/arquivos/referenc…) and the "Zone of Pain" term you described in "Clean Architecture". It changed my vision on what is maintainable code drastically.
However, originally you outlined those concepts for a set of classes, calling it "class categories". My question is: why can't the same metrics be applied to classes and interfaces per-se. They are a subject of reuse in OO code as well, and stable-concrete classes will inevitably be the source of pain and regressions, when the time to change something comes.
Also, what do you think about DI frameworks, which do injections by means of annotations (like Spring's 'Autowired' or CDI's 'Inject')? Aren't they break stable dependencies/abstractions principles, making implicit direct dependencies between our components?