widenAccess
The ACC edit itself, shared with the members the mixin graft appends — those never pass through widenClassFile, since they are added after it. Anything not public -> public (package-private too: a snippet never shares the target's runtime package), no final removal: the REPL needs access, not inheritance.
Erasure is a MODULE-level decision, so the ownership test spans every class this compilation produced — not just the one being visited. One eval yields several classes (the snippet plus a synthetic per lambda / iterator {} body), and a member erased in its declaring class must read the same from every sibling that references it. Scoped per-class the two disagree, and the mismatch is a link-time NoSuchMethodError/NoSuchFieldError naming the snippet's own class.
The test is on the DECLARING class, climbed through the module's own superclass chain — not on the access site's owner: a snippet class extending an MC class names its inherited members through itself, and those are somebody else's declarations, neither erased here nor reachable without the bridge. Interfaces are not climbed: no instance fields there, and an owned default method still resolves through the bridge.
All-or-nothing for the same reason: a half-widened module IS that disagreement, so a single failure throws and weaveClasses's catch leaves the whole module unwidened.