5 Oct 2026. Jordan: "We are on a mission of discovery to see what variables are influencing the reviewers' ranking." This is a report only: discovery, not adoption. No ledger value, setting, letter or page moves. Track A is step 34b (wCarry 0) on the frozen snapshot (d8b5a1bb14, inputs hash c5e7d85b43f8). Tournament list share is the second target, for discovery only. It comes from grimstat-corpus (https://github.com/N041M/grimstat-corpus, CC BY 4.0): 487 11th-edition lists from 30 events, 27 June to 26 September, published by their players and tournament organisers on MiniHeadQuarters. We read counts only. List share is never in a letter.
In plain English
What was fitted.
- One model across all 16 armies: 595 graded units out of 733 ranked.
- 25 variables a player would recognise (the table at the end), each measured against the unit's own army: one "army-SD" means one spread of that variable within the army.
- Fitted on 9,354 consensus pairs: pairs of units that every 11th-edition list grading both puts in the same order.
- One shared weight per variable, plus an adjustment per army that is pulled back toward the shared weight. How hard it is pulled was chosen by holding units out.
Does it learn something real? Yes, but not much more than Kill alone, and not more than Track A.
- Leaving each army out in turn and predicting its order from the other 15:
- the readable model gets 60.1% of the pairs right (army mean, 16 armies);
- Track A gets 61.9%; without the Tyranids, which Track A was tuned on, 59.5% against 60.1%;
- Kill alone gets 58.7%.
- Scrambled letters through the identical pipeline give 50.7% (20 seeds, range 46.1–54.7; none reaches 60.1). So the signal is real and it transfers between armies.
- The other 24 variables add only about 1.4 points over Kill alone held out. Added beside Track A's Value, they lift Track A from 61.9 to 62.1 (8 of 16 armies better; 61.3 against 60.1 without the Tyranids).
- This is the same ceiling T-635's 341-variable pooled diagnosis hit near 60%. A short, readable list finds the same amount of transferable signal as the long one. What's left is not in datasheet-level variables.
- The model beats Track A in 6 of 16 armies:
- Thousand Sons +26.9 (Track A is at 38.2 there);
- Genestealer Cults +11.8;
- Agents +7.6, Space Wolves +6.4, Orks +5.9, Drukhari +3.4.
- It loses badly where Track A was tuned: Tyranids −20.6, Adeptus Mechanicus −14.3, Astra Militarum −12.4, Leagues of Votann −12.4, Emperor's Children −11.0.
What reviewers appear to value, relative to Kill. Kill is the yardstick. One army-SD of Kill is about ×2 Kill per point (median SD of log Kill 0.72). Each figure below is that variable's weight per army-SD as a share of Kill's, with its 95% bootstrap interval.
- Clearly valued, the interval above 0:
- Epic Hero ≈ 0.8 × Kill [0.35, 1.5];
- OC per 100 points ≈ 0.8 [0.34, 1.4];
- Psyker ≈ 0.7 [0.19, 1.4];
- Deep Strike or reserves ≈ 0.6 [0.14, 1.2];
- Move ≈ 0.6 [0.16, 1.3];
- army-rule enabler ≈ 0.5 [0.25, 0.95];
- points relative to the army ≈ 0.4 [0.01, 1.0]: reviewers lean toward an army's expensive pieces beyond their per-point Kill.
- For a flag, having it against not having it is roughly the weight divided by the flag's SD (the last column of the table). Deep Strike is then worth about 1.3 army-SDs of Kill, and Epic Hero about 2.5.
- Clearly marked down: Fly ≈ −1.0 × Kill [−1.6, −0.4]. It goes the same way in 14 of 15 armies. Fly sits beside Move, which is valued, so this probably reads "fast units without Fly are rated higher than Fly ones at the same Move": jump infantry, flyers and skimmers grade lower than their speed suggests.
- Leaning, the interval touching 0:
- Lone Operative or Stealth +0.4;
- Battle-shock pressure −0.4;
- Kill share into characters −0.35;
- indirect fire −0.3;
- Soak −0.2;
- leader (can join) −0.2, with "what the squad gains" +0.2. Being a leader isn't valued for itself, only for what it gives.
- No sign either way:
- the target mix (share into tanks, hordes), and melee against shooting;
- transport capacity;
- Synapse or aura;
- a sibling datasheet;
- the Character keyword;
- the placebo (+0.16 [−0.30, +0.74], as it should be).
What holds across armies.
- Kill, OC per 100 points, Epic Hero and Psyker keep their sign in every army where they vary. Deep Strike keeps it in 15 of 16, Fly in 14 of 15 and Move in 14 of 16.
- Army-rule enablers keep their sign in 8 of the 9 armies that have any. World Eaters, whose enablers are Angron and the Lord of Skulls, are the exception.
Which armies differ, and how (the clearest deviations; the placebo's deviation clears 0 in none of the 16 armies, so these are not noise from the bootstrap alone):
- Tyranids differ most: more weight on Kill, Infiltrators or Scouts, and Psyker, and Fly marked down harder.
- Space Marines: OC per 100 points counts almost three times the shared weight, and anti-tank Kill is marked down.
- Genestealer Cults: Battle-shock pressure and anti-character Kill are marked down; anti-horde Kill counts more.
- Astra Militarum: points, Soak, Move and anti-tank Kill all count more, the tank army's own taste.
- World Eaters: more on OC and Kill, and Fly marked down harder.
- Dark Angels: Fly isn't marked down, and Soak is marked down more.
- Death Guard: Deep Strike counts more, and Move doesn't count.
- Orks and Thousand Sons: their army-rule enablers (bosses, the Cabal) count about double.
- Drukhari and Space Wolves show no clear deviation.
Where reviewers and players differ (the same model on list share; the intervals are wider, so read these as leans):
- OC per 100 points: players weigh it about three times as heavily as reviewers (2.4 × Kill against 0.8). Players take cheap bodies that hold ground far more than reviewers rate them.
- Infiltrators or Scouts, and Lone Operative or Stealth: players lean on them more (0.5 and 0.8 against 0.2 and 0.4).
- Points: reviewers lean to expensive pieces (+0.4); players don't (0.0). Part of this is how list share is counted: a list includes many cheap units once.
- Psyker: reviewers value it more (0.7 against 0.3).
- Both value Epic Heroes, Deep Strike and army-rule enablers about equally, and both mark down Fly and Battle-shock pressure.
- Held out, the model predicts list share about as well as it predicts the reviewers: 58.6% against Track A's 59.8%.
Read with care.
- The weights are heavily shrunk (λβ 100 is chosen inside every fold). Read the ratios to Kill, not the raw β.
- Correlated variables share credit:
- Move against Fly;
- Leader against Character against what the squad gains;
- Points against OC per 100.
- The flags are ours and coarse. Psyker and Epic Hero partly stand in for "a named character the army is built around".
- 12 of 16 armies have one 11th-edition list. Their pairs carry half weight, and their deviations rest on one reviewer.
- Track A was tuned on the Tyranids, so their row isn't a fair comparison.
- What it suggests (Jordan's call; nothing adopted):
- the non-Kill signals that transfer are OC per point, speed (Move, Deep Strike), Epic Heroes, Psykers and army-rule enablers;
- Fly is a penalty worth understanding;
- Soak, transports, Synapse and the target mix carry no transferable signal at this level.
How it's done. node --max-old-space-size=3000 tools/readable.js --boot 200 --scrambles 20 --json reports/tiers/2026-10-05-readable-model.json --md <file> runs in about 3.5 minutes on one thread. The sections below are the tool's --md output; the section above is written by hand.
- Model: pairwise logistic (Bradley–Terry). An ordinal model on average letters would need thresholds per list, and the lists' letter scales differ.
- Units are neither dropped nor averaged. A pair counts when every 11th-edition list grading both units orders them the same way, with no tie. In a single-list army, that list's pairs count.
- Pair weights: each army's pairs total its graded units, halved for single-list armies.
- Shrinkage: λβ is chosen by holding out groups of armies; λδ, the pull of each army's adjustment toward the shared weight, by holding out units within armies.
- Intervals: 200 bootstraps of units within each army.
- The variables are a table of named functions (tools/readable.js VARS), so T-707's fuller list can be swapped in as version 2.
The coefficients: reviewers and list share side by side
Pairwise logistic, shared across the armies, each variable standardised within its army (one army-SD). β with its 95% bootstrap interval (200 draws of units within armies); "÷ Kill" is β over Kill's β, per draw. Reviewers: λβ 100, λδ 30. List share (grimstat-corpus, CC BY 4.0; discovery only): λβ 100, λδ 300. "Armies same sign": armies where β + the army's deviation has the shared sign, of those where the variable varies. A flag's median within-army SD is beside it (having the flag ≈ β ÷ SD).
| Variable | Reviewers β [95%] | Reviewers ÷ Kill [95%] | Armies same sign | List share β [95%] | List share ÷ Kill [95%] | Median within-army SD |
|---|---|---|---|---|---|---|
| Kill | +0.13 [+0.08, +0.19] | 1 (the yardstick) | 16/16 | +0.11 [+0.04, +0.21] | 1 (the yardstick) | 0.72 |
| Kill share into tanks and monsters | −0.01 [−0.05, +0.05] | −0.04 [−0.38, +0.44] | 9/16 | −0.03 [−0.11, +0.03] | −0.30 [−1.44, +0.25] | 0.14 |
| Kill share into characters | −0.05 [−0.09, +0.02] | −0.35 [−0.78, +0.10] | 14/16 | −0.02 [−0.09, +0.06] | −0.14 [−1.18, +0.63] | 0.15 |
| Kill share into hordes | +0.00 [−0.05, +0.05] | +0.02 [−0.38, +0.47] | 8/16 | −0.04 [−0.11, +0.04] | −0.32 [−1.45, +0.43] | 0.08 |
| Melee share of Kill | +0.01 [−0.05, +0.07] | +0.05 [−0.37, +0.53] | 9/16 | +0.03 [−0.05, +0.11] | +0.28 [−0.48, +1.31] | 0.48 |
| Soak | −0.03 [−0.07, +0.04] | −0.22 [−0.61, +0.26] | 12/16 | −0.04 [−0.12, +0.06] | −0.31 [−1.97, +0.64] | 0.47 |
| OC per 100 points | +0.10 [+0.04, +0.14] | +0.77 [+0.34, +1.39] | 16/16 | +0.28 [+0.19, +0.36] | +2.41 [+1.03, +7.39] | 0.67 |
| Move | +0.08 [+0.02, +0.13] | +0.59 [+0.16, +1.27] | 14/16 | +0.07 [−0.01, +0.14] | +0.59 [−0.08, +2.44] | 2.93 |
| Deep Strike or reserves | +0.08 [+0.02, +0.13] | +0.61 [+0.14, +1.21] | 15/16 | +0.06 [−0.02, +0.15] | +0.53 [−0.22, +2.96] | 0.45 |
| Infiltrators or Scouts | +0.03 [−0.02, +0.08] | +0.20 [−0.13, +0.81] | 11/15 | +0.06 [−0.02, +0.15] | +0.51 [−0.17, +2.13] | 0.34 |
| Lone Operative or Stealth | +0.05 [−0.01, +0.10] | +0.39 [−0.06, +0.91] | 11/13 | +0.09 [+0.00, +0.16] | +0.77 [−0.02, +2.61] | 0.25 |
| Fly | −0.13 [−0.16, −0.06] | −0.97 [−1.62, −0.39] | 14/15 | −0.10 [−0.17, −0.02] | −0.86 [−2.95, −0.10] | 0.35 |
| Leader (can join a squad) | −0.03 [−0.07, +0.03] | −0.21 [−0.56, +0.19] | 14/16 | −0.01 [−0.08, +0.07] | −0.07 [−0.98, +0.81] | 0.40 |
| What the squad gains | +0.02 [−0.03, +0.08] | +0.18 [−0.32, +0.62] | 12/16 | +0.04 [−0.03, +0.13] | +0.38 [−0.39, +1.52] | 0.33 |
| Army-rule enabler | +0.07 [+0.03, +0.11] | +0.52 [+0.25, +0.95] | 8/9 | +0.09 [+0.01, +0.18] | +0.80 [+0.04, +2.18] | 0.39 |
| Synapse or aura carrier | −0.01 [−0.06, +0.06] | −0.08 [−0.47, +0.46] | 9/14 | −0.01 [−0.10, +0.08] | −0.11 [−1.03, +0.70] | 0.26 |
| Battle-shock pressure | −0.05 [−0.10, +0.00] | −0.38 [−0.87, +0.01] | 14/15 | −0.09 [−0.18, +0.01] | −0.75 [−2.44, +0.13] | 0.34 |
| Transport capacity | −0.00 [−0.05, +0.05] | −0.03 [−0.46, +0.39] | 7/14 | −0.06 [−0.15, +0.03] | −0.48 [−2.15, +0.26] | 0.75 |
| Points (relative to its army) | +0.05 [+0.00, +0.11] | +0.39 [+0.01, +1.03] | 13/16 | −0.00 [−0.09, +0.07] | −0.03 [−0.97, +0.92] | 0.50 |
| Epic Hero | +0.11 [+0.04, +0.15] | +0.81 [+0.35, +1.54] | 15/15 | +0.09 [−0.00, +0.17] | +0.80 [−0.01, +3.33] | 0.33 |
| Psyker | +0.09 [+0.02, +0.15] | +0.70 [+0.19, +1.42] | 14/14 | +0.03 [−0.04, +0.12] | +0.28 [−0.37, +1.56] | 0.22 |
| Indirect fire | −0.03 [−0.10, +0.01] | −0.27 [−0.78, +0.12] | 7/9 | −0.06 [−0.17, +0.03] | −0.50 [−2.14, +0.29] | 0.19 |
| Sibling datasheet present | +0.01 [−0.05, +0.07] | +0.11 [−0.41, +0.57] | 8/13 | +0.02 [−0.07, +0.10] | +0.20 [−0.76, +0.96] | 0.29 |
| Character | +0.01 [−0.03, +0.06] | +0.11 [−0.23, +0.56] | 11/16 | +0.04 [−0.03, +0.11] | +0.31 [−0.39, +1.62] | 0.47 |
| Placebo (random) | +0.02 [−0.04, +0.08] | +0.16 [−0.30, +0.74] | 11/16 | +0.06 [−0.03, +0.12] | +0.49 [−0.42, +1.48] | 0.97 |
Where armies differ (reviewers): per army, the size of its deviations (root mean square of δ over the variables) and its largest deviations whose bootstrap interval leaves 0 (at most four, |δ| ≥ 0.03). Calibration: the placebo's deviation clears 0 in 0 of 16 armies, so a single clear deviation is weak evidence.
| Army | Deviation size | Largest clear deviations (shared → this army) |
|---|---|---|
| Tyranids | 0.098 | Infiltrators or Scouts +0.03 → +0.20; Fly −0.13 → −0.30; Kill +0.13 → +0.27; Psyker +0.09 → +0.21 |
| Space Marines | 0.084 | OC per 100 points +0.10 → +0.28; Kill share into tanks and monsters −0.01 → −0.18 |
| Genestealer Cults | 0.074 | Battle-shock pressure −0.05 → −0.21; Kill share into hordes +0.00 → +0.14; Melee share of Kill +0.01 → −0.11; Kill share into characters −0.05 → −0.17 |
| Astra Militarum | 0.072 | Points (relative to its army) +0.05 → +0.21; Kill share into tanks and monsters −0.01 → +0.15; Soak −0.03 → +0.11; Move +0.08 → +0.19 |
| World Eaters | 0.065 | OC per 100 points +0.10 → +0.24; Fly −0.13 → −0.26; Kill +0.13 → +0.22 |
| Dark Angels | 0.062 | Fly −0.13 → +0.03; Soak −0.03 → −0.17; Melee share of Kill +0.01 → −0.09; Character +0.01 → −0.06 |
| Orks | 0.054 | Kill share into characters −0.05 → −0.15; Transport capacity −0.00 → −0.08; Army-rule enabler +0.07 → +0.14 |
| Death Guard | 0.051 | Deep Strike or reserves +0.08 → +0.20; Move +0.08 → −0.02; Psyker +0.09 → +0.17 |
| Leagues of Votann | 0.045 | What the squad gains +0.02 → −0.05; Move +0.08 → +0.14; Leader (can join a squad) −0.03 → −0.09; Melee share of Kill +0.01 → −0.05 |
| Adeptus Mechanicus | 0.044 | Kill share into tanks and monsters −0.01 → +0.08; Soak −0.03 → +0.03 |
| Blood Angels | 0.042 | Epic Hero +0.11 → +0.20; Fly −0.13 → −0.05; Move +0.08 → +0.15; OC per 100 points +0.10 → +0.05 |
| Thousand Sons | 0.039 | Army-rule enabler +0.07 → +0.12; Psyker +0.09 → +0.15 |
| Drukhari | 0.035 | none clear |
| Agents of the Imperium | 0.033 | Melee share of Kill +0.01 → +0.10; Soak −0.03 → −0.09 |
| Emperor's Children | 0.032 | Battle-shock pressure −0.05 → −0.13 |
| Space Wolves | 0.030 | none clear |
Leave one army out, against Track A
Fitted on 15 armies (shared coefficients only, λβ chosen inside the 15), the 16th army's order predicted and scored on its consensus pairs; Track A's Value on the same pairs (ties wrong). Tyranids: Track A was tuned on them.
| Army (11e lists) | Consensus pairs | Track A | Readable model | Δ | Kill alone | Model + Track A's Value | λβ chosen |
|---|---|---|---|---|---|---|---|
| Tyranids (3) | 757 | 89.2 | 68.6 | −20.6 | 71.7 | 74.2 | 30 |
| Space Marines (2) | 1904 | 63.3 | 59.9 | −3.4 | 68.5 | 62.1 | 100 |
| Adeptus Mechanicus (1) | 322 | 71.4 | 57.1 | −14.3 | 59.6 | 58.4 | 100 |
| Agents of the Imperium (1) | 223 | 56.5 | 64.1 | +7.6 | 64.1 | 61.4 | 100 |
| Astra Militarum (1) | 1319 | 67.9 | 55.6 | −12.4 | 59.3 | 56.5 | 100 |
| Blood Angels (1) | 124 | 61.3 | 55.6 | −5.6 | 49.2 | 59.7 | 100 |
| Dark Angels (1) | 2325 | 53.6 | 51.4 | −2.2 | 57.2 | 51.8 | 100 |
| Death Guard (1) | 476 | 55.0 | 55.0 | +0.0 | 46.2 | 57.1 | 100 |
| Drukhari (1) | 207 | 58.0 | 61.4 | +3.4 | 67.1 | 64.3 | 100 |
| Emperor's Children (1) | 191 | 69.6 | 58.6 | −11.0 | 63.4 | 61.3 | 100 |
| Genestealer Cults (2) | 127 | 54.3 | 66.1 | +11.8 | 55.1 | 68.5 | 100 |
| Leagues of Votann (1) | 105 | 61.0 | 48.6 | −12.4 | 60.0 | 51.4 | 100 |
| Orks (1) | 606 | 63.5 | 69.5 | +5.9 | 61.7 | 69.6 | 100 |
| Space Wolves (1) | 140 | 50.7 | 57.1 | +6.4 | 43.6 | 57.9 | 100 |
| Thousand Sons (1) | 309 | 38.2 | 65.0 | +26.9 | 42.4 | 62.5 | 100 |
| World Eaters (3) | 219 | 76.7 | 67.6 | −9.1 | 70.3 | 77.2 | 100 |
| Army mean, 16 | 61.9 | 60.1 | −1.8 | 58.7 | 62.1 | ||
| Army mean, 15 (no Tyranids) | 60.1 | 59.5 | −0.6 | 57.9 | 61.3 | ||
| Every pair pooled | 9354 | 62.5 | 58.5 | −4.0 | 60.8 | 60.1 |
The model beats Track A in 6 of 16 armies. Without the placebo column: army mean 60.0.
The scrambled-letter control
Letters permuted among each army's graded units (all its lists together), 20 seeds, through the identical leave-one-army-out pipeline.
| Readable model (army mean) | Track A on the same scrambled pairs | |
|---|---|---|
| Real letters | 60.1 | 61.9 |
| Scrambled, mean of 20 | 50.7 | 49.9 |
| Scrambled, range | 46.1 – 54.7 | 46.2 – 54.7 |
The placebo column (random per unit): β +0.02 [−0.04, +0.08], 0 armies with a deviation clear of 0.
List share, held out (discovery only)
The same model on 11th-edition list share (pairs: one unit taken by 2 or more lists more than the other; armies with 5+ tournament lists). grimstat-corpus (https://github.com/N041M/grimstat-corpus, CC BY 4.0); counts only.
| Army (tournament lists) | Share pairs | Track A | Readable model |
|---|---|---|---|
| Tyranids (27) | 1085 | 79.8 | 66.0 |
| Space Marines (33) | 2432 | 63.7 | 63.0 |
| Adeptus Mechanicus (18) | 336 | 63.1 | 57.1 |
| Astra Militarum (17) | 1208 | 62.3 | 68.4 |
| Blood Angels (14) | 131 | 48.1 | 43.5 |
| Dark Angels (28) | 2033 | 54.6 | 63.2 |
| Death Guard (19) | 460 | 61.3 | 51.5 |
| Drukhari (14) | 205 | 48.3 | 50.7 |
| Emperor's Children (24) | 207 | 58.5 | 48.8 |
| Genestealer Cults (5) | 156 | 68.6 | 68.6 |
| Leagues of Votann (15) | 124 | 58.1 | 47.6 |
| Orks (27) | 804 | 62.8 | 71.6 |
| Space Wolves (12) | 151 | 55.0 | 48.3 |
| Thousand Sons (9) | 263 | 44.9 | 70.7 |
| World Eaters (16) | 349 | 68.5 | 59.3 |
| Army mean | 59.8 | 58.6 |
The variables (version 1)
| Key | Name | Definition | log(1 + x) |
|---|---|---|---|
| kill | Kill | points of enemy removed per 100 points of the unit in a turn (the ledger's ranged Kill plus melee Kill after the charge's landing share), Track A form | yes |
| antiTank | Kill share into tanks and monsters | share of its Kill (β 6 class split) that lands on monsters, heavy and light vehicles | |
| antiChar | Kill share into characters | share of its Kill that lands on characters | |
| antiHorde | Kill share into hordes | share of its Kill that lands on chaff infantry (elites, the remainder, are the reference) | |
| melee | Melee share of Kill | melee Kill ÷ (ranged + melee Kill) | |
| soak | Soak | enemy points per 100 needed to remove it: the geometric mean of shooting and melee Soak per 100 of its points | yes |
| oc | OC per 100 points | models × Objective Control per 100 points | yes |
| move | Move | Move characteristic, inches | |
| deepStrike | Deep Strike or reserves | Deep Strike, or an arrival rule of its own (unitfx kind arrival) (1/0) | |
| forward | Infiltrators or Scouts | deploys forward: Infiltrators or Scouts (1/0) | |
| hidden | Lone Operative or Stealth | hard to target: Lone Operative or Stealth (1/0) | |
| fly | Fly | the Fly keyword (1/0) | |
| leader | Leader (can join a squad) | the Leader rule or a datasheet it can lead (1/0) | |
| leaderGives | What the squad gains | a leader's gifts to its squad: dice effects it gives (leaderfx.json, count) plus 1 for a non-dice rule through the squad (characters.json leadOther); 0 for non-leaders | yes |
| enabler | Army-rule enabler | tools/armyrules.json names it a giver or extender of its army's rule, or a carrier where under half the army carries it (Synapse, Officers, Cabal, Waaagh! bosses) (1/0) | |
| aura | Synapse or aura carrier | Synapse, or an aura of its own (unitfx aura; characters.json aura or synapse) (1/0) | |
| shock | Battle-shock pressure | a rule of its own forcing or worsening enemy Battle-shock (unitfx kind shock; characters.json shock or shockAmp) (1/0) | |
| transport | Transport capacity | models it can carry (0 = none) | yes |
| points | Points (relative to its army) | points of its Track A form; standardised within the army, so relative to the army's median and spread | yes |
| epic | Epic Hero | the Epic Hero keyword (1/0) | |
| psyker | Psyker | the Psyker keyword (1/0) | |
| indirect | Indirect fire | carries an Indirect Fire weapon (1/0) | |
| sibling | Sibling datasheet present | another unit of its army's ledger is of the same datasheet family by name (Hive Tyrant and Winged Hive Tyrant) (1/0) | |
| character | Character | the Character keyword (1/0); separates leaders' worth from being a character at all | |
| placebo | Placebo (random) | a seeded random normal per unit: should come out at 0 |