T-583 (tier plan queue step 4, first half; Jordan, 3 Oct, via the supervisor). Commands: node tools/tiertest.js --rawdump all (the every-army raw table at round 11's exact settings, about 40 s, peak memory 2.0 GB, build/tier-raw-all/<hash>.json, git-ignored), then node tools/round13.js --json reports/tiers/2026-10-03-round13.json --table reports/tiers/2026-10-03-tyranids-round13-table.md (about 13 s; fixed seeds, 2,000 bootstrap resamples and shuffles). Data: BSData 374f505 (30 Sep), grimstat-corpus 570b8c6 (CC BY 4.0). Job names are the site's, with the engine's in brackets: Tank (Anvil), DPS (Hammer), Support (Banner), Action (Runner). A report: nothing on the site changes and nothing is adopted.
In short. The every-army raw table now exists, and compose(raw, config) with tools/tierconfig.json reproduces frozen round 11 exactly: 0 differences over 1,153 units (letter, within-army letter, final score, points and context) and all 52 Tyranids (composite, job scores, jobs, context); the battery rerun from compose gives identical numbers. Frozen round 11's cost lean is ρ(score, points) −0.414 pooled (the review's −0.42; see section 1). B1, round 11 under Jordan's frozen conventions (minimum size), moves the lean to −0.30 and holds every panel within one SE of round 11 (unseen pooled 0.33 against 0.34). Round 12's experiments rerun on B1 pick, by rules that read no panel, Action's (Runner's) cheapness part dropped and α 0.6: the lean falls to −0.01 pooled (16 of 29 armies outside ±0.15, from 24), and every unseen panel holds or rises (pooled 0.36). It passes the written gate, but its rise (+0.01 [−0.10, 0.13]) is inside its interval, so by round 12's reading it is not adopted: a recommendation for the supervisor and Jordan, not a change.
0. Which choices had a panel in view
The three choices in section 4 were made in code (tools/round13.js choose()) before any panel was scored, by rules that read only the standing lines. But the rules were written by someone who had read round 12's report, which showed panel numbers for the same Action (Runner) variants and for α 0.75 on the old bench table. So no choice read a panel, and the variant set had a panel in view (round 12's). Nothing in this round was picked after its own panel numbers.
1. The reproduction, first
- The table.
--rawdump allrecords every context round 11 scored, as the run scores it: the bare pool that picks each unit's context (1,153 rows), every context everyRaw tries for every fieldable unit, every context tyrRun tries for a Tyranid, and the joined pairs on every other detachment (so compose can pick them when its best plain context differs): 70,376 rows, 73.6 MB, in full precision. Recording changes nothing the run returns (the engine's own keys match round 11's JSON for every unit). It also stores the engine's keys for B0 and for B1 (a second run withbestSizeoff), as a check. - compose. tools/tierbench.js
composeAllreplays the engine's last three steps: the bare pool's percentiles pick each unit's context, the chosen contexts make the pool's percentiles, every unit's key under them (a Tyranid's from its own pick), then the final score, the frozen cuts and the within-army letters. About 130 ms a run. - Result: round 11's published JSON, 0 differences (1,153 units; 52 Tyranids). Against the engine's stored keys: B0 largest key gap 0, B1 largest key gap 0, no letter differs. The battery (tools/tierbaseline.js) run from compose's B0 instead of the JSON: identical (every number). tests/unit/round13.test.js keeps this on a 200 KB cut of the table.
- The −0.42. Frozen round 11's final score against points, Spearman over the 1,153 fieldable units: −0.414, the same from compose's full-precision scores, from the JSON's two-decimal ones and from the keys. Round 12 printed it as −0.41. The design advisor's −0.42 is within rounding of a near neighbour: Pearson against log points gives −0.426, the per-army median −0.43; I can't tell which was used, but nothing in the data gives −0.42 as a Spearman. The bench's old −0.16 was not round 11: its table held round 10's contexts outside the Tyranids, without round 11's engine fixes there (the loadout fix, Stealth, lends on the best squads, pairs), at minimum size. On the true table minimum size alone takes −0.41 to −0.30 (B1); the remaining −0.30 → −0.16 was the old table's missing engine work.
2. Held out first: B0 and B1 on every panel
Pooled Spearman ρ with a bootstrap 95% interval. Held out: the two Space Marine panels (no round tuned on them). Same army, new reviewer: the two Tyranid lists of 3 Oct. Unseen: both. The Auspex Tyranid panel is tuned on. Astra Militarum is locked (counted, not scored).
| Predictor | Held out (Space Marines, 76) | Same army, new reviewer (Tyranids, 86) | Unseen (162) | Every fitting panel (206) |
|---|---|---|---|---|
| Entrants' list share | 0.23 [0.00, 0.43] | 0.72 [0.60, 0.81] | 0.49 [0.37, 0.59] | 0.56 [0.46, 0.65] |
| Frozen round 11 (its JSON) | 0.30 [0.07, 0.50] | 0.38 [0.15, 0.56] | 0.34 [0.18, 0.48] | 0.41 [0.27, 0.53] |
| B0, round 11 exact (compose) | 0.30 [0.07, 0.50] | 0.38 [0.15, 0.56] | 0.34 [0.18, 0.48] | 0.41 [0.27, 0.53] |
| B1, conventions applied | 0.29 [0.05, 0.51] | 0.37 [0.15, 0.55] | 0.33 [0.18, 0.47] | 0.41 [0.27, 0.52] |
| Trial on B1: cheapness part dropped + α 0.6 | 0.31 [0.07, 0.50] | 0.40 [0.18, 0.58] | 0.36 [0.21, 0.49] | 0.42 [0.29, 0.53] |
Every panel, ρ ±SE (lift over that panel's shuffle):
| Panel (class; units) | List share | Frozen round 11 | B0 | B1 | Trial | Cheapness dropped alone | α 0.6 alone |
|---|---|---|---|---|---|---|---|
| Space Marines, Tista Minis (held out; 30) | 0.07 ±.19 (+0.07) | 0.14 ±.19 (+0.14) | 0.14 ±.19 (+0.14) | 0.19 ±.19 (+0.18) | 0.19 ±.19 (+0.19) | 0.18 ±.19 (+0.18) | 0.17 ±.19 (+0.17) |
| Space Marines, Auspex (held out; 46) | 0.34 ±.14 (+0.34) | 0.41 ±.13 (+0.41) | 0.41 ±.13 (+0.41) | 0.36 ±.14 (+0.36) | 0.38 ±.14 (+0.38) | 0.34 ±.14 (+0.34) | 0.36 ±.14 (+0.36) |
| Tyranids, -hivemind file (new reviewer; 45) | 0.81 ±.06 (+0.81) | 0.35 ±.14 (+0.35) | 0.35 ±.14 (+0.35) | 0.37 ±.14 (+0.37) | 0.39 ±.14 (+0.38) | 0.33 ±.14 (+0.33) | 0.41 ±.13 (+0.41) |
| Tyranids, -second file (new reviewer; 41) | 0.62 ±.11 (+0.62) | 0.41 ±.14 (+0.41) | 0.41 ±.14 (+0.41) | 0.38 ±.14 (+0.37) | 0.41 ±.14 (+0.41) | 0.36 ±.15 (+0.36) | 0.43 ±.14 (+0.42) |
| Tyranids, Auspex (tuned on; 44) | 0.81 ±.06 (+0.82) | 0.66 ±.10 (+0.67) | 0.66 ±.10 (+0.67) | 0.70 ±.09 (+0.70) | 0.67 ±.10 (+0.68) | 0.67 ±.09 (+0.68) | 0.68 ±.09 (+0.69) |
| Orks, Sprues & Brews (sanity list; 45) | 0.30 ±.14 (+0.30) | −0.15 ±.15 (−0.15) | −0.15 ±.15 (−0.15) | −0.11 ±.15 (−0.11) | −0.06 ±.15 (−0.06) | −0.10 ±.15 (−0.10) | −0.06 ±.15 (−0.06) |
Ceilings: Tyranids √ of the mean pairwise ρ 0.80 (three reviewers); Space Marines √0.69 ≈ 0.83.
B0 against B1: minimum size moves 323 all-armies letters and 15 Tyranid within-army letters. It helps Tista Minis' Marines (+0.05) and Auspex's tuned-on Tyranids (+0.04) and costs Auspex's Marines (−0.05) and the -second Tyranids (−0.03), all inside one SE; pooled it is −0.01 on the unseen panels. B1 doesn't pass the gate against frozen round 11 (rise −0.01 [−0.09, 0.07]), and it is not a candidate: it is the convention applied, the baseline every later change is measured on.
3. The gate
| Candidate | Against | Pooled lift, unseen: candidate / predecessor | Rise [95%] | Panels more than one SE below | Passes |
|---|---|---|---|---|---|
| B1, conventions applied | frozen round 11 | 0.33 / 0.34 | −0.01 [−0.09, 0.07] | none | no |
| Trial (cheapness part dropped + α 0.6) | frozen round 11 | 0.35 / 0.34 | +0.01 [−0.10, 0.13] | none | yes, inside its interval |
| Trial | B1 | 0.35 / 0.33 | +0.02 [−0.07, 0.11] | none | yes, inside its interval |
| Cheapness part dropped alone | B1 | 0.31 / 0.33 | −0.02 [−0.07, 0.02] | none | no |
| α 0.6 alone | B1 | 0.35 / 0.33 | +0.02 [−0.06, 0.11] | none | yes, inside its interval |
| record: points gate dropped | B1 | 0.26 / 0.33 | −0.08 [−0.17, 0.02] | none | no |
| record: trial + composite "allowed" | B1 | 0.38 / 0.33 | +0.05 [−0.04, 0.14] | none | yes, inside its interval |
| record: trial + composite "log₂" | B1 | 0.23 / 0.33 | −0.10 [−0.23, 0.03] | Tista Minis −0.20, -hivemind −0.14, Auspex Tyranids −0.10 | no |
Adopted: nothing. The trial passes the gate as written (its pooled lift rises; no panel falls more than one SE), but the rise is inside its interval. Round 12 read that as "not adopted", and this round keeps that reading. It is the first change since round 11 that lowers the cost lean without costing any panel.
4. Round 12's experiments 3 and 4 on B1 (choose, then check)
The rules, fixed in code before any panel was scored: (1) Action's (Runner's) points terms: among both, the gate alone (cheapness part dropped) and the cheapness part alone (gate dropped), those putting no more units over 250 pts at S than B1 (round 4's guard, which round 3 and round 12 broke), then |ρ(score, points)| nearest zero; (2) the composite: round 12's flattest best-job spread; (3) α in 0.50 to 1.00 where ρ(score, points) pooled is nearest zero with the others on. Chosen: the gate alone (cheapness part dropped), composite "best" (today's), α 0.6.
Experiment 3, the cost exponent and Action's points terms (on B1).
| Action (Runner) points terms, α 1 | ρ(score, points), pooled | Per-army median | Armies outside ±0.15 (of 29) | S ≤75 / 76–130 / 131–250 / >250 pts | S job mix: DPS / Tank / Action / Support |
|---|---|---|---|---|---|
| both (B1) | −0.30 | −0.35 | 24 | 47 / 38 / 7 / 0 | 25 / 18 / 25 / 24 |
| gate only, cheapness part dropped (chosen) | −0.25 | −0.28 | 22 | 43 / 43 / 6 / 0 | 28 / 19 / 25 / 20 |
| cheapness part only, gate dropped (guard fails) | −0.02 | +0.05 | 19 | 41 / 38 / 8 / 5 | 30 / 17 / 22 / 23 |
| α (cheapness part dropped) | ρ(score, points), pooled | Per-army median | Outside ±0.15 | S per band | S job mix: DPS / Tank / Action / Support | α alone (both terms): pooled |
|---|---|---|---|---|---|---|
| 0.50 | +0.05 | +0.04 | 15 | 33 / 41 / 13 / 5 | 26 / 23 / 24 / 19 | −0.01 |
| 0.55 | +0.03 | +0.02 | 15 | 35 / 38 / 14 / 5 | 25 / 22 / 23 / 22 | −0.04 |
| 0.60 | −0.01 | −0.03 | 16 | 36 / 40 / 11 / 5 | 24 / 22 / 24 / 22 | −0.07 |
| 0.70 | −0.06 | −0.08 | 19 | 35 / 42 / 11 / 4 | 26 / 21 / 24 / 21 | −0.12 |
| 0.80 | −0.12 | −0.13 | 19 | 39 / 39 / 11 / 3 | 24 / 22 / 24 / 22 | −0.18 |
| 0.90 | −0.18 | −0.21 | 21 | 41 / 40 / 10 / 1 | 25 / 21 / 25 / 21 | −0.24 |
| 1.00 | −0.25 | −0.28 | 22 | 43 / 43 / 6 / 0 | 28 / 19 / 25 / 20 | −0.30 |
The five units over 250 pts that reach S with the trial are the two Deathwatch kill teams (265, 275), the Morkanaut, the Gargantuan Squiggoth and the Stompa: big shooters on DPS (Hammer) and Tank (Anvil), not round 3's mission-unit heroes.
Experiment 4, the three composites (cheapness part dropped, α 1):
| Composite | Best-job flatness | Best job over every unit: DPS / Tank / Action / Support | Units with every allowed job at zero | S job mix | S flatness | ρ(score, points) |
|---|---|---|---|---|---|---|
| best (today; chosen) | 0.996 | 329 / 279 / 300 / 245 | 2 | 28 / 19 / 25 / 20 | 0.991 | −0.25 |
| allowed | 0.994 | 340 / 253 / 308 / 252 | 2 | 27 / 19 / 24 / 22 | 0.994 | −0.25 |
| log₂ | 0.977 | 387 / 311 / 267 / 188 | 106 | 16 / 65 / 0 / 11 | 0.580 | −0.11 |
As on the bench: "allowed" barely differs (its record row with the trial is the best panel row here, +0.05 against B1, inside its interval, and was not chosen: the rule ties it with "best" and keeps today's); log₂ piles S onto Tank (Anvil) and leaves Action (Runner) none.
5. Each change alone, all but one, and the standing lines
Two changes are live (cheapness part dropped, α 0.6), so "all but one" is the other change alone.
| Version | ρ(score, points), pooled | Per army: median; outside ±0.15 | S ≤75 / 76–130 / 131–250 / >250 | S | S job mix: DPS / Tank / Action / Support | Letters moved from B1 (of 1,153) |
|---|---|---|---|---|---|---|
| Frozen round 11 | −0.41 | −0.43; 23 of 29 | 54 / 32 / 5 / 0 | 91 | – | – |
| B0, round 11 exact | −0.41 | −0.43; 23 of 29 | 54 / 32 / 5 / 0 | 91 | 27 / 21 / 24 / 19 | 323 |
| B1, conventions applied | −0.30 | −0.35; 24 of 29 | 47 / 38 / 7 / 0 | 92 | 25 / 18 / 25 / 24 | – |
| Trial: both changes | −0.01 | −0.03; 16 of 29 | 36 / 40 / 11 / 5 | 92 | 24 / 22 / 24 / 22 | 414 |
| Cheapness part dropped alone (= all but α) | −0.25 | −0.28; 22 of 29 | 43 / 43 / 6 / 0 | 92 | 28 / 19 / 25 / 20 | 107 |
| α 0.6 alone (= all but the cheapness change) | −0.07 | −0.08; 19 of 29 | 41 / 36 / 10 / 5 | 92 | 23 / 22 / 21 / 26 | 355 |
Most of the trial's lean and all of its panel gain come from α 0.6. The cheapness change alone costs a little on every unseen panel (−0.02 pooled) and helps in combination only on the lean.
Per army, ρ(score, points), armies with 10 or more units:
| Army (units) | Frozen round 11 | B1 | Trial |
|---|---|---|---|
| Adepta Sororitas (33) | −0.07 | 0.05 | 0.20 |
| Adeptus Custodes (31) | −0.43 | −0.26 | 0.01 |
| Adeptus Mechanicus (34) | −0.41 | −0.27 | −0.01 |
| Aeldari (75) | −0.31 | −0.27 | 0.02 |
| Agents of the Imperium (29) | 0.28 | 0.23 | 0.42 |
| Astra Militarum (72) | −0.20 | −0.02 | 0.26 |
| Black Templars (19) | −0.02 | 0.16 | 0.44 |
| Blood Angels (16) | −0.25 | −0.06 | 0.15 |
| Chaos Daemons (77) | −0.54 | −0.44 | −0.03 |
| Chaos Knights (27) | −0.85 | −0.75 | −0.15 |
| Chaos Space Marines (58) | −0.54 | −0.43 | −0.16 |
| Dark Angels (16) | −0.66 | −0.55 | −0.34 |
| Death Guard (36) | −0.80 | −0.79 | −0.59 |
| Deathwatch (10) | 0.04 | 0.26 | 0.66 |
| Drukhari (37) | −0.60 | −0.51 | −0.23 |
| Emperor's Children (23) | −0.60 | −0.41 | −0.12 |
| Genestealer Cults (90) | −0.52 | −0.44 | −0.18 |
| Grey Knights (26) | −0.56 | −0.41 | −0.25 |
| Imperial Knights (27) | −0.48 | −0.48 | −0.05 |
| Leagues of Votann (22) | 0.07 | 0.01 | 0.12 |
| Necrons (52) | −0.54 | −0.38 | −0.15 |
| Orks (55) | −0.14 | −0.03 | 0.22 |
| Space Marines (84) | −0.40 | −0.35 | −0.01 |
| Space Wolves (21) | 0.05 | 0.26 | 0.49 |
| T'au Empire (42) | −0.43 | −0.37 | −0.12 |
| Thousand Sons (35) | −0.79 | −0.83 | −0.49 |
| Tyranids (52) | −0.38 | −0.21 | 0.01 |
| Ultramarines (11) | −0.33 | −0.21 | −0.05 |
| World Eaters (30) | −0.63 | −0.54 | −0.23 |
6. What this round says
- Step 4's first half is done. One config file (tools/tierconfig.json) holds every knob of layers 2 to 4 with its default, source, date and owner, plus the layer-1 constants the table bakes in; compose over every army reproduces round 11 exactly. Every later change can now be measured as one change on the true table, in a fraction of a second.
- B1 is the baseline from now on, not B0: Jordan's minimum size, nothing else changed (round 11 already carried the turns cap and the lends on the two best squads).
- The cost lean is a compose problem on the true table too, and bigger than the bench showed (−0.30 on B1, not −0.16). α 0.6 with the cheapness part dropped takes it to −0.01 pooled and 16 armies outside ±0.15, with no panel cost; the rise on the unseen panels is inside its interval, so it is not adopted. It is the natural one change to carry into the matrix's first comparison, beside B1.
- The unsourced constants are carded (T-584) with their owners, and T-585 (are the four jobs real?) reads this table: build/tier-raw-all/<hash>.json, each row's
f(turns alive per attacker class, OC, Leadership, footprint, models, the Banner lends by kind) and each way'sv(damage per 100 pts into the five targets).
7. The Tyranid table (fixed layout; also reports/tiers/2026-10-03-tyranids-round13-table.md)
Made by tools/tyrtable.js. "Ours" is B1 (nothing is adopted), and the trial's within-army letter is the last column, marked ▲ or ▼ where it differs from B1 (16 of 52 do). "Change since last round" is B1 against frozen round 11: the minimum-size convention alone, 15 letters.
The Tyranid table, round 13 (B1 on the every-army table) against frozen round 11
Nothing is adopted this round. "Change since last round" is B1 against frozen round 11, so it is the minimum-size convention alone (the table is otherwise round 11 exactly).
"Ours" columns: B1, conventions applied (round 11 at minimum size, composed on the every-army table): the baseline, since nothing is adopted. The trial's within-army letter is the last column, not adopted.
Our ρ against each reviewer: Auspex (tuned on): ρ 0.70 (SE 0.09), lift +0.70, 44 units; 2026-10-03-tyranids-hivemind: ρ 0.37 (SE 0.14), lift +0.37, 45 units; 2026-10-03-tyranids-second: ρ 0.38 (SE 0.14), lift +0.37, 41 units. Reviewer pairs: 2026-10-03-tyranids-hivemind × 2026-10-03-tyranids-second 0.54 (√ 0.74); 2026-10-03-tyranids-hivemind × tyranids-auspex 0.73 (√ 0.86); 2026-10-03-tyranids-second × tyranids-auspex 0.67 (√ 0.82); the army's ceiling √ of the mean pairwise ρ, 0.80. Letters moved within the army since the previous round: 15 of 52.
| Unit | Pts | Auspex | 2026-10-03-tyranids-hivemind | 2026-10-03-tyranids-second | Ours, within army | Ours, all armies | Rank of 52 | Final score | Best job | Change since last round | What moved | Trial, not adopted |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lictor | 60 | A | S | S | S | 1 | 94.0 | Action (Runner) | S→S, 1→1 | DPS (Hammer) 10 → 12 | S | |
| Ripper Swarms | 30 | B | C | B | S | S | 2 | 93.6 | Support (Banner) | S→S, 2→2 | Action (Runner) 68 → 62 | A ▼ |
| Deathleaper | 80 | A | S | B | S | S | 3 | 92.5 | Action (Runner) | S→S, 5→3 | DPS (Hammer) 20 → 25 | S |
| ▲ Pyrovores | 40 | A | S | A | 4 | 91.1 | Support (Banner) | A→S, 7→4 | Action (Runner) 57 → 50 | A ▼ | ||
| ▲ Neurolictor | 80 | S | S | B | S | A | 5 | 90.6 | Action (Runner) | A→S, 9→5 | Support (Banner) 58 → 54 | S |
| ▼ Termagants | 60 | B | A | A | 6 | 89.6 | Tank (Anvil) | S→A, 3→6 | 10 models (was 20); DPS (Hammer) 52 → 30 | A | ||
| ▼ Hormagaunts | 70 | S | A | B | A | A | 7 | 86.5 | Tank (Anvil) | S→A, 4→7 | Unending Swarm (was Subterranean Assault); 10 models (was 20); walk (was reserves); DPS (Hammer) 28 → 6 | A |
| Raveners | 125 | S | B | A | A | A | 8 | 83.2 | Action (Runner) | A→A, 11→8 | Tank (Anvil) 68 → 75 | S ▲ |
| Hyperadapted Raveners | 165 | S | A | B | A | A | 9 | 82.8 | Action (Runner) | A→A, 10→9 | Tank (Anvil) 68 → 75 | S ▲ |
| Gargoyles | 80 | B | B | A | A | 10 | 82.2 | Tank (Anvil) | A→A, 6→10 | Synaptic Nexus (was Unending Swarm); 10 models (was 20); Action (Runner) 50 → 65 | A | |
| Neurogaunts | 45 | B | C | C | A | A | 11 | 81.4 | Tank (Anvil) | A→A, 8→11 | 11 models (was 22); Action (Runner) 61 → 53 | A |
| Von Ryan's Leapers | 55 | S | B | A | A | A | 12 | 78.8 | Action (Runner) | A→A, 12→12 | 3 models (was 6); DPS (Hammer) 41 → 22 | B ▼ |
| Biovores | 60 | S | S | S | A | B | 13 | 74.3 | Action (Runner) | A→A, 13→13 | – | C ▼ |
| Hive Tyrant | 195 | S | A | S | B | B | 14 | 73.5 | Support (Banner) | B→B, 14→14 | DPS (Hammer) 36 → 43 | A ▲ |
| Norn Emissary | 250 | S | B | S | B | B | 15 | 73.5 | Tank (Anvil) | B→B, 18→15 | DPS (Hammer) 48 → 54 | B |
| Norn Assimilator | 250 | S | B | S | B | B | 16 | 72.1 | Tank (Anvil) | B→B, 19→16 | DPS (Hammer) 51 → 57 | B |
| Psychophage | 110 | B | B | A | B | B | 17 | 65.5 | Support (Banner) | B→B, 15→17 | DPS (Hammer) 23 → 29 | B |
| The Swarmlord | 210 | S | S | A | B | B | 18 | 63.5 | Support (Banner) | B→B, 16→18 | DPS (Hammer) 49 → 55 | A ▲ |
| ▲ Tyrannofex | 170 | S | A | A | B | B | 19 | 59.8 | DPS (Hammer) | C→B, 32→19 | Tank (Anvil) 68 → 75 | B |
| ▲ Tervigon | 160 | B | C | C | B | B | 20 | 55.8 | Tank (Anvil) | C→B, 36→20 | Tank (Anvil) 80 → 87 | B |
| Venomthropes | 55 | B | D | B | B | B | 21 | 54.6 | Support (Banner) | B→B, 21→21 | Action (Runner) 67 → 62 | C ▼ |
| Neurotyrant | 130 | A | B | B | 22 | 54.3 | Support (Banner) | B→B, 22→22 | Action (Runner) 31 → 26 | B | ||
| Parasite of Mortrex | 70 | B | B | C | B | B | 23 | 54.1 | Action (Runner) | B→B, 20→23 | Synaptic Nexus (was Subterranean Assault); Action (Runner) 88 → 87 | C ▼ |
| ▲ Carnifexes | 90 | C | C | C | B | C | 24 | 49.9 | Tank (Anvil) | C→B, 35→24 | 1 model (was 2); Action (Runner) 0 → 13 | B |
| ▲ The Red Terror | 130 | A | A | S | B | C | 25 | 48.6 | Action (Runner) | C→B, 30→25 | DPS (Hammer) 27 → 33 | B |
| Winged Tyranid Prime | 65 | B | B | B | C | 26 | 47.9 | Support (Banner) | B→B, 25→26 | Action (Runner) 85 → 80 | C ▼ | |
| Haruspex | 125 | B | B | A | C | C | 27 | 47.6 | Support (Banner) | C→C, 29→27 | DPS (Hammer) 42 → 48 | B ▲ |
| ▼ Broodlord | 80 | A | A | C | C | 28 | 47.1 | Support (Banner) | B→C, 24→28 | DPS (Hammer) 49 → 55 | C | |
| ▼ Tyranid Warriors with Ranged Bio-Weapons | 60 | C | C | B | C | C | 29 | 47.0 | Tank (Anvil) | B→C, 17→29 | 3 models (was 6); DPS (Hammer) 38 → 14 | C |
| Toxicrene | 120 | C | C | 30 | 46.2 | Tank (Anvil) | C→C, 39→30 | Crusher Stampede (was Subterranean Assault); walk (was reserves); Tank (Anvil) 61 → 83 | C | |||
| Tyrant Guard | 80 | B | B | A | C | C | 31 | 42.8 | Support (Banner) | C→C, 33→31 | DPS (Hammer) 34 → 41 | B ▲ |
| Winged Hive Tyrant | 185 | A | B | B | C | C | 32 | 42.2 | Support (Banner) | C→C, 34→32 | DPS (Hammer) 30 → 36 | B ▲ |
| Maleceptor | 180 | S | A | C | C | 33 | 41.8 | Tank (Anvil) | C→C, 40→33 | Tank (Anvil) 73 → 81 | C | |
| Zoanthropes | 90 | S | A | B | C | C | 34 | 36.7 | DPS (Hammer) | C→C, 28→34 | 3 models (was 6); Action (Runner) 0 → 14 | C |
| Exocrine | 135 | A | A | A | C | C | 35 | 36.2 | Tank (Anvil) | C→C, 42→35 | Tank (Anvil) 71 → 79 | C |
| ▲ Mawloc | 135 | B | B | C | C | C | 36 | 36.0 | Tank (Anvil) | D→C, 43→36 | Tank (Anvil) 71 → 79 | C |
| Screamer-killer | 125 | B | B | C | C | C | 37 | 33.8 | DPS (Hammer) | C→C, 41→37 | DPS (Hammer) 73 → 78 | C |
| Old One Eye | 140 | B | B | C | C | 38 | 33.0 | Support (Banner) | C→C, 37→38 | Tank (Anvil) 69 → 76 | C | |
| Tyranid Prime with Lash Whip | 75 | C | A | B | C | C | 39 | 31.2 | Support (Banner) | C→C, 38→39 | DPS (Hammer) 43 → 49 | C |
| ▲ Trygon | 140 | B | C | C | C | 40 | 31.0 | Tank (Anvil) | D→C, 44→40 | Tank (Anvil) 69 → 76 | C | |
| ▼ Tyranid Warriors with Melee Bio-Weapons | 75 | B | B | A | C | C | 41 | 28.7 | Tank (Anvil) | B→C, 23→41 | 3 models (was 6); DPS (Hammer) 32 → 3 | D ▼ |
| Genestealers | 75 | A | A | C | C | 42 | 26.3 | Tank (Anvil) | C→C, 27→42 | 5 models (was 10); reserves (was walk); Action (Runner) 22 → 42 | C | |
| ▼ Barbgaunts | 55 | C | B | D | C | 43 | 21.5 | Tank (Anvil) | C→D, 31→43 | 5 models (was 10); DPS (Hammer) 35 → 19 | D | |
| ▼ Hive Guard | 80 | A | B | B | D | D | 44 | 16.5 | DPS (Hammer) | B→D, 26→44 | 3 models (was 6); reserves (was walk); DPS (Hammer) 86 → 65 | D |
| Hierophant | 810 | D | C | D | D | 45 | 13.9 | Tank (Anvil) | D→D, 45→45 | DPS (Hammer) 24 → 30 | B ▲ | |
| Harridan | 610 | D | C | C | D | D | 46 | 1.6 | DPS (Hammer) | D→D, 47→46 | DPS (Hammer) 30 → 37 | D |
| Hive Crone | 170 | D | D | D | 47 | 1.5 | DPS (Hammer) | D→D, 48→47 | DPS (Hammer) 30 → 36 | D | ||
| Tyrannocyte | 80 | C | D | D | 48 | 1.3 | Support (Banner) | D→D, 46→48 | DPS (Hammer) 17 → 21 | D | ||
| Harpy | 185 | D | D | D | 49 | 0.6 | DPS (Hammer) | D→D, 49→49 | DPS (Hammer) 22 → 27 | D | ||
| Sporocyst | 145 | D | D | C | D | D | 50 | 0.3 | DPS (Hammer) | D→D, 50→50 | Action (Runner) 27 → 21 | D |
| Mucolid Spores | 30 | D | D | D | D | 51 | 0.0 | DPS (Hammer) | D→D, 51→51 | Action (Runner) 69 → 63 | D | |
| Spore Mines | 55 | D | D | D | D | D | 52 | 0.0 | DPS (Hammer) | D→D, 52→52 | Action (Runner) 64 → 57 | D |