splitRoots

private fun splitRoots(widened: List<File>, jarFs: VirtualFileSystem): Pair<List<Path>, List<VirtualFile>>

Archives opened here, everything else left as a plain root. A binary root is read back by dispatching on endsWith("jar"), so an archive named otherwise — nested-jar extraction leaves *.jar.tmp and friends — would resolve as one opaque file with none of its classes visible. An eval is unaffected: the compiler indexes the same list its own way.

Opening every archive rather than only the odd-named ones costs nothing — both halves are concatenated into one list downstream. What does matter is identity: scope membership is a set lookup, and the jar FS caches per path spelling, so a fresh FS or a system-dependent name yields a second, unfindable instance.