CodeOrigin
Who put each compile-classpath jar there, for the access-widen overlay to shard by.
User space (mods, plugins, and the libraries they carry) gets one shard per jar, so updating one rebuilds one. Everything else — the loader, its dependencies, the server libraries, our own jar-in-jar, mc-symbols — is the environment: rarely touched, and when it is touched every shard's bytes change anyway, so it is one merged shard whose staleness forces a full rebuild.
Filled by the collectors as they resolve; read by widenClasspath. Must stay in ...repl, not repl.impl: the collectors are game-loader owned and the overlay runs on the masking loader.
Properties
jar -> the loader's own id for it. Absent for anything the loaders don't name; the overlay falls back to a type-set key, which is stable across a version bump the same way an id is.
Our own jar. Located off Constants — root package, so the masking loader delegates and both sides answer with one value — and through JarLocator, since a Forge union URI is not a file: one.
Jars a user installs and updates. self is deliberately NOT one: the widen logic ships in it, so a change there invalidates every shard, which is exactly what the environment shard already does.
Functions
A cache file named after id. Prefix sanitized and capped — a JPMS module name is neither [a-z0-9_-] nor bounded. Hash over the ORIGINAL case: it is what keeps MixinExtras and mixinextras two files on a case-insensitive filesystem.