Totally agree with your view on what makes abstraction worthwhile.
A one-to-two level deep inheritance or composition is most ideal since it doesn't suffer from Chinese Whispers effect. I often refer to the change as an identity corruption of code, as keeping the identity of a function/class true to its origin would keep it readable and maintainable.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.