Each run: tools/ledgerfit.js fits the base (every step switch off) and fits again with the run's switches on, by the same procedure: the seven weights and lands fitted, everything else hibernated at tools/ledger-benchmarks/2026-10-03-step6-baseline.json; ridge λ 0.01 toward the base benchmark's values; the same seeds. Lists: tyr.auspex, tyr.hivemind, tyr.second, tyr.maelstrom, tyr.astrategas, sm.auspexFull, sm.tobias. Yardstick through compute() at each fit (ρ; pairwise on the tiers S to D, as the step log). Leave one list out: each list scored by the fit on the other 6. Noise: each army's SD of mean ρ over the scrambled fits (10 per ledger, the base's and the run's pooled: 20). Hint by the keep rule: KEEP only when the mean ρ and mean pairwise both rise and neither army's mean ρ falls past its noise. A hint; the supervisor decides.
| Run | Mean ρ (base → on) | Mean pairwise | Tyranids ρ | Space Marines ρ | Left out: mean ρ | Left out: mean pairwise | Hint | Left out agrees |
|---|---|---|---|---|---|---|---|---|
| base re-fit (against the step-6 weights) | 0.472 → 0.464 (−0.008) | 70.1% → 69.7% (−0.4) | 0.564 → 0.554 (−0.011) | 0.241 → 0.238 (−0.003) | 0.472 → 0.460 (−0.012) | 70.1% → 69.6% (−0.5) | – | – |
| scoreFloor | 0.464 → 0.462 (−0.001) | 69.7% → 69.7% (+0.0) | 0.554 → 0.551 (−0.003) | 0.238 → 0.239 (+0.002) | 0.460 → 0.461 (+0.001) | 69.6% → 69.6% (+0.1) | REVERT: mean ρ −0.001 | no (KEEP) |
The base row compares the step-6 baseline as it stands (its weights, unfitted; left out is in sample there) with the base re-fitted on the 7 lists. Noise (SD of mean ρ, scrambled fits): Tyranids 0.039, Space Marines 0.098, all lists 0.037 (first run's pool).
Per list (ρ / pairwise, S to D)
| List | Step 6 | Base re-fit | scoreFloor |
|---|---|---|---|
| tyr.auspex | 0.662 / 79.8% | 0.656 / 79.4% | 0.648 / 79.1% |
| tyr.hivemind | 0.622 / 78.6% | 0.616 / 78.5% | 0.617 / 78.5% |
| tyr.second | 0.587 / 76.7% | 0.568 / 75.7% | 0.587 / 76.7% |
| tyr.maelstrom | 0.571 / 71.4% | 0.554 / 71.0% | 0.546 / 70.8% |
| tyr.astrategas | 0.381 / 65.9% | 0.376 / 65.5% | 0.360 / 64.9% |
| sm.auspexFull | 0.284 / 63.4% | 0.281 / 63.2% | 0.280 / 63.0% |
| sm.tobias | 0.197 / 54.9% | 0.195 / 54.7% | 0.199 / 55.0% |
Left out (each list by the fit on the others), ρ / pairwise:
| List | Base re-fit | scoreFloor |
|---|---|---|
| tyr.auspex | 0.649 / 79.0% | 0.640 / 78.7% |
| tyr.hivemind | 0.608 / 78.2% | 0.613 / 78.3% |
| tyr.second | 0.556 / 75.2% | 0.587 / 76.7% |
| tyr.maelstrom | 0.556 / 71.0% | 0.553 / 71.0% |
| tyr.astrategas | 0.381 / 65.9% | 0.362 / 65.0% |
| sm.auspexFull | 0.272 / 62.9% | 0.271 / 62.7% |
| sm.tobias | 0.199 / 55.0% | 0.201 / 55.2% |
The fitted knobs
| Knob | Step 6 | Base re-fit | scoreFloor |
|---|---|---|---|
| lands | 1.500 | 1.451 | 1.451 |
| wKill | 498.2 | 411.4 | 417.1 |
| wSoak | 14.97 | 14.71 | 14.66 |
| wScore | 9.652 | 10.02 | 9.686 |
| wActions | 1.306 | 1.292 | 1.292 |
| wHold | 18.89 | 19.87 | 20.28 |
| wPresence | 2.515 | 2.739 | 2.753 |
| wSpawn | 15.65 | 15.34 | 15.34 |
Movers (ranks between the base re-fit and the run's re-fit; letters per list)
scoreFloor. Tyranids: Neurogaunts 22 → 33 (B/C/C/C/C), Hormagaunts 23 → 31 (S/A/B/A/S), Termagants 34 → 39 (–/B/–/B/A), Psychophage 28 → 25 (B/B/A/B/C), Hive Guard 29 → 26 (A/B/B/C/C), Carnifexes 32 → 29 (C/C/C/C/C), Trygon 24 → 22 (B/C/–/B/A), Tyrannofex 25 → 23 (S/A/A/A/S). Space Marines: Tactical Squad 16 → 23 (B/D), Rhino 18 → 14 (B/D), Chaplain with Jump Pack 29 → 33 (A/D), Assault Intercessor Squad 14 → 17 (A/B), Captain in Terminator Armour 28 → 31 (B/D), Captain with Jump Pack 6 → 8 (A/B), Techmarine 15 → 13 (A/B), Intercessor Squad 13 → 15 (S/A).
Base re-fit against step 6: Tyranids: Neurogaunts 29 → 22 (B/C/C/C/C), Harpy 33 → 27 (D/–/–/F/D), Haruspex 24 → 30 (B/B/A/A/B), Biovores 5 → 1 (S/S/S/S/S), Hive Tyrant 3 → 6 (S/A/S/A/A), Hormagaunts 26 → 23 (S/A/B/A/S), Toxicrene 23 → 26 (–/–/–/D/D), Von Ryan's Leapers 6 → 4 (S/B/A/B/C). Space Marines: Tactical Squad 21 → 16 (B/D), Land Raider 57 → 53 (A/C), Land Raider Crusader 68 → 64 (B/D), Outrider Squad 7 → 4 (A/C), Scout Squad 23 → 20 (S/S), Eradicator Squad with Heavy Bolters 18 → 21 (A/B), Invictor Tactical Warsuit 19 → 22 (B/D), Lieutenant 31 → 34 (S/C).
Checks and run times
- Each fit's latents (every unit's ranking row) matched compute() at the fitted setting, the largest relative difference 5.4e-16; every form's basis matched valueForm() (6.3e-16).
- Ranking rows: base solo/solo; scoreFloor solo/solo.
- Run times (the main fit; with folds and scrambles on 3 threads): base 4.75 s (47.8 s); scoreFloor 4.61 s (38.8 s). Total 88.1 s.