docs(mods): sync docs to the 164-jar kitchen-sink pack

The pack grew 76 -> 164 jars (133 both / 31 client) without any doc
update. Create + ~18 addons filled the tech gap, ars_nouveau + ars_creo
the magic gap, and the full YUNG's/Moog's/TerraBlender set the worldgen
gap, which also resolved the ponderjs orphan.

- 17-mod-shortlist: rewritten around the current pack; gap doc marked
  done, remaining gaps narrowed to map mod, Necronomicon orphan, C2ME.
- 04-mods: jar counts updated; the 24/52 cutover split is now labelled
  historical alongside the current 31/133.
- CLAUDE.md: WS6 partly done, stale "65 default both" line dropped, and
  the ~50-100 mod ceiling flagged as knowingly exceeded in both places.
  MAX_MEMORY 10G was sized for that old assumption - noted for re-check.
- 18-landing-rework: mods.json count 76 -> 164, "50+" stat tile noted
  stale.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
oierandClaude Opus 4.8 committed 2026-07-20 21:29:43 +02:00
1 parent 0bf42d5797
commit 7164371d34
4 files changed
+78 -53

No files matched your search

+21 -15
View File
@@ -12,7 +12,9 @@ with `plan/` or the code, those win.
- **Players**: 4–10 friends - **Players**: 4–10 friends
- **Modpack vibe**: Kitchen-sink (tech + magic + exploration + QoL) - **Modpack vibe**: Kitchen-sink (tech + magic + exploration + QoL)
- **Pack approach**: Manually curated (~50–100 mods), NOT a forked existing pack - **Pack approach**: Manually curated, NOT a forked existing pack. Original target
~50–100 mods; **actual is 164 jars** (2026-07-20, kitchen-sink expansion) —
ceiling knowingly exceeded, watch RAM
- **Minecraft version**: 1.21.1, **NeoForge** (not classic Forge) - **Minecraft version**: 1.21.1, **NeoForge** (not classic Forge)
- **Auth/skins**: Drasl (Yggdrasil-compatible), **password login** — no OIDC - **Auth/skins**: Drasl (Yggdrasil-compatible), **password login** — no OIDC
- **DNS**: handled OUTSIDE this repo; point `${BASE_DOMAIN}` + subdomains at the host - **DNS**: handled OUTSIDE this repo; point `${BASE_DOMAIN}` + subdomains at the host
@@ -131,7 +133,9 @@ while every other check passed.
### Memory sizing ### Memory sizing
~50–100 mods, 8 players, 1.21.1: `INIT_MEMORY: 4G`, `MAX_MEMORY: 10G`, ~50–100 mods, 8 players, 1.21.1: `INIT_MEMORY: 4G`, `MAX_MEMORY: 10G`,
`USE_AIKAR_FLAGS: TRUE`. `USE_AIKAR_FLAGS: TRUE`. **The pack is now 164 jars / 133 server-side** (Create
ecosystem + Ars Nouveau + full worldgen) — sized for the old 50–100 assumption, so
`MAX_MEMORY` may need a bump. Re-check heap usage under load before adding more.
## Config (.env) ## Config (.env)
@@ -157,13 +161,12 @@ mirrored at apex `/launcher/`. Per guest:
## Open / Pending Work ## Open / Pending Work
### Roadmap — mod migration follow-ups (post packwiz→04-mods) ### Roadmap — mod migration follow-ups (post packwiz→04-mods)
- [ ] **Curate `mods-sides.json` cosmetic-client mods.** tomllib auto-flagged 11 - [ ] **Curate `mods-sides.json` cosmetic-client mods.** Pack is now **164 jars**
hard client-only mods; the other 65 default `both`, including client-cosmetic (2026-07-20): **31 `client` / 133 `both`**. The `both` set still contains
ones (BetterF3, entityculling, MouseTweaks, ponderjs, fancymenu, drippy, melody, client-cosmetic mods that load harmlessly on the server but waste RAM — hand-edit
welcomescreen, Searchables, JustEnoughResources, TravelersTitles, yeetus…) that them to `client` so `sync-server-mods.sh` drops them from `./server-mods`.
load harmlessly on the server but waste RAM. Hand-edit them to `client` so (Also review `appleskin`, flagged `client` — flip to `both` if server-side food
`sync-server-mods.sh` drops them from `./server-mods`. (Also review `appleskin`, data wanted.)
flagged `client` — flip to `both` if server-side food data wanted.)
### Landing rework + mod list (PLANNED — see `plan/18-landing-rework.md`) ### Landing rework + mod list (PLANNED — see `plan/18-landing-rework.md`)
Full design settled across WS1–WS6; all tasks unchecked, ready to execute. Full design settled across WS1–WS6; all tasks unchecked, ready to execute.
- [ ] **WS1 — Join flow off packwiz.** Homepage = UlicraftLauncher, 3 steps - [ ] **WS1 — Join flow off packwiz.** Homepage = UlicraftLauncher, 3 steps
@@ -181,12 +184,15 @@ Full design settled across WS1–WS6; all tasks unchecked, ready to execute.
- [ ] **WS5 — Footer status link** to `status.${BASE_DOMAIN}` (nav unchanged). - [ ] **WS5 — Footer status link** to `status.${BASE_DOMAIN}` (nav unchanged).
- [ ] **WS6 — Mod shortlist + list component (`plan/17-mod-shortlist.md`).** - [ ] **WS6 — Mod shortlist + list component (`plan/17-mod-shortlist.md`).**
Light gap doc: current 76-jar pack is vanilla+ QoL/perf; **empty** on tech & Gap doc part **DONE**: pack filled out to **164 jars** (2026-07-20) — Create
magic, thin worldgen, no map; orphan deps `ponderjs`/`Necronomicon`. Landing ecosystem (tech), Ars Nouveau + ars_creo (magic), full YUNG's + Moog's +
mod-list component = auto-generated `mods.json` + extracted logos from the TerraBlender (worldgen); `ponderjs` orphan resolved by Create. Still open: **no
distribution forgemods (`tooling/build-modlist.py`), flat alphabetical, pretty map mod** (Xaero's), `Necronomicon` orphan (no Iron's Spells), and 164 > the
names, no categories/links; feeds the "50+" stat tile. stated 50–100 ceiling. Still to build: landing mod-list component =
- [ ] Server-side perf mods (C2ME, etc.). auto-generated `mods.json` + extracted logos from the distribution forgemods
(`tooling/build-modlist.py`), flat alphabetical, pretty names, no
categories/links; feeds the "50+" stat tile.
- [ ] Server-side perf mods (C2ME, etc. — `modernfix` already in the pack).
- [x] **Filestash file share** (`files.`, 2026-07-14) — live in prod. One shared - [x] **Filestash file share** (`files.`, 2026-07-14) — live in prod. One shared
htpasswd login, writable, rendered `:ro` config. See `plan/20-files.md`. htpasswd login, writable, rendered `:ro` config. See `plan/20-files.md`.
Follow-ups: add the Uptime Kuma HTTP monitor for `files.`; the share is Follow-ups: add the Uptime Kuma HTTP monitor for `files.`; the share is
+6 -4
View File
@@ -6,7 +6,8 @@
## Why drop packwiz ## Why drop packwiz
- The packwiz index tracked only **9** mods while the real modset (76 jars) lives - The packwiz index tracked only **9** mods while the real modset (76 jars at the
time of cutover; 164 as of 2026-07-20) lives
in the distribution repo — packwiz was half-built and stale. in the distribution repo — packwiz was half-built and stale.
- Manual packwiz curation (`.tmpl` render → `refresh` → re-hash) is the flagged - Manual packwiz curation (`.tmpl` render → `refresh` → re-hash) is the flagged
pain point, and a single missing file (`custom/.gitkeep`) crashlooped the pain point, and a single missing file (`custom/.gitkeep`) crashlooped the
@@ -20,7 +21,7 @@
``` ```
ulicraft-distribution/dist (another repo, = $DISTRIBUTION_WEB_ROOT) ulicraft-distribution/dist (another repo, = $DISTRIBUTION_WEB_ROOT)
servers/ulicraft-1.21.1/ servers/ulicraft-1.21.1/
forgemods/required/*.jar ← 76 jars, Nebula-managed (SOURCE OF TRUTH) forgemods/required/*.jar ← 164 jars (2026-07-20), Nebula-managed (SOURCE OF TRUTH)
distribution.json ← generated by Nebula; CLIENT install list distribution.json ← generated by Nebula; CLIENT install list
│ │ │ │
│ caddy distribution. vhost │ HeliosLauncher reads it → │ caddy distribution. vhost │ HeliosLauncher reads it →
@@ -196,8 +197,9 @@ welcomescreen, yeetusexperimentus` — on top of the 11 tomllib auto-caught
(sodium, sodium-extra, iris, ImmediatelyFast, appleskin, Controlling, BridgingMod, (sodium, sodium-extra, iris, ImmediatelyFast, appleskin, Controlling, BridgingMod,
CustomSkinLoader, entity_model_features, entity_texture_features, tagtooltips). CustomSkinLoader, entity_model_features, entity_texture_features, tagtooltips).
**Current state: 24 `client` / 52 `both`.** The 52 may still hide a client-only **State at first cutover: 24 `client` / 52 `both`. Current (2026-07-20, post
mod that loaded without crashing; if a future restart trips another tech/magic/worldgen expansion): 31 `client` / 133 `both`.** The `both` set may
still hide a client-only mod that loaded without crashing; if a future restart trips another
`invalid dist DEDICATED_SERVER`, flip that one jar to `client` and re-sync — same `invalid dist DEDICATED_SERVER`, flip that one jar to `client` and re-sync — same
one-line loop. When excluding, prefer leaf mods; if a `both` mod hard-depends on one-line loop. When excluding, prefer leaf mods; if a `both` mod hard-depends on
the one you exclude you'll get a `Missing mandatory dependency` instead — put it the one you exclude you'll get a `Missing mandatory dependency` instead — put it
+48 -33
View File
@@ -1,14 +1,19 @@
# Mod shortlist + landing mod-list component (WS6) # Mod shortlist + landing mod-list component (WS6)
> **Status: PLANNED — not started.** Two separable deliverables: (1) a curated > **Status: gap doc DONE (pack filled out 2026-07-20), landing component still
> kitchen-sink gap doc (this file), (2) an auto-generated `mods.json` + logos that > PLANNED.** Two separable deliverables: (1) a curated kitchen-sink gap doc (this
> feed a flat mod-list component on the landing page (see also `18-landing-rework.md`). > file), (2) an auto-generated `mods.json` + logos that feed a flat mod-list
> component on the landing page (see also `18-landing-rework.md`).
## TL;DR ## TL;DR
- Current pack (76 jars, `mods-sides.json`) is a polished **vanilla+ QoL/perf** base, - The pack is now **kitchen-sink** — **164 jars** (`mods-sides.json`: 133 `both`,
**not yet kitchen-sink**. Strong perf + QoL + storage + FTB + voice; **empty** on 31 `client`), up from the 76-jar vanilla+ base this doc originally described.
tech and magic, **thin** on worldgen, **no** map mod. Tech (Create + ~18 addons), magic (Ars Nouveau + ars_creo) and worldgen (full
YUNG's set + Moog's structures + TerraBlender) all landed. **Map is still the
only open gap.**
- **164 jars is over the stated 50–100 ceiling** in `CLAUDE.md`. Accepted for now;
it moves the RAM/stability bar (`INIT_MEMORY 4G`/`MAX_MEMORY 10G` — watch it).
- Jars live in the **external distribution repo** (`$DISTRIBUTION_WEB_ROOT/servers/ - Jars live in the **external distribution repo** (`$DISTRIBUTION_WEB_ROOT/servers/
ulicraft-1.21.1/forgemods/required/*.jar`, Nebula-managed). Adding mods happens ulicraft-1.21.1/forgemods/required/*.jar`, Nebula-managed). Adding mods happens
there, **not** in this repo. This doc is a shortlist only; depth = **light** (names there, **not** in this repo. This doc is a shortlist only; depth = **light** (names
@@ -17,48 +22,58 @@
from the jars — a different dataset from this shortlist. Flat alphabetical, pretty from the jars — a different dataset from this shortlist. Flat alphabetical, pretty
names, extracted logos, no categories, no Modrinth/CF links. names, extracted logos, no categories, no Modrinth/CF links.
## Current pack — what's already in (76 jars) ## Current pack — what's in (164 jars)
- **Tech — Create ecosystem (the anchor):** create, createaddition, createdeco,
create_connected, copycats, create-central-kitchen, create-enchantment-industry,
create-integrated-farming, create_jetpack(+curios), create_mechanical_chicken,
create_mechanical_extruder, create_mechanical_spawner, mechanical_cow,
mechanicals, createsifter, createultimine, createornithopterglider,
CreateDragonsPlus, sliceanddice, sophisticatedbackpackscreateintegration,
kubejs-create. Non-Create tech: laserio, enderrf, EnderStorage, melter,
mob_grinding_utils, buildinggadgets2, charginggadgets, titanium, CodeChickenLib.
- **Magic:** ars_nouveau, ars_creo (Ars×Create bridge).
- **Worldgen/exploration:** full YUNG's set (BetterCaves, CaveBiomes, Bridges,
BetterDungeons, BetterMineshafts, BetterStrongholds, BetterDesertTemples,
BetterJungleTemples, BetterOceanMonuments, BetterWitchHuts,
BetterNetherFortresses, BetterEndIsland), Moog's (Voyager, End, Nether,
MissingVillages, moogs_structures), TerraBlender, ExplorersCompass,
world_dimension_nexus, HangGlider, fishingoverhaul.
- **Perf:** sodium, sodium-extra, iris, immediatelyfast, entityculling, ferritecore, - **Perf:** sodium, sodium-extra, iris, immediatelyfast, entityculling, ferritecore,
lithium, spark. lithium, modernfix, spark.
- **QoL:** JEI, Jade(+addons), JER, JEProfessions, appleskin, MouseTweaks, Controlling, - **QoL:** JEI, Jade(+addons), JER, JEProfessions, appleskin, MouseTweaks, Controlling,
Searchables, inventoryessentials, polymorph, rightclickharvest, simplemagnets, Searchables, inventoryessentials, polymorph, rightclickharvest, simplemagnets,
fastleafdecay, torchmaster, trashcans, corpse(+curioscompat), lootr, comforts, fastleafdecay, torchmaster, trashcans, corpse(+curioscompat), lootr, comforts,
BetterF3, tagtooltips, cardboardboxes. BetterF3, tagtooltips, cardboardboxes, EasyAnvils, EasyMagic, easydisenchanting,
easy-villagers, easy-piglins, EasierSleeping, solcarrot, Neat, Ping-Wheel,
moreoverlays, ToastControl, ExtremeSoundMuffler, colorfulhearts, UsefulSlime.
- **Storage:** sophisticatedbackpacks(+core), functionalstorage(+more). - **Storage:** sophisticatedbackpacks(+core), functionalstorage(+more).
- **Farm/decor/build:** FarmersDelight, FramedBlocks, handcrafted. - **Farm/decor/build:** FarmersDelight, handcrafted, rechiseled, amendments,
immersive_paintings, etched, emotecraft.
- **FTB utils:** chunks, essentials, library, teams, ultimine. - **FTB utils:** chunks, essentials, library, teams, ultimine.
- **Voice:** Simple Voice Chat (`voicechat`). - **Voice:** Simple Voice Chat (`voicechat`).
- **Scripting/guide:** KubeJS(+rhino, +delight), ponderjs, Patchouli. - **Scripting/guide:** KubeJS(+rhino, +delight, +create), lootjs, toolsjs, ponderjs,
- **Libs:** architectury, balm, cloth-config, configured, curios, resourcefullib, Patchouli.
supermartijn642 core/config, jamlib, baguettelib, titanium, utilitarian, YungsApi, - **Server-custom:** `ulicraftmod` (this group's own mod).
Necronomicon, yacl. - **Libs:** architectury, balm, cloth-config, configured, curios, caelus, geckolib,
kotlinforforge, moonlight, Placebo, PuzzlesLib, resourcefullib, CreativeCore,
supermartijn642 core/config, jamlib, baguettelib, txnilib, fzzy_config,
titanium, utilitarian, YungsApi, Necronomicon, yacl, konkrete.
## Gaps vs kitchen-sink (tech + magic + exploration + QoL) ## Remaining gaps
- [ ] **Tech — empty.** Candidates: Create, Mekanism, Immersive Engineering, Applied - [ ] **Map — none.** Candidate: Xaero's Minimap + Worldmap. (`Ping-Wheel` and
Energistics 2, Thermal Series, Powah. (Pick a subset; Create is the anchor.) `ftb-chunks`' claim map do not replace a minimap.)
- [ ] **Magic — empty.** Candidates: Ars Nouveau, Botania, Iron's Spells 'n Spellbooks, - [ ] **Server-side perf (optional):** C2ME. (`modernfix` is in.)
Eidolon. - [ ] Optional second magic pillar (Botania / Iron's Spells) — Ars alone covers the
- [ ] **Worldgen — thin** (only `YungsApi` + `ExplorersCompass`). Candidates: Terralith, vibe; only add if the pack budget allows.
Tectonic, YUNG's structure set (Better Dungeons/Mineshafts/Strongholds…),
Repurposed Structures, William Wythers' Overhauled Overworld.
- [ ] **Map — none.** Candidate: Xaero's Minimap + Worldmap.
- [ ] **Server-side perf (optional):** ModernFix, C2ME.
## Orphaned dependencies (cleanup) ## Orphaned dependencies
- [ ] **`ponderjs`** present but **no Create** — ponder is Create's. Add Create or drop. - [x] **`ponderjs`** — resolved, Create is in the pack.
- [ ] **`Necronomicon`** present but **no Iron's Spells** — it's Iron's Spells' lib. - [ ] **`Necronomicon`** present but **no Iron's Spells** — it's Iron's Spells' lib.
Add Iron's Spells or drop. Add Iron's Spells or drop.
## Curation tradeoff
Adding the tech+magic+worldgen anchors pushes 76 → 100+ jars, near the stated
50–100 ceiling, and raises the RAM/stability bar (`INIT_MEMORY 4G`/`MAX_MEMORY 10G`).
Curate deliberately; verify each candidate's NeoForge **1.21.1** build + the
`21.1.233` loader pin at add-time.
## Execution (external repo, when ready) ## Execution (external repo, when ready)
1. Add jars in the distribution repo (Nebula `forgemods/required/`), keep the NeoForge 1. Add jars in the distribution repo (Nebula `forgemods/required/`), keep the NeoForge
+3 -1
View File
@@ -158,7 +158,7 @@ offline) reads `$DISTRIBUTION_WEB_ROOT/servers/ulicraft-1.21.1/forgemods/require
```json ```json
{ {
"schemaVersion": 1, "schemaVersion": 1,
"count": 76, "count": 164,
"mods": [ "mods": [
{ "id": "jei", "name": "Just Enough Items (JEI)", "version": "19.27.0.340", { "id": "jei", "name": "Just Enough Items (JEI)", "version": "19.27.0.340",
"authors": "mezz", "description": "…", "logo": "/mod-logos/jei.png" } "authors": "mezz", "description": "…", "logo": "/mod-logos/jei.png" }
@@ -168,6 +168,8 @@ offline) reads `$DISTRIBUTION_WEB_ROOT/servers/ulicraft-1.21.1/forgemods/require
`ModList.astro` (new) imports `mods.json` → flat grid (logo + name + version). The `ModList.astro` (new) imports `mods.json` → flat grid (logo + name + version). The
homepage stat tile (`site.ts` `stats[0].key "50+"`) is fed from `mods.json.count`. homepage stat tile (`site.ts` `stats[0].key "50+"`) is fed from `mods.json.count`.
(The hardcoded `"50+"` fallback is stale — the pack is 164 jars as of 2026-07-20;
bump it to `"150+"` when wiring the tile.)
Tasks: Tasks:
- [ ] `tooling/build-modlist.py` (jar parse + logo extract + `mods.json`). - [ ] `tooling/build-modlist.py` (jar parse + logo extract + `mods.json`).