The convention plugin's jvmDowngrader mode forces a project wide Java 25
toolchain and Scala 2.11.5 cannot run above Java 8, so compileScala fails
outright. forceToolchainVersion cannot bridge it because the mode refuses a
toolchain below its multi release maximum and that list refuses entries below
9. Also note why the modern helpers cannot simply move to src/main/java.
Upload functional test reports, JUnit XML and server logs on every run so a
CI failure has something to read beyond aggregate counts. Print unit and
functional test summaries, naming each failed functional test.
Repackage the JUnit stack into the test mod jar without module descriptors so
FML stops logging a LoaderException per jar while scanning the classpath, and
silence the two ERROR lines that passing tests drive on purpose.
Refresh the handoff counts and record which migration documents are deleted
when the port closes.
The notes told consumers what breaks on rebuild but not whether the
migration they are being asked to make is final. Without that, the
reasonable reading is that adopting the Java surface now buys a second
migration when the Scala runtime is removed later.
State the guarantee: the removal release drops the Scala-shaped entry
points and keeps their Java siblings, so one migration to the documented
surface is the whole cost. Name the one way to pay it twice, which is
aiming at a raw dev-jar class such as scalatraits.TRedstoneTile instead
of the stable IRedstoneTile capability interface. That is the mistake a
failing rebuild invites, and it fails at runtime in between.
Record two limits honestly: the guarantee covers the documented and
audited surface, which is why removal waits on adoption evidence rather
than source patches, and the source-layout move out of src/main/scala
changes no class, package or descriptor and so is invisible.