The question. On Track A, Kill is most of a unit's Value, so a cheap screen's Score, Hold and Presence barely move it. The World Eaters' Jakhals are S with all three reviewers and sit at our 34th percentile. Their Flesh Hounds are A and sit at the 28th. Is "what a screen does" a missing ingredient across armies, or just in this one?
What we measured. Five quantities, each a dial (ledger.js SCREEN_KEYS, 0 = today exactly, up to 3). Each one is a worth in points Q at strength 1, and the unit's Value gains w × Q × P ÷ its points. P is the army's median reference Value per 100 points. The unit is then worth (1 + w × Q ÷ points) × its points at the median rate, so at 0.005 a cheap screen gains half a percent and at 1 it is worth about double. The constants come from design/rules-notes.md.
- Area (
screenArea): the board it denies to arrivals. Deep Strike, Infiltrators and Scouts must end more than 8" from every enemy model, and coherency caps a unit's spread at 9". Area is 201 sq in for one model, 345 for a line of four and 491 for ten or more (a 12.5" disc). Ten bodies get SCREEN_PTS (65) points. - Block (
screenBlock): the frontage it can hold, 5" to 14" (its spread plus 2" of engagement range each side), × √(Move ÷ 6"). - Trade (
screenTrade): the enemy points of fire it takes to remove it (its shooting Soak × points ÷ 100), never less than one 100-point enemy activation. It is counted outside the threat gate, which today cuts a low-Kill unit's Soak. - Score (
screenScore): one scoring slot for the per-unit and action secondaries, × min(1, OC ÷ 6). It is worth the same for a 65-point and a 300-point unit, so per point the cheap unit earns more. - Hide (
screenHide): Infiltrators or Scouts ½, Stealth ¼ (from build/units.json; no ledger file carries it yet, so tools/screens.js stamps it in memory), Lone Operative ¼. screenJob(a switch): count the screen as a job of its own. Value = max(Value, screen worth alone), in place of adding the two.
Held out across armies. The strength is chosen on 10 of the 15 armies and scored on the other 5, over 3 seeded splits, against Track A (pooled 59.4, Tyranids 79.3). The exam column is node tools/exam.js at strength 0.5 (trade at its pick, 0.01), with 2,000 draws.
| Dial | Picks (3 splits) | Held-out Δ, mean ± SE | Pick on all 15 (in sample) | Exam, pooled Δ [95%, units] | Tyranids Δ | Worst armies at 0.5 |
|---|---|---|---|---|---|---|
| screenArea | 0.1, 0.01, 0.05 | −0.02 ± 0.02 | 0.05 (+0.05) | −1.3 [−2.4, −0.4] | −1.1 | SW −4.3, LoV −4.0, AM −3.9 |
| screenBlock | 0.05, 0.05, 0.005 | −0.05 ± 0.03 | 0.05 (+0.04) | −1.2 [−2.5, +0.0] | −1.4 | LoV −4.5, AM −4.7, AdMech −4.3 |
| screenTrade | 0.005, 0.01, 0.01 | +0.15 ± 0.06 | 0.01 (+0.14) | +0.1 [−0.3, +0.7] at 0.01 | +0.2 | (at 0.01: Drukhari −1.0) |
| screenScore | 0.1, 1, 0.1 | −0.95 ± 0.91 | 0.1 (+0.05) | −0.8 [−2.0, +0.4] | −0.8 | AM −4.2, Orks −3.8, AdMech −3.4 |
| screenHide | 3, 0.35, 2 | −1.29 ± 0.67 | 0.35 (+0.10) | – (needs Stealth on the data) | +0.1 | LoV −3.2, SW −1.4, AM −1.4 |
| Jointly (only trade is live) | as trade | +0.15 | trade 0.01 | +0.2 | ||
| screenJob with area 2 | −2.1 in sample | −8.7 | AM −8.2, Orks −6.9, AdMech −6.2 |
World Eaters' three lists (Red Path, Tactical Sugar, Exalted; one list left out, the strength picked on the other two).
| Setting | RP / TS / Ex | Mean | WE held out | Pooled 15, in sample | Tyranids |
|---|---|---|---|---|---|
| Track A | 62.3 / 72.2 / 68.9 | 67.8 | 59.4 | 79.3 | |
| screenTrade 0.01 | 64.1 / 73.7 / 69.1 | 69.0 | −0.1 (picks 0, 0.05, 0.05) | +0.1 | +0.2 |
| screenArea 2 | 73.6 / 72.8 / 75.7 | 74.0 | +5.9 (picks 2, 3, 2) | −3.3 | −8.3 |
| screenBlock 1.5 | 72.5 / 71.3 / 75.1 | 73.0 | +4.1 | −3.1 | −5.7 |
| screenScore 1 | 73.6 / 74.3 / 74.9 | 74.3 | +5.5 | −0.7 | −2.5 |
| screenHide 0.1 | 62.7 / 71.9 / 69.1 | 67.9 | −0.1 | −0.1 | −0.1 |
Cheap units across armies. Each unit's percentile by Value among the units its army's lists grade (as tools/misses.js's ourPct) at Track A, the cross-army pick, and two World Eaters–strength settings. Letters are the army's lists in order.
| Unit (army, Track A's points) | Letters | Track A | trade 0.01 | score 1 | area 2 |
|---|---|---|---|---|---|
| Jakhals (World Eaters, 130) | S S S | 34 | 34 | 76 | 93 |
| Flesh Hounds (World Eaters, 150) | A A A | 28 | 28 | 59 | 69 |
| Khorne Berzerkers (World Eaters, 160) | A A S | 48 | 45 | 52 | 62 |
| Gargoyles (Tyranids, 155) | B B B A S | 12 | 12 | 25 | 55 |
| Termagants (Tyranids, 110) | B B C B A | 27 | 27 | 53 | 69 |
| Hormagaunts (Tyranids, 120) | S A B A S | 67 | 65 | 65 | 73 |
| Cadian Shock Troops (Astra Militarum, 145) | A | 80 | 80 | 92 | 95 |
| Kasrkin (Astra Militarum, 105) | A | 92 | 90 | 93 | 90 |
| Gretchin (Orks, 80) | B | 11 | 11 | 73 | 95 |
| Wracks (Drukhari, 120) | D | 57 | 57 | 78 | 83 |
| Hearthkyn Warriors (Leagues of Votann, 90) | C C | 79 | 84 | 84 | 84 |
| Hernkyn Yaegirs (Leagues of Votann, 90) | A – | 16 | 16 | 63 | 63 |
| Nurglings (Death Guard, 90) | A | 11 | 14 | 9 | 66 |
| Fenrisian Wolves (Space Wolves, 75) | B | 10 | 10 | 0 | 90 |
| Daemonettes (Emperor's Children, 100) | C | 100 | 100 | 100 | 100 |
Read: screens are a World Eaters quirk, not a missing ingredient across armies. Board denial, blocking and a cheap scoring slot each gain the World Eaters 4 to 6 points held out, a third of the way to their reviewers' ceiling. Jakhals rise from the 34th percentile to the 76th to 93rd. The same strengths cost the pooled exam 1 to 3 points and the Tyranids 2.5 to 8. Elsewhere the cheap squads we underrate (Gargoyles, Gretchin, Yaegirs, Nurglings) are matched by cheap squads we already overrate: the Wracks (D), Hearthkyn (C), Daemonettes (C) and Cadians. The same credit lifts both groups. This is T-669's "cheap units" group again (−6 beyond our position). Within the armies, a unit's screen quantities per point have no rank correlation with its miss beyond our position (area −0.01, block −0.02, trade −0.05, score −0.03, hide +0.07). Only screenTrade held out positive: +0.15 ± 0.06 at 0.01, pooled exam +0.1 [−0.3, +0.7], Tyranids +0.2, within noise. It is on /lab/ledger/ as "Screens (T-675)", off. The other four dials and screenJob stay in code at 0. For the World Eaters they are dials worth setting (area 2 or score 1, beside T-672's modeScarcity), but only as an army-level choice. Nothing is adopted into Track A or B.
How it's done: node tools/screens.js (about 4 minutes) runs every dial alone, then the live dials jointly. Settings go through compute() as tools/exam.js scores them (Track A, tools/ledger-benchmarks/2026-10-05-step34b-baseline.json, wCarry 0; 59.4 pooled reproduced). The candidate is tools/ledger-benchmarks/2026-10-05-screens.json. The grid is 0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.35, 0.5, 0.75, 1, 1.5, 2, 3, and a tie goes to the smaller strength.