This project cannot promise compatibility with an API version that has not been released. It does provide a low-risk update path: the production code has no CraftBukkit/NMS mapping, no exact server-version implementation switch, pinned dependencies, strict warning-free compilation, and final-JAR validation.
-
Keep the exact build
005rollback JAR and its checksum unchanged until a newer minimalist build completes native-client certification. -
Create a new disposable branch from the last certified source commit.
-
Set the exact released
paperApiVersionand itspaperTargetingradle.properties. Treat that file as the release source of truth: increment the semantic patch version and three-digit build number once for a compatibility release, then update the exact Paper build, channel, JAR checksum, and verified JDKs there. -
Refresh the dependency lock after reviewing the resolved change:
./gradlew dependencies --write-locks
Verify that the maintained server JAR still matches the canonical filename and Paper API checksum:
./gradlew verifyMaintainedPaperJar \ -PpaperJarPath=/absolute/path/Paper-26.2.jar
-
Run the strict build:
./gradlew clean build --warning-mode all
Run
./gradlew syncReleaseDocswhenever the canonical release facts change. CI and release automation read the same facts through./gradlew -q printReleaseMetadata; do not hardcode a candidate JAR name. -
Review every source/build deprecation. Java compilation uses
-Xlint:deprecation,-Xlint:removal, and-Werror, so deprecated API use cannot silently enter a successful build. -
Inspect the artifact name, manifest,
plugin.yml, Java class major, and JAR contents.verifyArtifactautomates the invariants this fork depends on. -
Start a clean isolated Paper server using the real candidate JAR. Verify enable, plugin listing, clean disable, and logs.
-
Join directly with the matching native client. Verify the popup is absent and ordinary player chat still works. Do not use proxies, protocol translators, or older clients for certification.
-
Promote or merge only after all checks pass. Otherwise delete the candidate branch and continue deploying the last certified JAR.
Changing only paperTarget is not certification. PacketEvents must recognize
the released protocol, its JOIN_GAME wrapper must remain compatible, and the
native-client join behavior must be exercised. Paper 26.2.1, 26.3, and later
versions remain uncertified until this checklist passes for their released
builds.
gradle.lockfile makes local and CI resolution reproducible. Dependency and
GitHub Actions update proposals are automated with Dependabot, but each proposed
PacketEvents or Paper change still requires the full build and runtime checklist.
Do not reintroduce snapshot dependencies into the certified branch. The normal
check task verifies the lockfile, generated JAR metadata, manifest,
plugin.yml, Java class version, and marker-bounded current-release
documentation against gradle.properties.
Build 003 is the public, archived, unsupported full-feature fallback. Build
005 remains an earlier internal rollback artifact. Build 006 is the known-
live minimalist rollback certified by its native-client join and chat test.
Build 007 is the stable Paper 26.2 compatibility release; promote it to the
new live rollback only after the normal staging client check. Keep all retained
JAR checksums with the deployment record, never load multiple builds together,
and do not apply modern maintenance promises to legacy build 003.