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).
This commit is contained in:
logan committed 2026-10-15 17:07:52 -04:00
1 parent e5e369a693
commit a84319bb2f
11 files changed
+512 -1

No files matched your search

+75
View File
@@ -0,0 +1,75 @@
# Remaining plan (with current status)
The authoritative run sheet is `analysis/client-perf/BENCH-MATRIX.md` — read it fully
before benching. This file summarizes it, marks what's done, and adds proxy-machine
notes. **Win** = median p99 improves by more than the machine's B0 noise spread AND
1%-low does not worsen by more than the spread; ties keep upstream defaults.
Floors (fleet): P0 1%-low ≥ 30, P1/P2 ≥ 60 — on this proxy, floors don't map; use
relative wins only.
## Next actions, in order
1. **WATUT crash** (open): reproduce (repeated world loads in the OnionBench
instance), capture a crash report, then fix via config/patch/retry. Owner says
remove no mods. If unfixable, document a reliable workaround for bench runs.
2. **Verify uncapped frametimes**: one `run_scene.py --variant C1 --scene s1` run;
expect p99 well under 16.7 ms (vsync previously locked it). Do not proceed to B0
until FPS is visibly uncapped.
3. **Finish the bench world** (BENCH-MATRIX §2): build S4 — ONE Aeronautics ship
(~5×7×15, planks+glass+1 propeller) hovering y≈170, copied via Create schematic to
4 ships at z = 32/96/192/384; produce `bench-world-v1-s4-0/1/4.zip` copies.
Verify S2 shafts rotate (re-place motors by hand if the `/fill` network didn't
initialise) and S3 villager count. DH pregenerate per §2 step 5 (radius 256, tour,
`generatorPlan=DISABLED` afterwards). Leave world at S1, save, zip as
`bench-world-v1.zip` (record sha256).
4. **Run the matrix** B0 → B1 → B2 → B3 → B4 → B6 → B7 → B8 → B9 → B10 → B11 →
B12a → B12b → B13 → B14 (B5 deferred, fleet-only). Budget ≈25 h machine time.
Apply variants with `apply_variant.py`; relaunch per config change; scenes in
S1→S6 order per session; record with `--record`.
5. **Ship**: write winners into `proposed-configs/build.py` (DEFAULT/DECK/HIGH layers),
`build.py --ship`, `packwiz refresh`, commit (after `git checkout -- config/`).
Ship `config/modernfix-mixins.properties` **only if B6 passes** (see the `SHIP`
comment in `build.py`). New mod adds (B12b winners) ⇒ re-run B0 first.
6. **Report to owner**: B7 shader-policy data, B12b trial verdicts, B14 spawn-tuning
measurement, and any proxy-vs-fleet caveats.
## Matrix blocks (one line each; decision rules verbatim from BENCH-MATRIX §4)
| Block | Tests | Decision rule |
| --- | --- | --- |
| B0 | noise floor: C0 ×3 on S1 | defines each machine's win threshold; watch MemAvailable drift |
| B1 | baseline: C0 on S1–S6 | reference numbers only (startup, atlas, heap summary, VRAM) |
| B2 | composite: C1 / C1-deck / C1-high, all scenes | if C1 isn't a win on ≥2 machines, STOP and bisect via B3–B11 before shipping anything |
| B3 | DH: radius ladder + SSAO/quality/threads | per tier: largest radius meeting the floor on S1+S5; SSAO-off on a win; threads stay 2 unless 4 wins S5 w/o losing S1 |
| B4 | heap & GC: C1 × J0–J3, then heap 4/5/6 G | GC = best S5 1%-low; heap = smallest within winner's spread |
| B5 | Sable/SSRD sub-levels + decay (**fleet P0/P1 only**) | SSRD = largest meeting floor with 4 ships; sable-noshade only on win + acceptable looks; decay beyond spread = report, no config fix |
| B6 | ModernFix `dynamic_resources` | ship only if heap −300 MB or faster startup beyond spread AND zero missing textures AND 3 clean cold launches |
| B7 | shaders ×4 profiles on S2/S1/S4 | **data for owner, no auto-decision**; verify Flywheel backends drop under shaders; watch Iris #3164 corruption |
| B8 | entities: FA/Extensions, EMF LOD 20/8, LDL modes on S3 | smallest winning EMF LOD; cheapest winning LDL mode per tier |
| B9 | Flywheel lightSmoothness flat/C1/smooth on S2 | smoothest value meeting the floor, per tier |
| B10 | Sound Physics: spr-up/strict/nocap on S2s | adopt each winning change; listen for audio breakage |
| B11 | vanilla/Sodium: threads 3, blend 0/2, mip 4 | adopt only wins (S5 + not losing S1; mip4 needs VRAM ≤ 5.5 GB on P1) |
| B12a | added-mod ablation (BadOptimizations / Particle Core / Sodium Extra out) | keep unless removal wins or mod breaks something; Sodium Extra + RSO stay regardless |
| B12b | trial mods (Gnetum, Better Block Entities, Flerovium, Super Resolution, Ixeris, Iris Flywheel Compat, Cull Leaves) | add only on win w/o breakage via `packwiz modrinth add`; **new mod set ⇒ re-run B0**; not More Culling (excludes 1.21.1) |
| B13 | spark profile of worst B2 scene under C1 | flag any mod >5% of render-thread time that isn't Sodium/Iris/DH/Flywheel |
| B14 | spawn tuning: defaults vs shipped, river/jungle/warm ocean ×10 min | keep if totals drop and every species still appears; back off if one effectively disappears (SPAWN-TUNING §B14) |
## Scenes and JVM sets (fixed inputs)
- **S1** vista (terrain + DH) · **S2** Create floor, 2304 kinetic BEs · **S2s** = S2 +
24-sounds/tick storm · **S3** mob pen (30 villagers, allays w/ torches = moving LDL
sources) · **S4** 0/1/4 Sable airship sub-levels · **S5** 24-teleport tour, 120 s,
no warm-up discard · **S6** GUI/JEI overlay at S1.
- **J0** phase0 G1 baseline · **J1** brucethemoose G1 · **J2** generational ZGC ·
**J3** Shenandoah (plain; NOT `ShenandoahGCMode=iu` — aborts JDK 21). All parse-
checked on OpenJDK 21.0.12. Default heap here: 8 G (instance), matrix suggests 6 G
for P2 / 5 G for P0.
## Proxy-machine adaptations to document as you go
- B2's "≥2 machines" gate: run C1 vs C0 here; treat as single-machine evidence and
mark fleet confirmation as pending.
- B5 has no Sable-decay proxy path as specified — either adapt (4-ship scene exists
once S4 is built) or record as deferred.
- B4 heap ladder should use the instance's 8 G as the top rung.
- Absolute floors (30/60 fps) are fleet values; use relative wins on this box.