Tactical Reroll
⋯

Step 27 (secondary VP, T-641): what moved the units, and one fix

From reports/tiers/2026-10-04-secvp-diagnosis.md , rendered when the site is built.

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

Decomposition, Tyranids

Each unit's ranking form, the same form off and on.

UnitptsrankValue off → onΔ secondaryΔ actionsΔ presenceΔ soakΔ otherVPalive ownreach 12/24
Aimed
Biovores608 → 102834 → 3248+446−3−5000.900.261.00/1.00
Lictor602 → 14047 → 4471+438−5−10000.880.251.00/1.00
Neurolictor8028 → 23959 → 1568+632−8−16001.690.431.00/1.00
Gargoyles15547 → 48351 → 524+176−1−2000.910.261.00/1.00
Ripper Swarms3050 → 49113 → 328+273−5−10000.270.201.00/1.00
Mucolid Spores3051 → 5016 → 273+273−5−10000.270.201.00/1.00
Spore Mines5552 → 529 → 149+149−3−6000.270.201.00/1.00
Sporocyst14549 → 51222 → 2190−1−2000.000.360/0
Hormagaunts12019 → 241272 → 1557+289−1−3001.160.331.00/0.81
Deathleaper807 → 53114 → 3958+855−4−7002.290.571.00/1.00
Big risers
Tyrannofex17026 → 19984 → 1747+765−1−2004.361.001.00/1.00
Tyrant Guard17046 → 39429 → 976+550−1−2003.130.731.00/1.00
Psychophage11035 → 28862 → 1370+513−2−3001.890.481.00/1.00
Toxicrene12031 → 26901 → 1486+590−1−3002.370.581.00/1.00
Hive Guard16034 → 27863 → 1377+517−1−2002.770.671.00/1.00
Tervigon16018 → 151305 → 2139+842−3−5004.511.001.00/1.00
Old One Eye14010 → 82627 → 3395+807−3−6003.780.901.00/1.00
Big fallers
Raveners12527 → 34964 → 1215+255−1−2001.070.291.00/1.00
Genestealers7529 → 35947 → 1195+255−2−4000.640.201.00/1.00
Winged Tyranid Prime6524 → 321053 → 1332+294−5−10000.640.201.00/1.00
Harpy18530 → 40937 → 937000000 (aircraft)––

Space Marines show the same pattern:

UnitptsrankΔ secondaryVPalive own
Repulsor17038 → 12+4984.180.82
Redemptor Dreadnought19553 → 19+5565.351.00
Land Raider22051 → 24+5105.541.00
Land Raider Crusader22059 → 30+5195.631.00
Inceptor Squad12528 → 45+1821.130.26
Land Speeder10536 → 50+1941.000.23
Eliminator Squad7534 → 43+2190.810.20
Sternguard Veteran Squad10043 → 56+1500.740.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.

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:

Unitptsr nowalive nowVP nowline Value nowr fixalive fixVP fixline Value fix
Biovores600.780.260.904460.280.712.411198
Lictor600.790.250.884380.280.702.371180
Neurolictor800.460.431.696320.220.903.101157
Deathleaper800.350.572.298550.171.003.631356
Genestealers751.000.200.642550.540.361.13451
Hormagaunts1200.610.331.162890.440.431.33332
Termagants1100.610.331.203250.460.421.33663
Raveners1250.680.291.072550.510.381.20287
Gargoyles1550.760.260.911760.780.260.74275
Ripper Swarms301.000.200.272730.590.340.43258
Mucolid Spores301.000.200.272731.000.200.23229
Spore Mines551.000.200.271491.000.200.23125
Tyrannofex1700.091.004.367650.091.003.53620
Tervigon1600.161.004.518420.151.003.65682
Norn Assimilator2500.161.004.515390.240.852.90347
Hierophant8100.051.004.161530.220.912.85105

What the fix doesn't do:

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)ptsVPraliveline ValueKill contributionValue
Termagants ×10601.330.460.42663721043
Termagants ×201101.480.400.46403197964

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).