# Iris Release Checklist Manual release procedure. There is no release automation by design: every step below is run by a person and verified by eye. Work top to bottom; do not skip the verify gates. Reference values below assume the current `gradle.properties`: `irisVersion=4.0.0-26.2`, `minecraftVersion=26.2`, `fabricLoaderVersion=0.19.3`, `forgeVersion=26.2-65.0.0`, `neoForgeVersion=26.2.0.6-beta`. For a Minecraft version bump, do `docs/mc-version-bump.md` first, then start this checklist. ## a. Preflight - [ ] Working tree clean on the exact commit you intend to tag (`git status` shows nothing to commit). - [ ] CI is green on that commit. The `verify` job (`.github/workflows/ci.yml`) runs `./gradlew :core:check :spi:build :probe:deserializationProbe` on JDK 25; the `build-artifacts` matrix builds all four platform jars. Do not release on a red or stale run. - [ ] `MasterChangelog.MD` Iris section is coherent: one consolidated entry set, deduplicated, no date-sliced headers, and it describes the current shipped state (not superseded intermediate work). - [ ] Version fields correct in `gradle.properties`: `irisVersion` is the release version and its trailing `-` suffix matches `minecraftVersion`. For a Minecraft bump, confirm every step in `docs/mc-version-bump.md` is done (loader ranges, `DataVersion`, NMS binding). - [ ] JDK 25 is the active toolchain locally (`java -version` reports 25). ## b. Build - [ ] From the Iris project root: `./gradlew buildAll` - [ ] `dist/` contains the four platform jars (exact names for this release): - [ ] `Iris v4.0.0-26.2 [CraftBukkit] 26.2.jar` (Bukkit/Paper/Purpur/Spigot/Folia plugin) - [ ] `Iris v4.0.0-26.2 [Fabric] 26.2+0.19.3.jar` - [ ] `Iris v4.0.0-26.2 [Forge] 26.2+65.0.0.jar` - [ ] `Iris v4.0.0-26.2 [NeoForge] 26.2+26.2.0.6-beta.jar` - Naming pattern: `Iris v [] [+].jar`. - [ ] The developer SPI jar is built by the same run at `spi/build/libs/iris-spi-4.0.0-26.2.jar`. It is the platform-API artifact for downstream developers and is not copied into `dist/`; it is not uploaded to the mod portals (see publish). - [ ] Each mod jar bundles core + spi + shaded libs; each plugin/mod jar is self-contained. ## c. Verify (release gates) - [ ] `:core:check` and `:probe:deserializationProbe` passed in CI on the tag commit (a. covers this). - [ ] Golden-hash determinism VERIFY passes on all four platforms and matches the same hash: - [ ] Bukkit plugin: `/iris goldenhash verify ` - [ ] Fabric mod: `/iris goldenhash verify ` - [ ] Forge mod: `/iris goldenhash verify ` - [ ] NeoForge mod: `/iris goldenhash verify ` - The hash is interchangeable across platforms: all four MUST report identical output for the same pack and seed. Any mismatch blocks the release. - [ ] Live modded content-mod gate: on each loader, boot the mod jar alongside a real content mod (e.g. Create) and generate an Iris world. Confirm no load-time rejection, no class-loader crash, and that modded blocks/items/entities author and generate. - [ ] Fabric + content mod - [ ] Forge + content mod - [ ] NeoForge + content mod - [ ] Client-mod matrix: install the mod on the client (keybind `H` toggles the pregen HUD) and confirm: - [ ] Modded server + modded client: HUD receives pregen progress over `irisworldgen:main`. - [ ] Modded server + vanilla client: server generates normally; vanilla client is unaffected. - [ ] Paper (Bukkit) server + modded client: HUD receives pregen progress over vanilla plugin messaging. - [ ] Folia smoke: plugin loads and an Iris world generates on Folia. - [ ] Non-Iris server + modded client: client is inert, no errors. ## d. Publish (all manual, no automation) - [ ] Modrinth: upload the three mod jars and the plugin jar. Tag loaders `fabric` / `forge` / `neoforge` on the mod files; mark the environment server + client; set game version 26.2. - [ ] CurseForge: upload the three mod jars with the matching loader tags and game version 26.2. - [ ] Existing plugin distribution channels: publish the plugin jar (`Iris v4.0.0-26.2 [CraftBukkit] 26.2.jar`) where the plugin already ships. - [ ] Sentry: add a release note / mark the release so incoming reports map to this version (the mod version string is the Sentry release tag). - [ ] Storepage / `listing.json` staleness review: check the listing copy for pre-4.0 content (Bukkit-only framing, old feature lists, screenshots). Flag anything stale for update before or right after launch. (Review only; this checklist does not change store copy.) ## e. Post - [ ] Tag the release commit (`v`) and push the tag. The `release-bundle` CI job (tag-gated, `refs/tags/v*`) runs `buildAll` and uploads the `dist/` bundle for the record. - [ ] Announce the release on the community channels once the portals show the new files live.