I have basically 0 familiarity with MiMa, but the following looks odd:
private[foo] classes and everything in them are skipped. They are public in bytecode, so MiMa was checking definitions no Scala client outside the package can reach.
It feels like one of the uses of MiMa would be to ensure compatibility with other JVM languages, and in that case it seems weird to skip things just because “no Scala client […] can reach”
It’s possible I’m completely off-base with this, if so, feel free to ignore
No, compatibility with other languages that disregard Scala’s visibility rules is not considered a desirable goal.
However, at some point MiMa tried to play both games at the same time:
Allow transitioning from public to private[C], because it’s binary compatible, so existing built code would still link.
And Allow removal/change of anything private[C], because you know, it’s private so nobody can access it.
That of course results in transitivity issues. v1.1 has public def foo(): Int, v1.2 has private[C] def foo(): Int, and v1.3 has nothing. MiMa doesn’t complain, but it’s all broken regardless.