CodeOrigin
Who put each compile-classpath jar there, for the access-widen overlay to shard by.
User space (mods, plugins, the libraries they carry, and the dev classes mcp.dev.classes names) 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.