diff --git a/docs/code-bridge/requests/REQ-2026-04-16-vanilla-versions-fix.md b/docs/code-bridge/archive/REQ-2026-04-16-vanilla-versions-fix.md
similarity index 100%
rename from docs/code-bridge/requests/REQ-2026-04-16-vanilla-versions-fix.md
rename to docs/code-bridge/archive/REQ-2026-04-16-vanilla-versions-fix.md
diff --git a/services/arbiter-3.0/src/views/admin/modpack-installer/_vanilla_form.ejs b/services/arbiter-3.0/src/views/admin/modpack-installer/_vanilla_form.ejs
index 2323492..c6aef84 100644
--- a/services/arbiter-3.0/src/views/admin/modpack-installer/_vanilla_form.ejs
+++ b/services/arbiter-3.0/src/views/admin/modpack-installer/_vanilla_form.ejs
@@ -189,61 +189,7 @@
-
+
diff --git a/services/arbiter-3.0/src/views/admin/modpack-installer/index.ejs b/services/arbiter-3.0/src/views/admin/modpack-installer/index.ejs
index febb9f4..69bf7d3 100644
--- a/services/arbiter-3.0/src/views/admin/modpack-installer/index.ejs
+++ b/services/arbiter-3.0/src/views/admin/modpack-installer/index.ejs
@@ -118,6 +118,76 @@
document.getElementById('pack-details').innerHTML = '
Loading...
';
fetch('/admin/modpack-installer/vanilla-form', { headers: { 'HX-Request': 'true' } })
.then(function(r) { return r.text(); })
- .then(function(html) { document.getElementById('pack-details').innerHTML = html; });
+ .then(function(html) {
+ document.getElementById('pack-details').innerHTML = html;
+
+ // Scripts injected via innerHTML don't execute — run init here instead
+ // 1. Load MC versions (Paper-supported only)
+ fetch('/admin/modpack-installer/mc-versions?paper=1', { headers: { 'HX-Request': 'true' } })
+ .then(function(r) { return r.json(); })
+ .then(function(versions) {
+ var sel = document.getElementById('vf-mcversion');
+ if (!sel) return;
+ sel.innerHTML = '';
+ versions.forEach(function(v, i) {
+ var opt = document.createElement('option');
+ opt.value = v.version;
+ opt.dataset.mc = v.version;
+ opt.dataset.java = v.java_version;
+ opt.textContent = v.version + (i === 0 ? ' (latest)' : '');
+ if (i === 0) opt.selected = true;
+ sel.appendChild(opt);
+ });
+ if (versions.length > 0) {
+ var javaEl = document.getElementById('vf-java');
+ if (javaEl) javaEl.value = versions[0].java_version;
+ }
+ });
+
+ // 2. Load node stats
+ fetch('/admin/modpack-installer/node-info', { headers: { 'HX-Request': 'true' } })
+ .then(function(r) { return r.json(); })
+ .then(function(d) {
+ window._vfNodes = d;
+ vfShowNode(document.getElementById('vf-node') ? document.getElementById('vf-node').value : 'NC1');
+ });
+
+ // 3. Load initial port
+ vfRefreshPort();
+ });
+ }
+
+ // Vanilla form helpers (must be in index.ejs scope since _vanilla_form.ejs scripts won't run)
+ function vfShowNode(node) {
+ var el = document.getElementById('vf-node-usage');
+ if (!el) return;
+ var n = (window._vfNodes || {})[node];
+ if (!n) { el.textContent = ''; return; }
+ el.innerHTML = 'RAM: ' + Math.round(n.ramUsedMb/1024) + 'GB / ' + Math.round(n.ramTotalMb/1024) + 'GB · Disk: ' + Math.round(n.diskUsedMb/1024) + 'GB / ' + Math.round(n.diskTotalMb/1024) + 'GB';
+ }
+
+ function vfRefreshPort() {
+ var nodeEl = document.getElementById('vf-node');
+ if (!nodeEl) return;
+ var node = nodeEl.value;
+ vfShowNode(node);
+ fetch('/admin/modpack-installer/next-port?node=' + node, { headers: { 'HX-Request': 'true' } })
+ .then(function(r) { return r.json(); })
+ .then(function(d) {
+ var portEl = document.getElementById('vf-port');
+ if (portEl) portEl.value = d.port;
+ });
+ }
+
+ function vfUpdateJava(sel) {
+ var opt = sel.options[sel.selectedIndex];
+ if (opt && opt.dataset.java) {
+ document.getElementById('vf-java').value = opt.dataset.java;
+ } else {
+ var mc = (opt && opt.dataset.mc) || '';
+ var major = parseInt(mc.split('.')[0]) || 0;
+ var minor = parseInt(mc.split('.')[1]) || 0;
+ document.getElementById('vf-java').value = major >= 26 ? 21 : minor <= 16 ? 8 : minor <= 20 ? 17 : 21;
+ }
}