4 Oct 2026. Diagnosis only: the switch's behaviour is unchanged, nothing is judged. Base: tools/ledger-benchmarks/2026-10-04-provisional-26.json (burstKill and threatSoak on), secondaryVP on top. Movements from node tools/stepmoves.js --base tools/ledger-benchmarks/2026-10-04-provisional-26.json --on secondaryVP.
Summary
- The secondary line accounts for nearly the whole change. Dropping the Actions line and the form's own bodies from Presence costs each unit 1 to 24 Value. Soak, Kill, Score, Hold and Spawn don't move at all (Δ 0 on every row below).
- The line doesn't lean cheap, because the "alive" term ties VP to a unit's size.
- Every unit faces the same enemy fire, B = 2,000 ÷ 12 = 167 points a turn, whatever it costs. So a cheap unit is removed in about one enemy turn: r 0.6 to 1, alive 0.20 to 0.33. A big, tough unit is almost never removed: r 0.05 to 0.2, alive 0.9 to 1.
- On Tyranid ranking rows, alive correlates with points at ρ 0.80, and the form's VP a game at ρ 0.64.
- That cancels the per-100-points division: the line's Value correlates with points at only ρ 0.11, where the prediction expected clearly negative.
- So big, tough units collect 4 to 5.6 VP a game (Tyrannofex 4.4, Tervigon and both Norns 4.5, Land Raiders 5.5 to 5.6, Redemptor 5.4). The aimed cheap units collect 0.3 to 0.9 (Biovores 0.90, Lictor 0.88, Gargoyles 0.91, Ripper Swarms 0.27).
- The line is about half the size I estimated for cheap units. The prediction said about +900 Value for a 60-point unit at the typical 1.8 VP. In fact Biovores gained +446 and the Lictor +438, because their VP is 0.9: alive 0.25 halves them.
- The median unit's line came out at +380 Value. P is 971; the median VP is 1.59, against the 1.8 I'd expected.
- The army's 21.3 VP are shared by chance, and the big units, alive at 1, take most of the shares.
- The burst units weren't knocked back by the burst change. Raveners (27 → 34) and Genestealers (29 → 35) simply gained less than the units around them: alive 0.29 and 0.20, so +255 each, against +450 to +840 for the tough units passing them.
Decomposition, Tyranids
Each unit's ranking form, the same form off and on.
- Δ other is Kill + Score + Hold + Spawn.
- VP is the form's secondary VP a game.
- Alive own is the mean share of our turns 1 to 5 it is still on the table.
- Reach is shown at 12" and 24".
| Unit | pts | rank | Value off → on | Δ secondary | Δ actions | Δ presence | Δ soak | Δ other | VP | alive own | reach 12/24 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Aimed | |||||||||||
| Biovores | 60 | 8 → 10 | 2834 → 3248 | +446 | −3 | −5 | 0 | 0 | 0.90 | 0.26 | 1.00/1.00 |
| Lictor | 60 | 2 → 1 | 4047 → 4471 | +438 | −5 | −10 | 0 | 0 | 0.88 | 0.25 | 1.00/1.00 |
| Neurolictor | 80 | 28 → 23 | 959 → 1568 | +632 | −8 | −16 | 0 | 0 | 1.69 | 0.43 | 1.00/1.00 |
| Gargoyles | 155 | 47 → 48 | 351 → 524 | +176 | −1 | −2 | 0 | 0 | 0.91 | 0.26 | 1.00/1.00 |
| Ripper Swarms | 30 | 50 → 49 | 113 → 328 | +273 | −5 | −10 | 0 | 0 | 0.27 | 0.20 | 1.00/1.00 |
| Mucolid Spores | 30 | 51 → 50 | 16 → 273 | +273 | −5 | −10 | 0 | 0 | 0.27 | 0.20 | 1.00/1.00 |
| Spore Mines | 55 | 52 → 52 | 9 → 149 | +149 | −3 | −6 | 0 | 0 | 0.27 | 0.20 | 1.00/1.00 |
| Sporocyst | 145 | 49 → 51 | 222 → 219 | 0 | −1 | −2 | 0 | 0 | 0.00 | 0.36 | 0/0 |
| Hormagaunts | 120 | 19 → 24 | 1272 → 1557 | +289 | −1 | −3 | 0 | 0 | 1.16 | 0.33 | 1.00/0.81 |
| Deathleaper | 80 | 7 → 5 | 3114 → 3958 | +855 | −4 | −7 | 0 | 0 | 2.29 | 0.57 | 1.00/1.00 |
| Big risers | |||||||||||
| Tyrannofex | 170 | 26 → 19 | 984 → 1747 | +765 | −1 | −2 | 0 | 0 | 4.36 | 1.00 | 1.00/1.00 |
| Tyrant Guard | 170 | 46 → 39 | 429 → 976 | +550 | −1 | −2 | 0 | 0 | 3.13 | 0.73 | 1.00/1.00 |
| Psychophage | 110 | 35 → 28 | 862 → 1370 | +513 | −2 | −3 | 0 | 0 | 1.89 | 0.48 | 1.00/1.00 |
| Toxicrene | 120 | 31 → 26 | 901 → 1486 | +590 | −1 | −3 | 0 | 0 | 2.37 | 0.58 | 1.00/1.00 |
| Hive Guard | 160 | 34 → 27 | 863 → 1377 | +517 | −1 | −2 | 0 | 0 | 2.77 | 0.67 | 1.00/1.00 |
| Tervigon | 160 | 18 → 15 | 1305 → 2139 | +842 | −3 | −5 | 0 | 0 | 4.51 | 1.00 | 1.00/1.00 |
| Old One Eye | 140 | 10 → 8 | 2627 → 3395 | +807 | −3 | −6 | 0 | 0 | 3.78 | 0.90 | 1.00/1.00 |
| Big fallers | |||||||||||
| Raveners | 125 | 27 → 34 | 964 → 1215 | +255 | −1 | −2 | 0 | 0 | 1.07 | 0.29 | 1.00/1.00 |
| Genestealers | 75 | 29 → 35 | 947 → 1195 | +255 | −2 | −4 | 0 | 0 | 0.64 | 0.20 | 1.00/1.00 |
| Winged Tyranid Prime | 65 | 24 → 32 | 1053 → 1332 | +294 | −5 | −10 | 0 | 0 | 0.64 | 0.20 | 1.00/1.00 |
| Harpy | 185 | 30 → 40 | 937 → 937 | 0 | 0 | 0 | 0 | 0 | 0 (aircraft) | – | – |
Space Marines show the same pattern:
| Unit | pts | rank | Δ secondary | VP | alive own |
|---|---|---|---|---|---|
| Repulsor | 170 | 38 → 12 | +498 | 4.18 | 0.82 |
| Redemptor Dreadnought | 195 | 53 → 19 | +556 | 5.35 | 1.00 |
| Land Raider | 220 | 51 → 24 | +510 | 5.54 | 1.00 |
| Land Raider Crusader | 220 | 59 → 30 | +519 | 5.63 | 1.00 |
| Inceptor Squad | 125 | 28 → 45 | +182 | 1.13 | 0.26 |
| Land Speeder | 105 | 36 → 50 | +194 | 1.00 | 0.23 |
| Eliminator Squad | 75 | 34 → 43 | +219 | 0.81 | 0.20 |
| Sternguard Veteran Squad | 100 | 43 → 56 | +150 | 0.74 | 0.21 |
Why: a fixed B per unit
The survival term reuses Kill over the game (gameOf): r = min(1, B ÷ need), where need is the enemy points that must shoot the unit to remove it. need grows with the unit's points (it is Soak per 100 × points ÷ 100), but B is the same for every unit: 167 points of enemy shooting a turn, sized for a list of 12 equal units.
So a 30-to-80-point unit is removed in the enemy's first turn whatever its Soak per point, and a 170-to-250-point monster or vehicle is never removed. Alive then measures size, not durability, and VP a game follows points. Dividing by points to get the line per 100 only undoes that, so the cheap lean the card is about never appears. The idea itself isn't what's wrong; the ruler is.
One fix: the enemy's fire on each unit in proportion to its points
B_f = B × the form's points ÷ (the typical army's points ÷ the list's units). At the default B (2,000 ÷ 12) that is simply B_f = the form's points. The Indirect Fire unit still takes half.
- Reasoning: the typical enemy army's 2,000 points of shooting spread over our 2,000 points. B = 2,000 ÷ 12 was that same spread, assuming 12 equal units. A 30-point unit doesn't draw a twelfth of the enemy's fire; a 250-point one draws more.
- What it measures: with fire in proportion to points, r = 100 ÷ (Soak per 100 × its rules on Soak × the Soak effects). Alive then measures durability per point, independent of size. That is the "survive to score" the card asks for.
- No new constant: it uses fireB and the list's 12 units as they are.
- Scope: it changes only the secondary line's alive term. Kill over the game keeps its own B.
- Rejected alternative: fire weighted by each unit's threat, as threatSoak weights Soak. A unit with no Kill (Spore Mines, Mucolid Spores) would never be shot, so a floor would be needed, which means a new constant.
What the fix does to the line's inputs. Taken from a scratch copy of ledger.js with only that line changed (not the switch). These are inputs only, with no ranks and no judgement:
- Correlation with points, on Tyranid ranking rows: alive ρ 0.80 → 0.38, VP ρ 0.64 → 0.26, the line's Value ρ 0.11 → −0.51. The lean becomes cheap, as intended.
- Medians: VP 1.59 → 1.80, the line's Value 380 → 462.
| Unit | pts | r now | alive now | VP now | line Value now | r fix | alive fix | VP fix | line Value fix |
|---|---|---|---|---|---|---|---|---|---|
| Biovores | 60 | 0.78 | 0.26 | 0.90 | 446 | 0.28 | 0.71 | 2.41 | 1198 |
| Lictor | 60 | 0.79 | 0.25 | 0.88 | 438 | 0.28 | 0.70 | 2.37 | 1180 |
| Neurolictor | 80 | 0.46 | 0.43 | 1.69 | 632 | 0.22 | 0.90 | 3.10 | 1157 |
| Deathleaper | 80 | 0.35 | 0.57 | 2.29 | 855 | 0.17 | 1.00 | 3.63 | 1356 |
| Genestealers | 75 | 1.00 | 0.20 | 0.64 | 255 | 0.54 | 0.36 | 1.13 | 451 |
| Hormagaunts | 120 | 0.61 | 0.33 | 1.16 | 289 | 0.44 | 0.43 | 1.33 | 332 |
| Termagants | 110 | 0.61 | 0.33 | 1.20 | 325 | 0.46 | 0.42 | 1.33 | 663 |
| Raveners | 125 | 0.68 | 0.29 | 1.07 | 255 | 0.51 | 0.38 | 1.20 | 287 |
| Gargoyles | 155 | 0.76 | 0.26 | 0.91 | 176 | 0.78 | 0.26 | 0.74 | 275 |
| Ripper Swarms | 30 | 1.00 | 0.20 | 0.27 | 273 | 0.59 | 0.34 | 0.43 | 258 |
| Mucolid Spores | 30 | 1.00 | 0.20 | 0.27 | 273 | 1.00 | 0.20 | 0.23 | 229 |
| Spore Mines | 55 | 1.00 | 0.20 | 0.27 | 149 | 1.00 | 0.20 | 0.23 | 125 |
| Tyrannofex | 170 | 0.09 | 1.00 | 4.36 | 765 | 0.09 | 1.00 | 3.53 | 620 |
| Tervigon | 160 | 0.16 | 1.00 | 4.51 | 842 | 0.15 | 1.00 | 3.65 | 682 |
| Norn Assimilator | 250 | 0.16 | 1.00 | 4.51 | 539 | 0.24 | 0.85 | 2.90 | 347 |
| Hierophant | 810 | 0.05 | 1.00 | 4.16 | 153 | 0.22 | 0.91 | 2.85 | 105 |
What the fix doesn't do:
- Gargoyles stay low. Their Soak per point is poor (r 0.78 either way), so they don't survive to score. Lifting them would need either the 11th-edition Hidden rule (infantry in terrain that hasn't fired is seen only within 15") or cheapness drawing less fire. Neither is in this fix.
- The Spore pieces stay at the bottom (OC 0, fragile).
- Not checked: the Termagants' line roughly doubles under the fix while their VP barely moves. That points to a different ranking form (a cheaper squad) being chosen, but I haven't confirmed it.
The step would be measured again as its own step, with its prediction written first.
Termagants, resolved (step 27b as built, provisional-26 base, the unit's own forms only)
The doubt was why the Termagants' line roughly doubled under the fix while their VP barely moved. It doubles because their ranking form changes from ×20 to ×10.
Under step 27's alive term, a 60-point ×10 squad faced the same 167 points of fire as a 110-point ×20, so it was removed at once. Under fire in proportion to points, both squads face fire sized to their own points, so they survive about as well (r 0.46 against 0.40). The ×10 then scores nearly the ×20's VP for 55% of the points:
| Form (Subterranean Assault, datasheet wargear) | pts | VP | r | alive | line Value | Kill contribution | Value |
|---|---|---|---|---|---|---|---|
| Termagants ×10 | 60 | 1.33 | 0.46 | 0.42 | 663 | 72 | 1043 |
| Termagants ×20 | 110 | 1.48 | 0.40 | 0.46 | 403 | 197 | 964 |
The ×10 wins on Value (1043 against 964) despite its lower Kill per 100 points, so it becomes the ranking form. That is the intended reading: minimum squads as scorers, which is how players use them.
One side note, not part of this card: the ×10's Kill contribution per 100 points is well under the ×20's for the same models (72 against 197).