Files
onion-mc/analysis/state/04-plan.md
T
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

76 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.