5 Oct 2026. tools/ledgercrack2.js on 4 worker threads: 184,902,102 evaluations in 17 minutes. Every number is docs/lab/ledger/ledger.js's own maths: tools/crack2model.js reproduces compute() unit by unit (relative gaps about 1e-15 at random settings of every knob, every switch setting and both profile forms, on all 16 armies), and the reported bests were re-scored through compute(). The yardstick: pairwise accuracy on the five Tyranid lists (tyr.auspexFull, hivemindFull, secondFull, maelstrom, astrategas), the mean over them, on the panels' own rows where they are finer than the letters (auspexFull: Auspex's six bands, so two units of one letter on different rows are a pair); the letters are the extra column. Track A (step 34b) 79.3% on letters, 78.9% on rows; Track B 77.7% on letters, 77.5% on rows. The run was capped at about an hour (the coordinator's order: the family grid with its fake worlds first, then the other armies, then the searched ladder); what that cost is in "What was exhaustive". Ceiling: the reviewers' own agreement ≈ 89% (each list against the other four's consensus) and ≈ 84% (one reviewer against another) (our own count on these five lists, ties in the other lists left out: 90.4% consensus, 84%–96%); anything above about 89% on the lists is marked ⚑: fitting the reviewers' noise, not insight. A report: nothing is adopted. Our own numbers; unit and keyword names only.
Every dial is one value for the whole game: one number per rule, stat or family, the same on every unit that has it, in every army. There is no per-unit knob anywhere in this search.
The short answer
- G2: the dials and switches, with the weights (both tracks) (exhaustive, 10,077,696 combinations): best 82.5% on the five lists (+3.6 points over the built setting A), 755,411 winners within the noise band (±3.5%). Fake worlds, where every perk is truly 1×: the same search gains +0.3 (median) to +0.6 points over the truth by luck. Shuffled letters reach 62.8%. Held-out units: the grid's pick 79.6% against the built setting's 79.3%.
- G3: the twelve family dials (exhaustive, 32,949,342 combinations): best 84.3% on the five lists (+5.4 points over the built setting), 112,641 winners within the noise band (±2.7%). Fake worlds, where every perk is truly 1×: the same search gains +0.4 (median) to +0.6 points over the truth by luck. Shuffled letters reach 67.8%. Held-out units: the grid's pick 79.7%.
- Track A, rung (c) (searched, 155 knobs): 78.9% → 92.9% ⚑ (+14.0); fake worlds gain +1.8 to +2.2 by luck; shuffled searches 91.5% (gap +1.4); held-out units 79.3% → 80.2%; the 14 armies 58.9% → 57.1%; 0 of 1,500 band solutions beat both other-army baselines.
- Track B, rung (c) (searched, 152 knobs): 77.5% → 92.8% ⚑ (+15.4); fake worlds gain +2.5 to +3.0 by luck; shuffled searches 92.6% (gap +0.2); held-out units 77.6% → 79.8%; the 14 armies 59.9% → 54.0%; 0 of 1,500 band solutions beat both other-army baselines.
- Out of sample, little of it holds. On held-out Tyranid units the family grid's pick scores 79.7% against the built setting's 79.3% (+0.4), G2's 79.6% (+0.4); the shuffled letters climb +9.4 to +19.1 points over the built setting on the same grid; the placebo families sit where the real ones do. The +5.3 is mostly these 52 units.
- The ceiling scan (in-sample), all 15 other armies (the whole net, 16,886,724 combinations): 0 clear 70% on every army; the most armies cleared 4 of 15; the best mean 62.7% against Track A's 59.4% (± 2.2%) and Track B's 60.1%.
- Exam, space-marines + world-eaters (the whole net, 16,886,724 combinations): 0 clear 70% on every army; the most armies cleared 1 of 2; the best mean 72.9% against Track A's 66.1% (± 3.4%) and Track B's 65.7%.
- Exam, all 15 other armies (what passed space-marines+world-eaters): 0 clear 70% on every army; the most armies cleared 3 of 15; the best mean 61.7% against Track A's 59.4% (± 2.2%) and Track B's 60.1%.
- The reviewers' own agreement is the ceiling (≈ 89% consensus, ≈ 84% one reviewer to another): a fit above it is fitting their noise.
The headline question: does the family grid beat luck?
The family grid (G3: twelve family dials, every combination of −0.25 / 0 / +0.25, on G2's best settings) against the same grid on 8 fake worlds, where the truth is Track A's built ledger with every family at 0 and only the reviewers' noise is added. Exhaustive in both: every combination is scored, so the gain is the grid's own best, not a search's luck of the draw.
| Built (the truth in a fake world) | Grid's best | Gain | Winners in the band | |
|---|---|---|---|---|
| Real letters, all 62 settings | 78.91% | 84.33% | +5.4 | 112,641 |
| Real letters, the fake worlds' kind of settings (built A and B, G2's top 10) | 78.91% | 84.21% | +5.3 | – |
| Fake world 1 | 91.68% | 91.90% | +0.2 | 145,608 |
| Fake world 2 | 92.32% | 92.69% | +0.4 | 124,821 |
| Fake world 3 | 90.84% | 91.31% | +0.5 | 209,403 |
| Fake world 4 | 91.77% | 92.01% | +0.2 | 170,208 |
| Fake world 5 | 90.65% | 91.01% | +0.4 | 165,027 |
| Fake world 6 | 90.22% | 90.83% | +0.6 | 188,349 |
| Fake world 7 | 90.29% | 90.76% | +0.5 | 137,337 |
| Fake world 8 | 92.83% | 92.92% | +0.1 | 65,142 |
| Shuffled letters 1 (no link to the units) | 43.08% | 62.17% | +19.1 | 54,354 |
| Shuffled letters 2 (no link to the units) | 51.42% | 67.26% | +15.8 | 19,262 |
| Shuffled letters 3 (no link to the units) | 58.40% | 67.84% | +9.4 | 109,193 |
Answer (against luck): on like-for-like settings the real gain is +5.3 points; the fake worlds gain +0.4 (median), +0.1 to +0.6 by luck. The real gain is above every one of the 8 worlds: p ≤ 1/9 ≈ 0.11, the smallest p this test can give with 8 worlds (more worlds would be needed to say more). The shuffles (no link between letters and units at all) reach 67.8%, far below.
But the held-out units say most of it is these units, not a code. Picked on four fifths of the graded Tyranid units and scored on the pairs with a held-out unit (five folds), the family grid's pick scores 79.7% against the built setting's 79.3% (+0.4 points; G2's 79.6%, +0.4). Leaving a whole list out instead, the pick scores 82.7% on the left-out list against the built 78.9% (+3.8): the reviewers agree with each other about these units, so a left-out reviewer is not new evidence, a left-out unit is. And the shuffles, whose letters have no link to the units at all, climb +9.4 to +19.1 points over the built setting on the same letters: a grid this flexible fits whatever ordering it is given. The fake worlds' small gain is the luck of picking a best when the truth is in the grid and already near the ceiling; it does not bound what a wrong model with twelve family dials and 62 settings can fit on 52 units.
And the placebos can't be told from the real families. Three fake perks on 4, 10 and 30 random Tyranid units, gridded beside the twelve (every combination on the two built settings): their winners' weighted medians 0 (4 units), -0.25 (10 units), 0 (30 units); the real families' 0, 0.25, 0, 0.25, -0.25, -0.25, 0, 0, 0, -0.25, -0.25, 0. 0 of the twelve real families and 0 of the three placebos have a 10–90% range that leaves out 0: at this resolution the family layer cannot tell a real perk from a random label.
What this does and doesn't say. It says the families' gain is not the grid's selection luck: a grid of this size, fitted to letters this noisy, finds about +0.4 points where there is nothing to find, and the real letters give +5.3. One caveat on the control: a fake world's truth already scores about 91.3% on its own letters (the noise is all there is to fit), while the real built ledger scores 78.9%, so the real grid has more room to move; the fake worlds measure the selection luck of a grid this size on letters this noisy, not what a wrong-but-flexible model can gain. It does not say the family dials are right: the held-out units (section 1), the leave-one-list-out and above all the other armies (section 2) are the test of that. The smoke run's "+3 to 4 points of luck" was an artefact of the smoke: its thinned grid had lost the truth's setting, so the gain was measured from a wrong truth.
Fake worlds whose winners' 10–90% range leaves out a family's true 0: none. A real family range that leaves out 0 means something only beside this (and the placebos, section 1).
What was exhaustive and what was searched
| Part | Knobs (each at its levels) | Combinations checked | Exhaustive? |
|---|---|---|---|
| G2: the dials and switches, with the weights (both tracks) | supportMeasured (0/1), kill (burst/attach8/attach4/prefer), lifeKill (0/1), arrivalKillW (0/1.5/3), secondaryVPW (0/0.5/1), supportMeasuredW (1/3/6/n/a), shockPressureW (0/1/2/4), threatSoakW (0/1), scoreFloorW (0/1), pointsExp (0/0.25/0.5), wSoak (0/1/2), wScore (0/1/2), wActions (0/1/2), wHold (0/1/2), wSpawn (0/1/2), wPresence (0/1/2) | 10,077,696 (× 12 letter sets: real, 3 shuffles, 8 fake worlds) | yes: every combination |
| G3: the twelve family dials | 12 family dials × 3 levels on 62 settings (both tracks' built settings and G2's best) | 32,949,342 (real letters; the 3 shuffles and 8 fake worlds each on 12 settings of their own: built A and B and their own G2 top 10) | yes: every combination |
| The trims (the hour's cap) | G2 at reduced levels (the full set, 69,120 settings × 729 weights, is --g2-full, about 2.5 worker-hours with the controls); G1 (the sliders per track) not run in the capped order; 3 shuffles and 8 fake worlds (with 8 worlds the smallest p-value the fake-world test can give is 1/9 ≈ 0.11); placebo families on the two built settings | ||
| The wide net and the staged exam | every combination of each grid at or above min(best − 2 SE, 75%) on the Tyranids (G2 5,121,913, G3 11,764,811), each scored as it is on the exam's gates (reports/tiers/2026-10-05-crack-exam.md) | 33,775,448 combination-gates | yes: every stored combination on the first gate; the next gates on its pass-ons |
| Ladder A (c) | 155 continuous knobs (+ every feature as a line-targeted slope: the families split among their members) | 1,162,592 | no: searched (CMA-ES and coordinate ascent from Latin-hypercube starts and the grids' winners) |
| Ladder B (c) | 152 continuous knobs (+ every feature as a line-targeted slope: the families split among their members) | 1,162,463 | no: searched (CMA-ES and coordinate ascent from Latin-hypercube starts and the grids' winners) |
| The dials only compute() reproduces | scarceAnswersW, missionVPW, vpMissionW, wCarry, preferC, preferN, lifeSurvive, lifeBlend | 103 | checked at G2's best winners and the T-661 stack |
Why not one grid of everything: the knobs together are 17 sliders, 10 dials and switches and 12 families; even at 3 levels each that is about 3^39 ≈ 4 × 10^18 combinations. Each grid is exhaustive over its own block; the blocks meet through their winners (G3 runs on G2's best settings, the ladder starts from all of them).
1. The exhaustive grids
A combination wins when its pairwise is within one bootstrap standard error (graded units resampled, 1,000 times) of its grid's best. The same grid is run on 3 shuffled letter sets (each graded unit's whole row of five letters moved to another unit: the reviewers still agree with each other, only the link to the units is gone) and on 8 fake worlds (the blind appraisal's control: letters drawn from the built ledger itself, every perk at its built value, plus reviewer-like noise calibrated so the fake reviewers agree one to one as the real ones do, 87.9% against 89.5% on our count; σ 0.39 in log Value for Track A's worlds, 0.32 for Track B's). In a fake world the truth is known, so the search's gain over it is pure luck: a real result has to beat the fake worlds' gain, not just the shuffles.
| G2 | G3 | |
|---|---|---|
| Combinations | 10,077,696 | 32,949,342 |
| Built setting (A / B), rows; letters | A 78.9%; 79.3%, B 77.5%; 77.7% | 78.9% / 77.5%; 79.3% / 77.7% |
| Best (on rows: the objective) | 82.51% | 84.33% |
| The same best on letters | 82.71% | 84.46% |
| Noise band (1 SE) | ±3.46% | ±2.67% |
| Winners (within 1 SE of the best) | 755,411 (7.50%) | 112,641 (0.34%) |
| Above the built setting | 896,937 (A), 2,285,866 (B) | 2,378,698 (A) |
| Above the ceiling (89%) ⚑ | 0 | 0 |
| Shuffled letters: best (median, max) | 60.3%, 62.8% | 67.3%, 67.8% |
| Shuffled: own winners (median per set) | 378,976 | 54,354 |
| Shuffled combinations inside the real band | 0 | 0 |
| Gap: real best − best shuffle | +19.7 pts | +16.5 pts |
| Real gain over the built setting | +3.6 (A), +5.0 (B) pts | +5.4 (A), +6.9 (B) pts |
| Fake worlds: gain over their truth (median, max) | +0.3, +0.6 pts | +0.4, +0.6 pts |
| Fake worlds: their winners (median) | 705,667 | 155,318 |
| Leave one list out: the pick on the left-out list | 82.5% (built 78.9%) | 82.7% |
| Leave units out: the pick on held-out pairs | 79.6% (built 79.3%) | 79.7% |
| Page check (largest gap) | 1e-16 | – |
G2: the dials and switches, with the weights (both tracks)
10,077,696 combinations in 3.9 minutes. The best: 82.51% (per list 83% / 88% / 81% / 83% / 78%): supportMeasured 1, kill burst, lifeKill 0, arrivalKillW 1.5, secondaryVPW 0, supportMeasuredW 1, shockPressureW 4, threatSoakW 1, scoreFloorW 0, pointsExp 0, wSoak 2×, wScore 2×, wActions 0×, wHold 2×, wSpawn 2×, wPresence 2×.
Winners at other widths of the band: within 0.25 SE: 864 (the median shuffled set: 4,400; the median fake world: 14,696); within 0.5 SE: 13,379 (the median shuffled set: 31,489; the median fake world: 93,412); within 1 SE: 755,411 (the median shuffled set: 378,976; the median fake world: 705,667); within 2 SE: 4,432,878 (the median shuffled set: 4,090,672; the median fake world: 3,423,389).
Each dial's levels among the winners: the share of the winners at each level (the grid has every level equally often: 'even'), the same weighted by exp((pairwise − best) ÷ SE), the weighted 10th / 50th / 90th percentile (the error bar on the dial), the levels no winner has and the levels every winner has.
| Dial | Built | Levels | Share of winners | Weighted share | Even | Weighted 10 / 50 / 90 | Never | Always | Fake worlds whose 10–90 leaves out the built level |
|---|---|---|---|---|---|---|---|---|---|
| supportMeasured | A 0, B 1 | 0 / 1 | 52% / 48% | 51% / 49% | 50% | 0 / 0 / 1 | – | – | 0 of 8 |
| kill | A burst, B prefer | burst / attach8 / attach4 / prefer | 17% / 22% / 21% / 40% | 17% / 22% / 21% / 40% | 25% | burst / attach4 / prefer | – | – | 0 of 8 |
| lifeKill | A 0, B 0 | 0 / 1 | 53% / 47% | 54% / 46% | 50% | 0 / 0 / 1 | – | – | 0 of 8 |
| arrivalKillW | A 0, B 0 | 0 / 1.5 / 3 | 23% / 36% / 41% | 22% / 36% / 41% | 33% | 0 / 1.5 / 3 | – | – | 0 of 8 |
| secondaryVPW | A 0, B 0 | 0 / 0.5 / 1 | 49% / 41% / 11% | 48% / 41% / 11% | 33% | 0 / 0.5 / 1 | – | – | 0 of 8 |
| supportMeasuredW | A n/a, B 1 | 1 / 3 / 6 / n/a | 27% / 21% / 0% / 52% | 28% / 21% / 0% / 51% | 25% | 1 / n/a / n/a | – | – | 0 of 8 |
| shockPressureW | A 1, B 1 | 0 / 1 / 2 / 4 | 1% / 18% / 37% / 45% | 1% / 17% / 37% / 45% | 25% | 1 / 2 / 4 | – | – | 0 of 8 |
| threatSoakW | A 1, B 1 | 0 / 1 | 48% / 52% | 48% / 52% | 50% | 0 / 1 / 1 | – | – | 0 of 8 |
| scoreFloorW | A 0, B 0 | 0 / 1 | 54% / 46% | 54% / 46% | 50% | 0 / 0 / 1 | – | – | 0 of 8 |
| pointsExp | A 0, B 0 | 0 / 0.25 / 0.5 | 59% / 31% / 11% | 60% / 30% / 10% | 33% | 0 / 0 / 0.5 | – | – | 0 of 8 |
| wSoak | A 1, B 1 | 0 / 1 / 2 | 31% / 33% / 35% | 31% / 33% / 36% | 33% | 0 / 1 / 2 | – | – | 0 of 8 |
| wScore | A 1, B 1 | 0 / 1 / 2 | 33% / 34% / 33% | 33% / 34% / 34% | 33% | 0 / 1 / 2 | – | – | 0 of 8 |
| wActions | A 1, B 1 | 0 / 1 / 2 | 33% / 33% / 33% | 33% / 33% / 33% | 33% | 0 / 1 / 2 | – | – | 0 of 8 |
| wHold | A 1, B 1 | 0 / 1 / 2 | 26% / 38% / 36% | 26% / 37% / 37% | 33% | 0 / 1 / 2 | – | – | 0 of 8 |
| wSpawn | A 1, B 1 | 0 / 1 / 2 | 35% / 33% / 32% | 35% / 33% / 32% | 33% | 0 / 1 / 2 | – | – | 0 of 8 |
| wPresence | A 1, B 1 | 0 / 1 / 2 | 0% / 47% / 53% | 0% / 46% / 54% | 33% | 1 / 2 / 2 | 0 | – | 0 of 8 |
With a gentle pull toward the built value (Track A) (0.2 points of pairwise per level step away from it, so a dial moves only when the data asks): the best 80.48% after the pull (82.08% before it); 633,691 winners. Weighted medians with the pull: supportMeasured 0, kill attach4, lifeKill 0, arrivalKillW 1.5, secondaryVPW 0, supportMeasuredW n/a, shockPressureW 2, threatSoakW 1, scoreFloorW 0, pointsExp 0, wSoak 1, wScore 1, wActions 1, wHold 1, wSpawn 1, wPresence 1. Its best: supportMeasured 1, kill burst, lifeKill 0, arrivalKillW 1.5, secondaryVPW 0, supportMeasuredW 1, shockPressureW 2, threatSoakW 1, scoreFloorW 0, pointsExp 0, wSoak 1×, wScore 2×, wActions 1×, wHold 2×, wSpawn 1×, wPresence 1×.
With a gentle pull toward the built value (Track B) (0.2 points of pairwise per level step away from it, so a dial moves only when the data asks): the best 81.08% after the pull (82.08% before it); 243,465 winners. Weighted medians with the pull: supportMeasured 1, kill attach4, lifeKill 0, arrivalKillW 1.5, secondaryVPW 0, supportMeasuredW 1, shockPressureW 2, threatSoakW 1, scoreFloorW 0, pointsExp 0, wSoak 1, wScore 1, wActions 1, wHold 1, wSpawn 1, wPresence 1. Its best: supportMeasured 1, kill burst, lifeKill 0, arrivalKillW 1.5, secondaryVPW 0, supportMeasuredW 1, shockPressureW 2, threatSoakW 1, scoreFloorW 0, pointsExp 0, wSoak 1×, wScore 2×, wActions 1×, wHold 2×, wSpawn 1×, wPresence 1×.
Dials that go together or trade off among the winners (from a uniform sample of 456,916 winners, weighted): r the correlation of their levels; "sum pinned": one high goes with the other low, their sum varies far less than each alone (a trade-off); "difference pinned": they move together.
| Dial a | Dial b | r | Sum pinned | Difference pinned | With a at its top: b at its bottom / top |
|---|---|---|---|---|---|
| supportMeasured | supportMeasuredW | -0.958 | yes | 58% / 0% (257,925) | |
| secondaryVPW | pointsExp | -0.3809 | 100% / 0% (44,103) | ||
| lifeKill | supportMeasuredW | 0.3601 | 16% / 62% (187,831) | ||
| supportMeasured | lifeKill | -0.3346 | 73% / 27% (257,925) | ||
| lifeKill | pointsExp | 0.2698 | 49% / 14% (187,831) | ||
| secondaryVPW | wHold | -0.2488 | 46% / 15% (44,103) | ||
| kill | pointsExp | 0.2345 | 46% / 16% (162,592) | ||
| supportMeasured | pointsExp | -0.2235 | 72% / 5% (257,925) | ||
| lifeKill | arrivalKillW | 0.2148 | 16% / 53% (187,831) | ||
| supportMeasured | wHold | 0.2108 | 19% / 44% (257,925) | ||
| supportMeasuredW | wHold | -0.1962 | 33% / 28% (198,991) | ||
| supportMeasured | secondaryVPW | -0.1728 | 52% / 5% (257,925) |
The T-661 stack (Track B with arrivalKillW 1.5, secondaryVPW 0.5, supportMeasuredW 3, shockPressureW 2, the weights as built) is a point of this grid: 81.04% on the five lists, against the grid's best 82.51% and its band from 79.05%. It is inside the winning region, one of 755,411 winners: the level shares above show how wide the region is around it (each dial's levels among the winners).
G3: the twelve family dials
32,949,342 combinations in 11.4 minutes. The best: 84.33% (per list 84% / 87% / 80% / 88% / 82%): G2 #2861264; move 0.25, defence 0.25, tough 0.25, objective 0.25, ranged 0, melee 0, weaponkw 0.25, leader 0.25, synapse 0, size 0, body -0.25, loadout 0.
Each dial's levels among the winners: the share of the winners at each level (the grid has every level equally often: 'even'), the same weighted by exp((pairwise − best) ÷ SE), the weighted 10th / 50th / 90th percentile (the error bar on the dial), the levels no winner has and the levels every winner has.
| Dial | Built | Levels | Share of winners | Weighted share | Even | Weighted 10 / 50 / 90 | Never | Always | Fake worlds whose 10–90 leaves out the built level | Units carrying it ( | index | > 0.5 SD) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fam:move | 0 | -0.25 / 0 / 0.25 | 13% / 31% / 57% | 12% / 31% / 58% | 33% | -0.25 / 0.25 / 0.25 | – | – | 0 of 8 | 36 | ||
| fam:defence | 0 | -0.25 / 0 / 0.25 | 0% / 14% / 86% | 0% / 13% / 87% | 33% | 0 / 0.25 / 0.25 | – | – | 0 of 8 | 27 | ||
| fam:tough | 0 | -0.25 / 0 / 0.25 | 5% / 42% / 54% | 4% / 39% / 56% | 33% | 0 / 0.25 / 0.25 | – | – | 0 of 8 | 33 | ||
| fam:objective | 0 | -0.25 / 0 / 0.25 | 3% / 27% / 70% | 3% / 27% / 70% | 33% | 0 / 0.25 / 0.25 | – | – | 0 of 8 | 31 | ||
| fam:ranged | 0 | -0.25 / 0 / 0.25 | 37% / 50% / 13% | 37% / 51% / 13% | 33% | -0.25 / 0 / 0.25 | – | – | 0 of 8 | 44 | ||
| fam:melee | 0 | -0.25 / 0 / 0.25 | 45% / 50% / 5% | 45% / 51% / 4% | 33% | -0.25 / 0 / 0 | – | – | 0 of 8 | 34 | ||
| fam:weaponkw | 0 | -0.25 / 0 / 0.25 | 0% / 38% / 62% | 0% / 38% / 62% | 33% | 0 / 0.25 / 0.25 | -0.25 | – | 0 of 8 | 28 | ||
| fam:leader | 0 | -0.25 / 0 / 0.25 | 18% / 31% / 51% | 18% / 31% / 51% | 33% | -0.25 / 0.25 / 0.25 | – | – | 0 of 8 | 32 | ||
| fam:synapse | 0 | -0.25 / 0 / 0.25 | 30% / 37% / 33% | 30% / 37% / 33% | 33% | -0.25 / 0 / 0.25 | – | – | 0 of 8 | 36 | ||
| fam:size | 0 | -0.25 / 0 / 0.25 | 35% / 65% / 0% | 34% / 66% / 0% | 33% | -0.25 / 0 / 0 | 0.25 | – | 0 of 8 | 16 | ||
| fam:body | 0 | -0.25 / 0 / 0.25 | 68% / 32% / 0% | 68% / 32% / 0% | 33% | -0.25 / -0.25 / 0 | 0.25 | – | 0 of 8 | 4 | ||
| fam:loadout | 0 | -20 / 0 / 20 | 5% / 68% / 27% | 5% / 70% / 26% | 33% | 0 / 0 / 20 | – | – | 0 of 8 | 38 |
With a gentle pull toward the built value (0.2 points of pairwise per level step away from it, so a dial moves only when the data asks): the best 83.23% after the pull; 76,043 winners. Weighted medians with the pull: fam:move 0.25, fam:defence 0.25, fam:tough 0, fam:objective 0.25, fam:ranged 0, fam:melee 0, fam:weaponkw 0, fam:leader 0, fam:synapse 0, fam:size 0, fam:body -0.25, fam:loadout 0.
Dials that go together or trade off among the winners (from a uniform sample of 28,636 winners, weighted): r the correlation of their levels; "sum pinned": one high goes with the other low, their sum varies far less than each alone (a trade-off); "difference pinned": they move together.
| Dial a | Dial b | r | Sum pinned | Difference pinned | With a at its top: b at its bottom / top |
|---|---|---|---|---|---|
| fam:ranged | fam:melee | 0.7549 | 0% / 34% (3,780) | ||
| fam:melee | fam:loadout | -0.4789 | 49% / 0% (1,360) | ||
| fam:ranged | fam:loadout | -0.4329 | 23% / 6% (3,780) | ||
| fam:objective | fam:size | -0.3824 | 48% / 0% (19,936) | ||
| fam:tough | fam:ranged | -0.3265 | 45% / 7% (15,486) | ||
| fam:defence | fam:tough | 0.2865 | 4% / 60% (24,585) | ||
| fam:tough | fam:size | 0.2686 | 27% / 0% (15,486) | ||
| fam:ranged | fam:weaponkw | -0.258 | 0% / 47% (3,780) | ||
| fam:ranged | fam:body | -0.211 | 93% / 0% (3,780) | ||
| fam:weaponkw | fam:loadout | -0.2108 | 7% / 20% (17,695) | ||
| fam:size | fam:body | 0.2078 | – / – (0) | ||
| fam:melee | fam:weaponkw | -0.2071 | 0% / 53% (1,360) |
Placebo families (three fake perks on 4, 10 and 30 random Tyranid units, acting on the whole Value, beside the twelve real families, every combination on the two built settings: 28,697,814 combinations; best 83.53%, 11,619 winners). A real family's range means something only when it is narrower or further from 0 than a placebo carried by about as many units:
| Family | Units carrying it | Weighted 10 / 50 / 90 | Leaves out 0 |
|---|---|---|---|
| Movement and arrival | 36 | -0.25 / 0 / 0.25 | no |
| Defensive rules | 27 | 0 / 0.25 / 0.25 | no |
| Toughness stats | 33 | 0 / 0 / 0.25 | no |
| OC, bodies and objectives | 31 | 0 / 0.25 / 0.25 | no |
| Ranged firepower | 44 | -0.25 / -0.25 / 0 | no |
| Melee firepower | 34 | -0.25 / -0.25 / 0 | no |
| Weapon keywords | 28 | 0 / 0 / 0.25 | no |
| Leaders and support | 32 | -0.25 / 0 / 0.25 | no |
| Synapse, psychic and Battle-shock | 36 | -0.25 / 0 / 0.25 | no |
| Size and points | 16 | -0.25 / -0.25 / 0 | no |
| Body type | 4 | -0.25 / -0.25 / 0 | no |
| Loadout and other rules | 38 | 0 / 0 / 20 | no |
| Placebo (4 random units) | 4 | 0 / 0 / 0 | no |
| Placebo (10 random units) | 10 | -0.25 / -0.25 / 0 | no |
| Placebo (30 random units) | 30 | 0 / 0 / 0.25 | no |
The outers (G3 runs every family combination on each): #0 G2 (82.2% best with families); #1 G2 (82.8% best with families); #2 G2 (84.1% best with families); #3 G2 (83.7% best with families); #4 G2 (83.8% best with families); #5 G2 (84.1% best with families); …. Shuffled letters, each on its own G2 bests: 62.2%, 67.3%, 67.8%.
2. The headline test: the Tyranid net on the other armies (the staged exam)
Fit on Tyranids only; every Tyranid combination at or above a generous floor stored (the wide net) and scored as it is on the other armies, gate by gate (the bar: pairwise ≥ 70% on an army); the full tables, the survivors and their dial ranges (the "code") are in reports/tiers/2026-10-05-crack-exam.md. The gates run:
- All 15 other armies (the whole net): built Track A mean 59.4% (± 2.2%), 1 of 15 armies at 70%; Track B 60.1% (± 2.2%), 1. G2: 5,121,913 scored, 0 survive, the most armies cleared 4, best mean 62.7%; G3: 11,764,811 scored, 0 survive, the most armies cleared 4, best mean 61.6%.
- space-marines + world-eaters (the whole net): built Track A mean 66.1% (± 3.4%), 0 of 2 armies at 70%; Track B 65.7% (± 4.1%), 0. G2: 5,121,913 scored, 0 survive, the most armies cleared 1, best mean 69.4%; G3: 11,764,811 scored, 0 survive, the most armies cleared 1, best mean 72.9%.
- All 15 other armies (on space-marines+world-eaters): built Track A mean 59.4% (± 2.2%), 1 of 15 armies at 70%; Track B 60.1% (± 2.2%), 1. G2: 1,000 scored, 0 survive, the most armies cleared 3, best mean 61.7%; G3: 1,000 scored, 0 survive, the most armies cleared 2, best mean 59.0%.
3. The searched part: a ladder of knob counts
Searched, not exhaustive. The searches climb a smooth surrogate of pairwise accuracy (per pair, 0.5 + 0.5 x ÷ (1 + |x|), x the log-Value gap ÷ 0.1: pairwise accuracy is a step function with flat plateaus) and report pairwise accuracy; the winning set is defined by pairwise within one bootstrap SE. Seeds: the track's built setting, its G1 and G2 winners, and for (c) G3's winners with the family dials split evenly over their members. The shuffled searches had the same budget and seeds from their own grids. The perk dials act on the parts of Value each perk affects (profileLines, section 4); the whole-Value form (profileDials) is kept as a hibernated switch.
| Track, rung | Knobs | Evaluations | Five lists: start → best (gain) | Fake worlds: gain over the truth (median, max) | Shuffles: best (gap) | Left-out list: start → fit | Held-out units: start → fit | 14 armies: start → best | Space Marines | Band solutions | Above every shuffle | Above 89% ⚑ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A (c) | 155 | 1,162,592 | 78.9% → 92.9% ⚑ (+14.0) | +1.8, +2.2 | 91.5% (+1.4) | 78.9% → 88.5% | 79.3% → 80.2% | 58.9% → 57.1% | 64.2% → 61.7% | 4,324 | 4,324 | 4,324 |
| B (c) | 152 | 1,162,463 | 77.5% → 92.8% ⚑ (+15.4) | +2.5, +3.0 | 92.6% (+0.2) | 77.5% → 88.4% | 77.6% → 79.8% | 59.9% → 54.0% | 61.6% → 57.2% | 4,832 | 330 | 4,832 |
Track A, rung (c): 155 knobs
Best 92.91% ⚑ (page 92.97%, ρ 0.883; per list 93% / 95% / 91% / 98% / 87%); band ±1.34%; 4,324 settings in the band. Shuffled searches: 90.9%, 90.6%, 91.5%. With the gentle pull (0.01 × Σ (distance ÷ range)²): best 93.01%, 1,494 in its band.
Per knob over the band, weighted by exp((pairwise − best) ÷ SE): the weighted 10th / 50th / 90th percentile (the error bar), the span of that range as a share of the prior (PINNED under 25%, FREE over half), the weighted share above and below the start, and the weighted median with the pull; the profile dials shown are the 25 whose freezing costs most (every knob is in the .json).
| Knob | Prior | Start | Best | Weighted 10 / 50 / 90 | Span | Status | Above / below start | Median with the pull | Fake worlds leaving out the start | Already modelled by |
|---|---|---|---|---|---|---|---|---|---|---|
| wSoak | × [0, 4] of the built weight | 1 | 0 | 0 / 0 / 1.1056 | 28% | between | 19% / 81% | 0.7488 | 0 of 8 | |
| wScore | × [0, 4] of the built weight | 1 | 1.6528 | 0 / 1.3459 / 3.2311 | 81% | FREE | 71% / 29% | 1.193 | 1 of 8 | |
| wActions | × [0, 4] of the built weight | 1 | 0 | 0 / 0 / 0.797 | 20% | PINNED | 6% / 94% | 0.9932 | 0 of 8 | |
| wHold | × [0, 4] of the built weight | 1 | 0 | 0 / 0.4863 / 1.2863 | 32% | between | 19% / 81% | 0.3739 | 0 of 8 | |
| wSpawn | × [0, 4] of the built weight | 1 | 0 | 0 / 0 / 1.3968 | 35% | between | 12% / 88% | 0.8079 | 2 of 8 | |
| wPresence | × [0, 4] of the built weight | 1 | 4 | 2.8873 / 4 / 4 | 28% | between | 100% / 0% | 1.6886 | 4 of 8 | |
| lands | [0.25, 3] | 1.5 | 0.5883 | 0.3956 / 1.1858 / 3 | 95% | FREE | 40% / 60% | 1.3295 | 0 of 8 | |
| reach | [0.5, 3] | 1 | 1.2956 | 0.5187 / 1.1292 / 1.3012 | 31% | between | 61% / 39% | 1.0461 | 1 of 8 | |
| r.mortal | [0.5, 4] | 1 | 0.85 | 0.5 / 0.85 / 1.2 | 20% | PINNED | 17% / 83% | 0.8317 | 6 of 8 | |
| r.first | [0.5, 4] | 2.64 | 0.9318 | 0.5 / 2.1296 / 3.2616 | 79% | FREE | 29% / 71% | 2.5803 | 6 of 8 | |
| r.movement | [0.5, 4] | 1 | 1.1339 | 0.5 / 1.3089 / 3.0179 | 72% | FREE | 70% / 30% | 0.8167 | 2 of 8 | |
| r.detachment | [0.5, 4] | 1.065 | 0.7621 | 0.5827 / 1.9854 / 4 | 98% | FREE | 62% / 38% | 0.9864 | 2 of 8 | |
| r.lone | [0.5, 4] | 1.93 | 3.2967 | 0.5 / 2.2467 / 4 | 100% | FREE | 53% / 47% | 2.007 | 0 of 8 | |
| r.synapse | [0.5, 4] | 2.18 | 1.9329 | 0.5 / 1.2849 / 1.9329 | 41% | between | 6% / 94% | 1.4229 | 7 of 8 | |
| r.debuff | [0.5, 4] | 1 | 0.6941 | 0.5 / 0.5 / 0.6941 | 6% | PINNED | 0% / 100% | 0.5 | 2 of 8 | |
| r.buff | [0.5, 4] | 1.12 | 2.3029 | 0.6356 / 1.267 / 2.3029 | 48% | between | 67% / 33% | 1.162 | 7 of 8 | |
| r.cp | [0.5, 4] | 1.88 | 4 | 1.2881 / 3.0599 / 4 | 77% | FREE | 76% / 24% | 2.3422 | 8 of 8 | |
| arrivalKillW | [0, 3] | 0 | 1.8 | 0.4482 / 1.7789 / 1.9716 | 51% | FREE | 94% / 0% | 0.4128 | 5 of 8 | |
| secondaryVPW | [0, 2] | 0 | 0.1656 | 0 / 0.1302 / 0.2 | 10% | PINNED | 59% / 0% | 0 | 0 of 8 | |
| shockPressureW | [0, 6] | 1 | 4.211 | 3.611 / 6 / 6 | 40% | between | 100% / 0% | 2.5204 | 1 of 8 | |
| threatSoakW | [0, 3] | 1 | 0.257 | 0 / 0.9873 / 3 | 100% | FREE | 49% / 51% | 1.0115 | 3 of 8 | |
| scoreFloorW | [0, 1] | 0 | 0.9029 | 0 / 0.557 / 0.9029 | 90% | FREE | 67% / 0% | 0 | 2 of 8 | |
| pointsExp | [0, 1] | 0 | 0 | 0 / 0 / 0.1 | 10% | PINNED | 20% / 0% | 0 | 2 of 8 | |
| pts:carriedDistinct | [−40, 40] points a unit per SD | 0 | 32 | -14.7012 / 1.653 / 32 | 58% | FREE | 57% / 43% | 3.2749 | 0 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:modelProfiles | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.4 | -0.5 / -0.4 / 0.0232 | 52% | FREE | 21% / 79% | -0.2533 | 4 of 8 | |
| pts:carriedTotal | [−40, 40] points a unit per SD | 0 | 32 | -6.2313 / 24.8713 / 33.4041 | 50% | between | 89% / 11% | 16.0753 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| pts:choicePicks | [−40, 40] points a unit per SD | 0 | -26.5929 | -34.5929 / -16.1662 / 12.0948 | 58% | FREE | 24% / 76% | -6.7288 | 3 of 8 | |
| pts:choiceEntries | [−40, 40] points a unit per SD | 0 | 30.1926 | -21.6568 / 9.5182 / 30.1926 | 65% | FREE | 57% / 43% | 5.4051 | 3 of 8 | |
| slope:shortRanged | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.456 | -0.4784 / -0.3245 / 0.2411 | 72% | FREE | 37% / 63% | -0.12 | 2 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_twinLinked | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.2439 | 0.2439 / 0.4 / 0.5 | 26% | between | 100% / 0% | 0.1834 | 5 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:ppmDiscount | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.2806 | -0.4325 / -0.3796 / -0.2806 | 15% | PINNED | 0% / 100% | -0.2266 | 7 of 8 | every line is per 100 points: points enter every line's denominator |
| pts:fx_noted | [−40, 40] points a unit per SD | 0 | 27.7231 | -30.7866 / -22.9075 / 27.7231 | 73% | FREE | 31% / 69% | 3.1244 | 0 of 8 | |
| slope:bestR_AP | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.1652 / 0.5 / 0.5 | 33% | between | 100% / 0% | 0.2356 | 0 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_anti | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.4502 | -0.4502 / -0.1699 / 0.1737 | 62% | FREE | 33% / 67% | -0.0292 | 2 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:carriedMelee | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.3561 | 0.1398 / 0.3561 / 0.5 | 36% | between | 92% / 8% | 0.2395 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_heavy | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.3118 / 0.5 / 0.5 | 19% | PINNED | 100% / 0% | 0.244 | 4 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_is_burrowers | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.2593 | -0.2405 / 0.1255 / 0.2593 | 50% | between | 79% / 21% | 0.0283 | 0 of 8 | arrival: the charge model's lands and the reach slider (Presence) |
| slope:fx_arrival | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | -0.4 / 0.5 / 0.5 | 90% | FREE | 87% / 13% | 0.131 | 0 of 8 | arrival: the charge model's lands and the reach slider (Presence) |
| slope:woundsPer100 | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.0504 | -0.2919 / -0.0118 / 0.1004 | 39% | between | 37% / 63% | 0.0565 | 1 of 8 | Soak (toughness, saves, wounds) and threat-gated Soak |
| slope:bestR_S | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.4527 | 0.1145 / 0.3 / 0.5 | 39% | between | 100% / 0% | 0.2323 | 0 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| pts:fx_partly | [−40, 40] points a unit per SD | 0 | 8.9751 | -16.524 / -0.412 / 10.3442 | 34% | between | 38% / 62% | 0.7664 | 3 of 8 | |
| slope:meleeMeq100 | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.3026 | -0.0423 / 0.3104 / 0.3669 | 41% | between | 88% / 12% | 0.2587 | 2 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:ix_durHeavy100 | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.024 / 0.5 / 0.5 | 48% | between | 97% / 3% | 0.298 | 0 of 8 | Soak (toughness, saves, wounds) and threat-gated Soak |
| slope:kw_extraAttacks | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.0614 | -0.0124 / 0.0614 / 0.1491 | 16% | PINNED | 87% / 14% | 0.0533 | 3 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:rangedMeq100 | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.5 / -0.1404 / 0.2873 | 79% | FREE | 31% / 69% | -0.0124 | 4 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_is_titanic | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.5 / -0.4764 / -0.2154 | 28% | between | 0% / 100% | -0.1833 | 4 of 8 | |
| slope:bestR_D | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.3212 | -0.1639 / 0.3069 / 0.3759 | 54% | FREE | 60% / 40% | 0.1154 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:maxAP_any | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.2101 / 0.385 / 0.5 | 29% | between | 100% / 0% | 0.063 | 4 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
Correlated knobs in the band (|r| > 0.6, or a sum or difference pinned while each alone varies): slope:bestR_skill ↔ pts:abilitiesOwn (r 0.9023); pts:abilitiesCount ↔ pts:fx_noted (r -0.895); slope:rangedChaff100 ↔ slope:ix_durHeavy100 (r -0.894, sum pinned); threatSoakW ↔ pts:fx_modelled (r -0.8925); wPresence ↔ slope:rangedVeh100 (r 0.8894); slope:has_fightsFirst ↔ pts:choiceEntries (r -0.8847); slope:bestR_range ↔ pts:abilitiesCount (r 0.8836); slope:kw_is_epicHero ↔ slope:fx_chosen (r 0.8826); r.debuff ↔ pts:rulesWeaponLike (r -0.8747); slope:bestR_A ↔ slope:rangedMeq100 (r -0.8743); slope:kw_blast ↔ slope:minRange (r -0.8713); slope:bestM_S ↔ slope:fx_lead (r -0.8706).
What the best loses with each knob frozen at its start (raw; and with the rest re-searched), the 12 costliest: pts:carriedDistinct 1.3 / 0.7; slope:modelProfiles 0.7 / 0.5; pts:carriedTotal 0.9 / 0.5; wPresence 0.9 / 0.4; pts:choicePicks 0.7 / 0.4; pts:choiceEntries 0.8 / 0.4; slope:shortRanged 1.3 / 0.4; secondaryVPW 0.3 / 0.3; slope:kw_twinLinked 0.4 / 0.3; slope:ppmDiscount 0.8 / 0.3; pts:fx_noted 0.5 / 0.3; wHold 0.8 / 0.2 (points of pairwise).
Leave one list out: auspexFull 82% → 89%; hivemindFull 84% → 92%; secondFull 80% → 86%; maelstrom 77% → 92%; astrategas 72% → 83%. Leave units out: fold 1 82% → 82%; fold 2 77% → 80%; fold 3 74% → 80%; fold 4 80% → 82%; fold 5 83% → 76%.
Track B, rung (c): 152 knobs
Best 92.84% ⚑ (page 92.95%, ρ 0.885; per list 95% / 95% / 90% / 98% / 88%); band ±1.46%; 4,832 settings in the band. Shuffled searches: 91.4%, 89.9%, 92.6%. With the gentle pull (0.01 × Σ (distance ÷ range)²): best 92.93%, 1,482 in its band.
Per knob over the band, weighted by exp((pairwise − best) ÷ SE): the weighted 10th / 50th / 90th percentile (the error bar), the span of that range as a share of the prior (PINNED under 25%, FREE over half), the weighted share above and below the start, and the weighted median with the pull; the profile dials shown are the 25 whose freezing costs most (every knob is in the .json).
| Knob | Prior | Start | Best | Weighted 10 / 50 / 90 | Span | Status | Above / below start | Median with the pull | Fake worlds leaving out the start | Already modelled by |
|---|---|---|---|---|---|---|---|---|---|---|
| wSoak | × [0, 4] of the built weight | 1 | 2.3339 | 0.4299 / 2.2791 / 4 | 89% | FREE | 69% / 31% | 0.7052 | 0 of 8 | |
| wScore | × [0, 4] of the built weight | 1 | 0.9562 | 0 / 1.5259 / 2.1929 | 55% | FREE | 65% / 35% | 1.0356 | 0 of 8 | |
| wActions | × [0, 4] of the built weight | 1 | 0 | 0 / 0 / 2 | 50% | between | 17% / 83% | 0.9795 | 0 of 8 | |
| wHold | × [0, 4] of the built weight | 1 | 0.1899 | 0 / 0.535 / 2.009 | 50% | FREE | 29% / 71% | 0.5335 | 1 of 8 | |
| wSpawn | × [0, 4] of the built weight | 1 | 0 | 0 / 0.2102 / 4 | 100% | FREE | 21% / 79% | 0.8652 | 1 of 8 | |
| wPresence | × [0, 4] of the built weight | 1 | 4 | 0 / 4 / 4 | 100% | FREE | 87% / 13% | 1.5425 | 8 of 8 | |
| lands | [0.25, 3] | 1.5 | 0.25 | 0.25 / 1.8601 / 2.9047 | 97% | FREE | 64% / 36% | 1.5397 | 0 of 8 | |
| reach | [0.5, 3] | 1 | 1.1002 | 0.8131 / 1.5099 / 2.8775 | 83% | FREE | 87% / 13% | 0.9922 | 0 of 8 | |
| r.mortal | [0.5, 4] | 1 | 2.3182 | 0.5 / 0.5 / 2.3182 | 52% | FREE | 26% / 74% | 1.1117 | 3 of 8 | |
| r.first | [0.5, 4] | 2.64 | 2.6 | 0.629 / 2.6 / 3.825 | 91% | FREE | 37% / 63% | 2.3152 | 5 of 8 | |
| r.movement | [0.5, 4] | 1 | 0.5 | 0.5 / 0.9929 / 2.701 | 63% | FREE | 43% / 57% | 0.8819 | 1 of 8 | |
| r.detachment | [0.5, 4] | 1.065 | 4 | 1.2716 / 1.5826 / 3.7212 | 70% | FREE | 100% / 0% | 1.2744 | 1 of 8 | |
| r.lone | [0.5, 4] | 1.93 | 2.5792 | 0.5 / 2.8407 / 4 | 100% | FREE | 70% / 30% | 2.0051 | 0 of 8 | |
| arrivalKillW | [0, 3] | 0 | 1.8377 | 0.2781 / 1.8377 / 2.4592 | 73% | FREE | 100% / 0% | 0.1996 | 7 of 8 | |
| secondaryVPW | [0, 2] | 0 | 0.2968 | 0 / 0 / 0.3754 | 19% | PINNED | 38% / 0% | 0 | 0 of 8 | |
| supportMeasuredW | [0, 8] | 1 | 1.8443 | 0 / 1.5622 / 4.4268 | 55% | FREE | 74% / 26% | 0.7206 | 4 of 8 | |
| shockPressureW | [0, 6] | 1 | 6 | 5.0255 / 6 / 6 | 16% | PINNED | 100% / 0% | 2.2589 | 1 of 8 | |
| threatSoakW | [0, 3] | 1 | 3 | 1.3598 / 2.5126 / 3 | 55% | FREE | 99% / 1% | 0.9635 | 4 of 8 | |
| scoreFloorW | [0, 1] | 0 | 0.1 | 0 / 0.4235 / 0.9 | 90% | FREE | 88% / 0% | 0 | 3 of 8 | |
| pointsExp | [0, 1] | 0 | 0 | 0 / 0.05 / 0.3483 | 35% | between | 51% / 0% | 0.0787 | 1 of 8 | |
| pts:dsWeapons | [−40, 40] points a unit per SD | 0 | 30.2928 | -27.2335 / 3.6915 / 30.2928 | 72% | FREE | 55% / 45% | -5.1743 | 1 of 8 | |
| pts:rulesCount | [−40, 40] points a unit per SD | 0 | 30.7552 | 11.3976 / 29.2799 / 32.5673 | 26% | between | 100% / 0% | 12.5128 | 3 of 8 | |
| slope:fnp | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.4142 / -0.2081 / 0.1742 | 59% | FREE | 32% / 68% | -0.0788 | 0 of 8 | Soak (toughness, saves, wounds) and threat-gated Soak |
| slope:fx_arrival | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | -0.0375 / 0.5 / 0.5 | 54% | FREE | 90% / 10% | 0.0758 | 2 of 8 | arrival: the charge model's lands and the reach slider (Presence) |
| slope:bestM_AP | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.4081 | -0.0894 / 0.0574 / 0.4081 | 50% | between | 83% / 17% | 0.0715 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:has_fightsFirst | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.5 / -0.1668 / 0.1438 | 64% | FREE | 44% / 56% | -0.0506 | 6 of 8 | r.first (Fights First kind) |
| slope:dsMelee | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.3334 | -0.2046 / 0.1159 / 0.3334 | 54% | FREE | 56% / 44% | -0.0175 | 3 of 8 | |
| slope:ppmDiscount | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.5 / -0.5 / -0.0436 | 46% | between | 0% / 100% | -0.2739 | 5 of 8 | every line is per 100 points: points enter every line's denominator |
| pts:fx_rules | [−40, 40] points a unit per SD | 0 | -31.2385 | -31.2385 / -14.5066 / 19.4773 | 63% | FREE | 41% / 59% | -1.2883 | 1 of 8 | |
| slope:kw_is_epicHero | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | -0.4187 / 0.2779 / 0.5 | 92% | FREE | 84% / 16% | 0.016 | 0 of 8 | |
| slope:kw_twinLinked | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.2566 | -0.0919 / 0.2566 / 0.3845 | 48% | between | 89% / 11% | 0.1024 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_sustained | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.0867 | -0.5 / -0.04 / 0.427 | 93% | FREE | 47% / 53% | 0.0379 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| pts:has_deadlyDemise | [−40, 40] points a unit per SD | 0 | 13.2922 | -21.2269 / -6.7903 / 13.2922 | 43% | between | 17% / 83% | -1.192 | 2 of 8 | |
| slope:kw_precision | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.193 / 0.4 / 0.5 | 31% | between | 100% / 0% | 0.2131 | 2 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:fx_enemy | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | 0.2849 / 0.5 / 0.5 | 22% | PINNED | 100% / 0% | 0.1103 | 5 of 8 | r.debuff / shockPressure |
| slope:formShare | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.2657 | -0.0464 / 0.1248 / 0.2657 | 31% | between | 73% / 27% | 0.1355 | 4 of 8 | every line is per 100 points: points enter every line's denominator |
| slope:has_leader | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.4 | 0.2237 / 0.3848 / 0.5 | 28% | between | 94% / 6% | 0.0704 | 3 of 8 | |
| slope:damagedBracket | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.2128 | -0.4 / -0.142 / 0.2608 | 66% | FREE | 33% / 67% | 0.0723 | 1 of 8 | Soak (toughness, saves, wounds) and threat-gated Soak |
| slope:fx_shock | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.3101 | -0.1923 / 0.2948 / 0.4576 | 65% | FREE | 89% / 11% | 0.1114 | 1 of 8 | r.debuff / shockPressure |
| slope:fx_once | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.5 | -0.5 / -0.5 / 0.4 | 90% | FREE | 33% / 67% | -0.0916 | 4 of 8 | |
| slope:bestR_skill | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.4 | -0.4 / 0.2254 / 0.5 | 90% | FREE | 51% / 49% | 0.0519 | 0 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| pts:defaultWeapons | [−40, 40] points a unit per SD | 0 | -40 | -40 / -1.3137 / 11.1602 | 64% | FREE | 39% / 61% | 0.3905 | 1 of 8 | |
| slope:shortRanged | [−0.5, 0.5] per SD (log of its parts) | 0 | -0.3343 | -0.3343 / -0.1894 / 0.0847 | 42% | between | 24% / 76% | -0.1275 | 3 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| pts:carriedTotal | [−40, 40] points a unit per SD | 0 | 16.7936 | 7.4844 / 25.5627 / 40 | 41% | between | 90% / 10% | 13.3802 | 1 of 8 | Kill (the engine's dice on the form's loadout; Burst and its targets) |
| slope:kw_is_vanguard | [−0.5, 0.5] per SD (log of its parts) | 0 | 0.5 | -0.0155 / 0.5 / 0.5 | 52% | FREE | 87% / 13% | 0.076 | 0 of 8 | arrival: the charge model's lands and the reach slider (Presence) |
Correlated knobs in the band (|r| > 0.6, or a sum or difference pinned while each alone varies): slope:has_loneOperative ↔ slope:fx_arrival (r -0.9225); wPresence ↔ slope:carriedRanged (r -0.9217); wSpawn ↔ slope:ppmDiscount (r 0.9201); slope:has_scouts ↔ slope:ix_invxT (r -0.918, sum pinned); slope:kw_anti ↔ slope:capacityPer100 (r -0.9166, sum pinned); slope:bestR_A ↔ slope:meleeVeh100 (r -0.9156, sum pinned); reach ↔ slope:woundsPer100 (r -0.9152, sum pinned); slope:rangedChaff100 ↔ slope:spawns (r 0.9019, difference pinned); pts:defaultWeapons ↔ slope:maxAP_any (r 0.8981); secondaryVPW ↔ pts:carriedDistinct (r 0.8824); slope:bestM_AP ↔ pts:has_deadlyDemise (r 0.882); slope:rangedMeq100 ↔ pts:carriedDistinct (r -0.8801).
What the best loses with each knob frozen at its start (raw; and with the rest re-searched), the 12 costliest: pts:dsWeapons 1.2 / 0.3; pts:rulesCount 0.7 / 0.3; slope:fnp 0.7 / 0.3; shockPressureW 0.7 / 0.2; slope:fx_arrival 0.7 / 0.2; threatSoakW 0.4 / 0.2; slope:bestM_AP 0.9 / 0.2; slope:has_fightsFirst 0.8 / 0.2; slope:dsMelee 0.6 / 0.2; slope:ppmDiscount 1.9 / 0.2; arrivalKillW 1.8 / 0.2; pts:fx_rules 0.6 / 0.2 (points of pairwise).
Leave one list out: auspexFull 79% → 89%; hivemindFull 81% → 91%; secondFull 77% → 86%; maelstrom 74% → 93%; astrategas 75% → 83%. Leave units out: fold 1 76% → 88%; fold 2 79% → 81%; fold 3 77% → 80%; fold 4 75% → 80%; fold 5 81% → 71%.
4. The family layer and what each family's dial acts on
305 datasheet variables (tools/diagnose.js's 341 less the ledger's own lines, kill by class and rule kinds); 132 vary on the graded Tyranid units after grouping near-duplicates (|r| ≥ 0.95). Each goes in one of twelve families; a family's index is the mean of its members' standardised values (each oriented so more is better by the catalogue's sign) ÷ its SD over the Tyranid units, and its dial is a slope per SD on the parts of Value it affects (profileLines): −0.25, 0 or +0.25 (× e^{±0.25} per SD), the flat family −20, 0 or +20 points a unit per SD at the median unit's rate. The same family setting is the same per-variable slopes on every army.
| Family | Acts on | What it scales: the perk's added part (counterfactual) or the carrier's whole line | Already modelled by the dice engine (the dial is then a correction on top: 0 = trust the engine) | Units carrying it | Winners' weighted 10 / 50 / 90 | The designers' implied dial (T-663) | Members |
|---|---|---|---|---|---|---|---|
| Movement and arrival | Kill on arrival, Presence, Score | the added part on Kill (Kill on arrival); the whole line on Presence and Score | partly: the charge model's lands (Move, arrival ways) and Kill on arrival (arrivalKillW); the reach slider on Presence | 36 | -0.25 / 0.25 / 0.25 | not meaningful (inside the charge model; in points Fly +10%, Deep Strike +2%, Scouts +1%) | M, has_deepStrike, has_scouts, has_infiltrators, kw_is_fly, kw_is_burrowers, kw_is_vanguard, fx_arrival, fx_move, arrives, ix_MxMelee, kwu_Aircraft |
| Defensive rules | Soak, Kill needing the unit alive | the whole line (no counterfactual in the frozen data) | yes: invulnerable saves, Feel No Pain, Stealth (as cover) and the like are in the engine's Soak | 27 | 0 / 0.25 / 0.25 | Lone Operative 1.08× (multiplier) or 8.1× (increment); Feel No Pain 0.23×; Stealth not meaningful | −inv, −fnp, −damagedBracket, has_loneOperative, has_stealth, ix_invxT |
| Toughness stats | Soak, Kill needing the unit alive | the whole line (no counterfactual in the frozen data) | yes: Toughness, Save and Wounds are the engine's Soak | 33 | 0 / 0.25 / 0.25 | – | T, −Sv, W, −ptsPerWound, woundsPer100, ix_durLight100, ix_durHeavy100 |
| OC, bodies and objectives | Score, Hold | the whole line (no counterfactual in the frozen data) | yes: OC per 100 points is Score and Hold | 31 | 0 / 0.25 / 0.25 | not meaningful (Hold and Score are weighted lines; in points Battleline +2%, OC per model +0%) | −Ld, OC, kw_is_battleline, fx_spawn, spawns, ix_bodiesxOC, kwu_Harvester, kwu_Endless_Multitude |
| Ranged firepower | Kill on arrival, Kill needing the unit alive, the rest of Kill | the whole line (no counterfactual in the frozen data) | yes: the engine's dice on the form's loadout (Burst, its targets) | 44 | -0.25 / 0 / 0.25 | – | bestR_A, bestR_S, bestR_AP, bestR_D, bestR_skill, bestR_range, rangedMeq100, rangedVeh100, rangedChaff100, rangedAttacks100, dsRanged, carriedRanged, minRange, shortRanged |
| Melee firepower | Kill on arrival, Kill needing the unit alive, the rest of Kill | the whole line (no counterfactual in the frozen data) | yes: the engine's dice and the charge model | 34 | -0.25 / 0 / 0 | – | bestM_A, bestM_S, bestM_AP, bestM_D, bestM_skill, meleeMeq100, meleeVeh100, meleeChaff100, meleeAttacks100, has_fightsFirst, dsMelee, carriedMelee |
| Weapon keywords | Kill on arrival, Kill needing the unit alive, the rest of Kill | the whole line (no counterfactual in the frozen data) | mostly: Lethal, Sustained, Devastating, Anti-X, Torrent, Blast, Melta and the like are in the dice | 28 | 0 / 0.25 / 0.25 | 1.12× (0.84 to 1.44) | kw_anti, kw_devastating, kw_sustained, kw_precision, kw_torrent, kw_blast, kw_twinLinked, kw_ignoresCover, kw_psychic, kw_heavy, kw_assault, kw_extraAttacks, maxS_any, maxAP_any, maxD_any, maxA_any, anti_infantry, anti_vehicle |
| Leaders and support | the support credit | the added part (the support credit) | partly: support measured (T-657) on the friends reached; the rule multipliers when it is off | 32 | -0.25 / 0.25 / 0.25 | 0.97× (multiplier) or −0.05× (increment): the points don't pay for the support credit | has_leader, kw_is_character, kw_is_epicHero, leadsCount, fx_heal, fx_cp, fx_aura, fx_mark, fx_chosen, fx_once, fx_lead, fx_attMods, lfx_effects, buffsOthers, lfx_rules, ledByCount |
| Synapse, psychic and Battle-shock | the support credit, Battle-shock | the added part (the support credit, Battle-shock pressure) | partly: support measured (Synapse), Battle-shock pressure (T-653) | 36 | -0.25 / 0 / 0.25 | not meaningful (held at 1 under support measured; +4% in points) | has_synapse, kw_is_psyker, fx_enemy, fx_shock, fx_mortal, fx_synapse, fx_overwatch |
| Size and points | the whole Value (no single part) | the whole line (no counterfactual in the frozen data) | every line is per 100 points | 16 | -0.25 / 0 / 0 | – | models, −pts, ptsPerModel, sizeRatio, ppmDiscount, formShare, modelProfiles |
| Body type | the whole Value (no single part) | the whole line (no counterfactual in the frozen data) | partly: through the engine's targets and Soak | 4 | -0.25 / -0.25 / 0 | – | kw_is_monster, kw_is_infantry, kw_is_transport, kw_is_titanic, kw_is_beast, capacityPer100 |
| Loadout and other rules | flat points a unit (no line to scale) | the whole line (no counterfactual in the frozen data) | no: the rules the effects files only note | 38 | 0 / 0 / 20 | – | has_deadlyDemise, dsWeapons, dsMultiProfile, carriedDistinct, carriedTotal, defaultWeapons, choiceEntries, choicePicks, limitsCount, dd_value, rulesWeaponLike, rulesCount, abilitiesCount, abilitiesOwn, fx_rules, fx_modelled, fx_partly, fx_noted, fx_condEffects |
The designers' column is T-663's price list (reports/tiers/2026-10-05-pricelist.md, section 7) on its own scale, 1× = what the engine already credits: a dial above 1× there points the same way as a positive slope here, below 1× as a negative one. Our family dials are slopes per SD of a family index on the lines it acts on, not multipliers on one perk's credit, so only the direction compares; where T-663 says its price isn't meaningful on the dial scale the column says so.
The appraisal asks that a dial scale what its perk adds (the line with the perk minus the line without), so 0 = the perk adds nothing and 1 = trust the engine. The frozen data holds that counterfactual only where a line is itself a perk's addition: Kill on arrival (what arriving adds), the support credit (what support rules add to the friends they reach), Battle-shock pressure (what the shock rules add) and secondary VP. Everywhere else the dial scales the carrier's whole line (a with-and-without dice run per perk would be a new engine stage; not built here), but only the line the perk affects, and as a slope per SD of the family's index (e^{±0.25} per SD), so nothing stacks toward 64×.
5. Unset by Tyranids
Dials for rules and variables no Tyranid unit carries (or on fewer than 3 Tyranid units, or not varying across them) stay at their built value (1×) on the other armies. Rule kinds: overwatch (7 armies), heal (13 armies), spawn (2 armies). Datasheet variables: 145 of 305 (145 don't vary on the graded Tyranid units; the rest are near-duplicates of a kept one), among them kw_lethal, kw_indirect, kw_melta, kw_pistol, has_hover, kw_is_towering, kw_is_swarm, fx_oc, fx_list, fx_defMods, kwu_Vehicle, kwu_Walker, kwu_Mounted, kwu_Dedicated_Transport, kwu_Grenades, kwu_Smoke, kwu_Frame, kwu_Tacticus, kwu_Daemon, kwu_Terminator, kwu_Jump_Pack, kwu_Squadron, kwu_Phobos, kwu_Gravis, kwu_Support, kwu_Captain, kwu_Chaplain, kwu_Ancient, kwu_Lieutenant, kwu_Librarian…. The optional step of letting these move on the selection armies only (Tyranid dials held) was not run.
6. T-661's dials, read from the page's DIALS list
| Dial | Switch | Default | Range | How the crack treats it |
|---|---|---|---|---|
| arrivalKillW | arrivalKill | 1 | 0–3 | grid G2 (a fast dial) |
| scarceAnswersW | scarceAnswers | 1 | 0–3 | checked at the winners through compute() |
| wCarry | carryDedicated | 0 | 0–3 | checked at the winners through compute() |
| scoreFloorW | scoreFloor | 1 | 0–3 | grid G2 (a fast dial) |
| killClassWeightW | killClassWeight | 1 | 0–3 | checked at the winners (a model per value) |
| secondaryVPW | secondaryVP | 1 | 0–3 | grid G2 (a fast dial) |
| missionVPW | missionVP | 1 | 0–3 | checked at the winners through compute() |
| vpMissionW | vpLedger | 1 | 0–3 | checked at the winners through compute() |
| vpPerUnit | vpLedger | 1 | 0–1 | checked at the winners through compute() |
| threatSoakW | threatSoak | 1 | 0–3 | grid G2 (a fast dial) |
| shockPressureW | shockPressure | 1 | 0–3 | grid G2 (a fast dial) |
| supportMeasuredW | supportMeasured | 1 | 0–3 | grid G2 (a fast dial) |
| preferC | preferredTargets | 4 | 0.5–16 | checked at the winners (a model per value) |
| preferN | preferredTargets | 4 | 1–8 | checked at the winners (a model per value) |
| attachRate | attachChars | measured | 0–1 | grid G2 (attach at 0.8 or 0.4) |
| lifeSurvive | lifeKill | 1 | 0–2 | checked at the winners (a model per value) |
| lifeBlend | lifeKill | 0.5 | 0–1 | checked at the winners (a model per value) |
The dials only compute() reproduces, checked at G2's 10 best winners and the T-661 stack (the change in five-list pairwise when the dial's switch is on at each level, best case and mean over the settings checked):
| Dial | Settings × levels | Best change | Mean change |
|---|---|---|---|
| scarceAnswersW | 22 | −1.5 pts (at 0.5) | −5.6 pts |
| missionVPW | 33 | −0.7 pts (at 0.25) | −4.9 pts |
| vpMissionW | 22 | −2.1 pts (at 0.5) | −7.6 pts |
| wCarry | 22 | −0.1 pts (at 0.5) | −0.4 pts |
| preferC | 2 | −1.1 pts (at 8) | −2.0 pts |
| preferN | 2 | −1.1 pts (at 2) | −1.2 pts |
| lifeSurvive | 0 | – | – |
| lifeBlend | 0 | – | – |
7. The panels' dates against the frozen points (BSData 374f505, 30 Sep)
| List | Date | Edition | Aligned to | Units left out for a points move over 10% |
|---|---|---|---|---|
| auspexFull | 2026-09-12 | 11th, after the 5 Sep balance update, before any new Tyranid codex. | none in our data | none |
| hivemindFull | 2026-06-21 | 11th, launch window (before any balance update). | 80568cc | Pyrovores 45 → 40; Neurotyrant 115 → 130; Tyrannocyte 90 → 80; Toxicrene 135 → 120 |
| secondFull | 2026-07-27 | 11th, after the July balance dataslate. | 80568cc | Pyrovores 45 → 40; Neurotyrant 115 → 130; Tyrannocyte 90 → 80; Toxicrene 135 → 120 |
| maelstrom | 2026-03 | 10th | none in our data | none |
| astrategas | 2026-04-21 | 10th (April 2026) | none in our data | none |
With and without stale grades (T-667's tools/panelstale.json: the units a panel graded on other points, rules or data than the frozen ones; a 10th-edition panel's blanket flag not used; units left out per list: auspexFull 0, hivemindFull 16, secondFull 1, maelstrom 0, astrategas 0). Five-list pairwise on rows, with → without:
| Setting | With | Without | Change |
|---|---|---|---|
| Track A (built) | 78.91% | 78.41% | −0.5 |
| Track B (built) | 77.48% | 77.17% | −0.3 |
| G2 best | 82.51% | 82.13% | −0.4 |
| G3 best | 84.33% | 84.39% | +0.1 |
Maelstrom and Astrategas graded 10th-edition units: no 11th-edition points exist for their dates, so every pair in those two lists is a cross-edition pair no dial can be expected to fit (their per-list scores are lowest throughout). HivemindHobbies and Into the Hive Mind are aligned to 2 Jul (80568cc); four units moved more than 10% by 30 Sep and are already out of their scores; smaller moves stay in. Auspex's list (12 Sep) is graded on the frozen points.
8. Method and caveats
- Exactness: tools/crack2model.js reproduces compute() unit by unit (about 1e-15) at random settings of every knob, all 32 settings of the model switches, both profile forms and on every army; each grid's best and a sample of its winners, and each ladder rung's best, were re-scored through compute() and ledgerstep's shape().
- The noise band is one bootstrap SE of the five-list pairwise at the best combination (graded units resampled with replacement, every pair of copies counted, 1,000 resamples): about 3 to 4 points, because 52 units and five correlated lists are little data, so 'within the band' is a generous test.
- Winners are counted from the score histogram (0.0175-point bins), so a count can be off by the combinations in the bin at the band's edge; the level shares and weights come from the same bins (scores of 72% and up).
- Shuffles move each graded unit's row of five letters whole (one permutation for all lists), the fair null for a five-list objective. The grids score every combination on the same 3 shuffles (a sanity check, as the coordinator asked) and 8 fake worlds in the same pass; G3's shuffles and fake worlds run on their own G2 bests; the searches' shuffles have the same budget and seeds from their own grids.
- The fake worlds: Track A's built Values are the truth (every perk and family at its built value); each fake list draws its letters from the truth plus Gaussian noise in log Value (σ 0.39), cut to the real list's own letter counts (rows for Auspex), the noise calibrated so the fake lists agree one to one as the real ones do (87.9% against 89.5%). The truth scores 90.4% on its own fake letters. A world's "gain" is its grid's best minus the truth's score on the same letters: what a grid finds by luck when there is nothing to find.
- Panel staleness (T-667): the objective keeps every graded unit; section 7 gives the built tracks and each grid's best with and without the units tools/panelstale.json flags.
- Kill's weight anchors the scale (Value's order ignores a common factor); the other weights move as multiples of their built values, 0 meaning off. Rule kinds on fewer than 3 Tyranid units (heal's 2, Better Overwatch, Jordan's call) are held; with support measured on, the five support kinds have no multiplier.
- Kill on arrival, secondary VP and the Score floor are built on in every model with their strengths as dials; a strength of 0 is the switch off, exactly (the fast path and the page agree to 1e-15 there).
- The family dials (G3) and the ladder's perk dials act on the parts of Value each perk affects (profileLines): Kill on arrival, Kill needing the unit alive ((L − 1) ÷ L of it, L the activations it lives to get from tools/burst.js --life; 0.5 where a form has none), the rest of Kill, Soak, Score, Actions, Hold, Spawn, Presence, the support credit, Battle-shock, secondary VP. The whole-Value form (profileDials) is kept as a hibernated switch.
- The other armies: each setting's knobs by name (weights, lands, reach, the rule kinds an army has, the features its units have); the exam armies were drawn by seed before any run and never chose anything.
- The reference medians the ledger's lines are priced at (Battle-shock, support measured, secondary VP, the flat points) are taken with the profile dials off, so a perk's dial never moves another unit's Value.