1. The upgrade module path. This path contains compiled definitions of modules that will be observed in preference to the compiled definitions of any *upgradeable modules* that are present in (3) and (4). See the Java SE Platform for the designation of which standard modules are upgradeable.
The doc for java.lang.module says "See the Java SE Platform" but I guess that just means checking the javadoc for each module to check whether it's upgradeable. It's surprising to see runtime modules tied together to the extent of recording hashes of contents of reverse dependencies, but as you say few developers will need to care. This does mean you can never "drop in" an independently built module into a jdk the way hotspot developers do with libjvm.so. But that's OK - --patch-module and the ability to build from source are sufficient.