From ed1ae82825934a4e9d1d763002633c03321ed7c7 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 16 Apr 2026 07:30:56 +0000 Subject: [PATCH] =?UTF-8?q?bridge:=20REQ-2026-04-16-mc-versioning=20?= =?UTF-8?q?=E2=80=94=20Gemini-approved=20fix=20for=2026.x.x=20versioning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../requests/REQ-2026-04-16-mc-versioning.md | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 docs/code-bridge/requests/REQ-2026-04-16-mc-versioning.md diff --git a/docs/code-bridge/requests/REQ-2026-04-16-mc-versioning.md b/docs/code-bridge/requests/REQ-2026-04-16-mc-versioning.md new file mode 100644 index 0000000..eb34ccc --- /dev/null +++ b/docs/code-bridge/requests/REQ-2026-04-16-mc-versioning.md @@ -0,0 +1,103 @@ +# REQ-2026-04-16-mc-versioning + +**From:** Chronicler #93 +**Date:** 2026-04-16 +**Priority:** HIGH — blocks all version detection in installer +**Status:** PENDING +**Consultation:** docs/consultations/gemini-modpack-installer-versioning-2026-04-16.md + +--- + +## Context + +Minecraft switched to calendar-based versioning in December 2025. Current version is `26.1.2`, not `1.21.4`. Our installer has hardcoded `1.21.1` as "latest" and the `javaVersionForMC()` function doesn't handle the new scheme. Gemini consulted, architecture locked. + +--- + +## Changes Required + +### 1. Replace `javaVersionForMC()` in modpack-installer.js + +```javascript +function javaVersionForMC(mcVersion) { + const major = parseInt(mcVersion.split('.')[0]); + + if (major >= 26) return 21; // New 2026+ calendar scheme + + if (major === 1) { + const minor = parseInt(mcVersion.split('.')[1]); + if (minor >= 21) return 21; + if (minor >= 17 && minor <= 20) return 17; + if (minor <= 16) return 8; + } + + return 21; // Frostwall fallback +} +``` + +### 2. Replace hardcoded version lists with live DB-backed lookups + +Add a new DB table `mc_versions` to cache available versions: + +```sql +CREATE TABLE mc_versions ( + version VARCHAR(20) PRIMARY KEY, + java_version INT NOT NULL DEFAULT 21, + paper_supported BOOLEAN DEFAULT FALSE, + forge_supported BOOLEAN DEFAULT FALSE, + neoforge_supported BOOLEAN DEFAULT FALSE, + fabric_supported BOOLEAN DEFAULT FALSE, + updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() +); +``` + +Add a pg-boss cron job that runs at 3AM daily: +- Hit Paper API for supported versions +- Hit Modrinth `/tag/game_version` for all MC versions +- Sort with `semver.rsort()` (add `semver` to package.json) +- Upsert into `mc_versions` table + +Routes that currently show hardcoded version dropdowns should query this table instead. + +### 3. Update NextCloud mod stack lookup in modpackInstaller.js + +Replace direct path lookup with exact-then-fallback strategy: + +```javascript +async function getNextCloudModStack(mcVersion) { + const exactPath = `standard-mods/${mcVersion}/`; + const baseRelease = mcVersion.split('.').slice(0, 2).join('.'); + const fallbackPath = `standard-mods/${baseRelease}/`; + + if (await webdav.exists(exactPath)) return exactPath; + if (await webdav.exists(fallbackPath)) return fallbackPath; + + throw new Error(`Mod stack missing for both ${exactPath} and ${fallbackPath}`); +} +``` + +### 4. Update vanilla form version list + +Replace hardcoded MC version list in `_vanilla_form.ejs` with dynamic fetch from `mc_versions` table (Paper-supported versions only). + +### 5. Update modpack search version filter + +Replace hardcoded `1.21.1` option in `index.ejs` search filter with dynamic list from `mc_versions`. + +--- + +## Notes + +- `standard-mods/1.21.1/` has been renamed to `standard-mods/26.1.2/` in NextCloud — the 5 mods are already there +- NextCloud WebDAV correct path: `/remote.php/dav/files/mkrause612@gmail.com/` +- Add `semver` to package.json + +--- + +## Migration + +Migration 145: `mc_versions` table (see SQL above) + +## Deploy + +Standard pattern. Run migration 145 + npm install (semver) + restart.