Files
onion-mc/analysis/state/05-decisions-and-rules.md
logan a84319bb2f fix(mods): add MidnightLib 1.10.0 to fix startup CME crash
Fright's Delight jar-in-jars MidnightLib 1.9.2, whose MidnightConfig.init
races during NeoForge parallel mod construction (ConcurrentModificationException).
The broken mod state left mod_resources unloaded, so WATUT's reloadShaders
mixin crashed on particle.json - WATUT was the victim, not the cause.
1.10.0 synchronizes the entries map (upstream 1fe69729); FML selects it over
the JiJ copy. Verified: 10/10 clean cold launches to world join.

Also adds analysis/state/ (Phase 2 state capture).
2026-10-15 17:07:52 -04:00

4.9 KiB

Settled decisions, rules of the road, traps

Owner decisions (2026-10-14) — settled, do not relitigate

  1. Delivery mechanism = Default Options (+ enforced config/modernfix-mixins.properties after B6 passes). Done in a01bc3b.
  2. Puzzles Lib 21.1.64 — done (bugfix only; no NeoForge perf change, LEVERS #14 corrected).
  3. Shaders: opt-in (packwiz downloads them; nothing enables them). B7 produces the policy data; owner decision still pending that data.
  4. Spawn tuning allowed if not detrimental to gameplay — done, moderate (d80f85b: alexsmobs/fowlplay/crittersandcompanions partial files). B14 measures it.
  5. Remove no mods. LEVERS §5 removal candidates are reference only. (This includes WATUT — so the WATUT crash must be fixed, not removed away.)
  6. Add any helpful mods — the five Add-verdict mods went in a01bc3b (Sodium Extra, Reese's Sodium Options, BadOptimizations, Particle Core, + Default Options). Trial mods are B12b's call; the agent may add trial winners.

Rules of the road (iteration rules from the journal)

  • Change tuned defaults only via analysis/client-perf/proposed-configs/build.py (DEFAULT / DECK / HIGH layers) → build.py --ship → packwiz refresh → commit. Never hand-edit proposed-configs/out/* or shipped files.
  • Shipped defaults are copy-if-absent: changes reach fresh installs only. Existing players follow PLAYER-TUNING §1 (delete 7 re-seeding config files; do NOT delete options.txt; set tier video values by hand).
  • git checkout -- config/ before staging — the server's mods re-save partial spawn files in full on boot; committing those expansions is the known mistake.
  • packwiz update in bulk resets hand-set side = "server" on petprotect, c2me-neoforge, noisium. Single-mod updates are safe.
  • Any new mod: verify NeoForge 1.21.1 build + neoforge.mods.toml ranges against pins, check side, then re-run B0 (new mod set invalidates the noise floor).
  • One recorded commit per matrix row; label all data as proxy-machine data.
  • Never kill the dedicated server (tmux onion-mc, repo root, port 25565) and never touch world/. sp-world.tar.gz (650 MB, untracked) — leave alone.
  • .pi/journal.md is the running log — append a session entry when you finish.

Verified facts / traps (don't re-derive, don't re-trip)

  • packwiz preserve: settable only by hand-editing index.toml; survives refresh and unrelated updates; silently dropped if the file is absent/ignored at refresh time; installer writes the file only if absent. Index files have no side, so shipped configs land on the server too (this repo IS the server).
  • Default Options 21.1.8: copy-if-absent for config/defaultoptions/options.txt (key_ lines stripped) and config/defaultoptions/extra/**; runs before NeoForge constructs mods — too late for modernfix-mixins.properties (hence B6 gating).
  • Observed defaults were generated from the same jar versions as current pins (DH 3.3.2, Sodium 0.8.13, EMF 3.3.9, Create 6.0.10/Flywheel 1.0.6, Sable 2.0.5, SPR 1.5.1). DH numberOfThreads true default = ceil(nproc/2) = 4 here (observed 2 came from a 4-thread box).
  • Flywheel 1.0.x disables both GPU backends when any shaderpack is active (verified in Backends.java). No Iris Flywheel Compat in the pack (B12b trial).
  • SSRD 1.8.7 → config/ssrd-common.toml (COMMON; server reads it too; slider floor 16). LambDynamicLights 4.8.11 → config/lambdynlights.toml (lowercase modes). SPR merges partial sound_rates.properties over generated defaults.
  • More Culling is unusable: its NeoForge build declares minecraft [1.21,1.21.1).
  • -XX:ShenandoahGCMode=iu aborts JDK 21 without UnlockExperimentalVMOptions — J3 uses plain -XX:+UseShenandoahGC.
  • Prism 11 --offline fails a fresh instance ("Required libraries are missing"); launch online once, then offline works.
  • xdotool windowactivate --sync hangs under kwin — use windowactivate + windowfocus.
  • MangoHud needs MANGOHUD_CONFIG explicit + LD_PRELOAD exported — use the wrapper ~/.local/bin/mangohud-local; system mangohud is not installed.
  • cdn.modrinth.com 501s Range requests — download whole jars. No unzip; use python zipfile. lodestonelib is the real slug (lodestone has no 1.21.1 build).
  • Duplicate version_number traps: tarotcards-remastered, room-for-two, too-many-bows reuse version strings across MC versions — pin exact filenames by hand.
  • Iris 1.8.14-beta.1 ↔ Sodium 0.8.13 mixin incompatibility reported on NeoForge (r5) — check when testing shaders (B7).

Open owner-facing deliverables (owed from Phase 2)

  • B7 shader-policy data → owner decision on default-off vs opt-in messaging.
  • B12b trial-mod verdicts (which trials earned a permanent add).
  • B14 spawn-tuning measurement (keep/back-off call).
  • Any B13 "mod >5% of render thread" findings.