5 Oct (T-726). tools/dialinventory.js; the machine-readable inventory is tools/dial-inventory.json. Snapshot 8dcd24032d, inputs hash dcd477d8a78c. Base: Track A (tools/ledger-benchmarks/2026-10-05-step34b-baseline.json), Track B beside. A report: nothing in the ledger moves, nothing is removed and nothing is adopted.
In plain English
Jordan's rule (5 Oct): every dial goes into the searches, and off is one of its options, never its permanent home. This is the list of every dial we have, so that nothing is left out again.
- 161 dials. That is every one of the ledger page's 118 slider keys, the 13 rule multipliers, the 4 letter cuts, 24 post dials across 10 exam post modules (plus gradeBy), the datasheet-feature family and the popularity diagnostic.
node tools/dialinventory.js --checkfails if a new slider key, rule kind or post module is not in the list. Beside them are 35 hard-coded constants that could become dials (CHAR_PTS, SHOCK_AMP, AIR_KILL, ARRIVE_W, ...). - 145 are live on this snapshot. Each dial was set to a sensible value away from its default on Track A, and all 16 armies were run through the exam's own compute (wCarry 0). A strength dial was run with its switch on in both runs.
- 89 of the live dials move units in every army, 41 in 4 to 15 armies.
- 15 move only one to three armies. Examples: the Biovore dial, Synapse, the army-rule dials and the Orders.
- 11 move nothing at the test value. 7 of those do act once a sibling is set:
- threat, once threatSoak is off;
- charsJoined, once burstKill is off, and then on Tyranids only;
- killClassWeight, from strength 3;
- carryCargo and carryFragRef, once a cargo part is on;
- profileDials and profileLines, on the data tools/ledgerprofile.js prepares.
- Run without its switch, every dial behind a sibling moves nothing.
- 5 entries were not run: the 4 letter cuts, which never move a Value, and the feature family.
- No dial errored.
- The cascade (tools/cascade2.js) searched 26 of them, all live. 6 more were held at one value: screenHide, screenRank, objPresence's extras and enabler, typicalSizeRule (mean) and typicalDet (0). 119 live dials were left out, including:
- every line weight;
- supportMeasured, preferredTargets, the life and VP dials;
- leadersLeading, joinedMarginal, joinedShapley and leaderCredit;
- 12 of the 15 character dials;
- rivals, domRival, jail, steal, gradeBy and the transport dials.
On 5 Oct Jordan asked that the cascade re-run also search the measured replacements, supportMeasured and synapseMarginal (design/decisions.md). Neither was in cascade2's grid.
- Duplicates (measured or read in the code):
- prem = wKill exactly. prem 2 and wKill × 2 give every Value to the bit.
- Only the weights' ratios matter. Doubling all seven line weights doubles every Value, so any search should hold wKill fixed.
- smallPiece = pointsExp with the sign turned round. They are the same formula up to a constant per army: smallPiece 0.2 and pointsExp −0.2 order all 21,313 unit pairs the same way.
- scarceAnswers ≈ role scarcity off (ρ 0.997). Its answer gaps add almost nothing, so scarceAnswersW is in effect a strength dial on role scarcity.
- objPresence ≈ screenScore in direction (ρ 0.963, the same 686 units). Both credit a cheap unit's OC per point; at equal strength screenScore reorders about three times as many unit pairs.
- joinedShapley ≈ joinedMarginal at half strength (ρ 0.969).
- typicalW is a shorthand for typicalSize and typicalDet together.
- Overlaps, not duplicates:
- The leader dials: leaderCredit against leadersLeading 0.72, against joinedMarginal 0.53. leaderComp's penalty is a different idea, at 0.2 or below against all three.
- supportCredit against supportMeasured, 0.52.
- r.synapse against synapseMarginal, 0.64; 0.998 on the Tyranids alone.
- The four transport dials, 0.1 to 0.6 with one another: different transports win.
- screenArea against screenBlock, 0.93.
- charLead against charEnh 0.66, against charHome 0.34. charEpic against charEnh −0.78: they are complements.
- typicalSize against smallPiece, −0.13: unrelated.
- objPresence and screenScore against wScore, about −0.87 at wScore 0: each is a Score weight by another route.
- Removal candidates, for Jordan to decide (nothing removed):
- Exact duplicates: prem; pointsExp or smallPiece (keep one); typicalW.
- Inert on every army:
- r.arrival: every arrival rule is measured by the charge model;
- killMargin: its field was never built;
- armyPick: no ledger carries burstPick since the re-freezes, and armyRounds took over its World Eaters job;
- charsJoined: inert in both tracks, and attachChars is its Burst version;
- profileDials: superseded by profileLines.
- Data we must not use in letters: popshare, which reads tournament popularity.
- Jordan's call: bonusShare weights its bonus package by the share of tournament lists that run each detachment or take each aura bearer. That is not the rated unit's own popularity, but it is popularity data inside a letter dial.
- Wargear BSData forbids, in Track A best forms (flagged, not fixed):
- Death Guard's Helbrute (11th of 36) carries both a Helbrute hammer and a power scourge (T-723).
- Votann's Thunderkyn (5th of 22) mix a bolt cannon with two SP conversion beamers; T-724 makes every model take the same weapon.
- The Cadian Recon Squad (Astra Militarum 25th, Cults 53rd) has two long-las with a stubber and a meltagun. Whether that breaks the long-las or weapons team rule needs a check.
- The other T-723 units are legal in their best forms: Aggressors, Beserks, Yaegirs, Vanguard Veterans and Wolf Guard.
- The next search (proposed, not run): a space-filling screen over every live dial at once, then a full factorial on the dials that move anything. That is about 3 to 8 hours on 8 workers; plan for 6. Details below.
How it was run
- The test: each dial at one sensible non-default value over Track A, against the same setting without it. Both runs go through tools/exam.js runOf() with wCarry 0, and the post steps act on that run.
- What counts as moving: "moved" means a ranked unit's Value changes. "Flips" are the unit pairs whose order changes.
- Strength dials run with their switch on in both runs. "alone" is the same dial with its switch off, at wCarry 0.
- Rule multipliers: 1.5, or 1 where Track A's value is not 1. r.cp is 2.88, r.first 1.8, r.synapse 1.5.
- The pairs:
- Each dial's change in Value from Track A, divided by its army's SD of Track A Values, pooled over all 16 armies.
- Spearman's ρ over the units that either dial moves; the ρ over all 733 ranked units and the median per-army ρ sit beside it.
- The exact check compares the two settings' unit orders directly: the unit pairs the two put in different orders, out of 21,313.
- A pair is called a duplicate when ρ is above 0.95 or the code computes the same thing. Otherwise it is an overlap.
- Run time: 16 armies, 174 to 194 computes each. 14 armies took about 20 min on 8 workers; Dark Angels and Space Marines took another 20 min on 2 workers with a larger heap: a Dark Angels compute holds hundreds of MB, and the first pass ran out of memory. Per-compute cost, mean over the tests on one core: Dark Angels 6.1 s, Space Marines 4.1 s, Astra Militarum 2.2 s, Tyranids 1.0 s, World Eaters 0.15 s. That is 20.7 s for one setting over all 16 armies. cascade2's settings, nearer Track A, cost about 13 s.
- Commands:
node tools/dialinventory.js --checknode --max-old-space-size=6000 tools/dialinventory.js --live --workers 8 [--heap 6000] --analyse--mdwrites the tables below.
The next search
Recommended: a space-filling screen, then a full factorial on what moves.
Factors. About 100, built from the 140 searchable live dials. wKill is held fixed, and raw, popshare, typicalW, pointsExp and prem are left out.
- Each switch carries its strength dials as levels: off, on at 1, on at a second strength.
- Each mutually exclusive family is one factor: secondaryVP, missionVP, missionBudget and vpLedger; the lifeKill modes; the screen bundle's structure.
- Every factor has 0 or off as one of its levels.
Stage 1, the screen.
- 4,096 settings. Each factor's levels are balanced and shuffled on their own, as tools/solcascade.js's sample does.
- Plus 454 anchor rows: Track A and cascade2's 240 and 213 survivors, with every other factor at Track A.
- Every row is scored on the real letters and cascade2's three scrambled sets. The post steps are chained in their stack order, not added.
- Cost: about 4,550 settings at 1,400 to 2,200 an hour on 8 workers, so 2.1 to 3.3 h.
The analysis.
- Per army and pooled, each factor level's main effect on the pairs ordered right, real letters against scrambled (cascade2's gate, applied per factor). Each level appears in about 1,400 rows.
- Two-way interactions by a lasso among the factors that pass, plus the named families: leaders, support, carry and screens.
- A factor passes when its real effect beats the scrambled seeds', either in the multi-list armies or in the clean chain's seven armies.
Stage 2, the full factorial.
- Every combination of the factors that pass. Expect 8 to 12 factors at their passing levels: from 2^10 = 1,024 to 3^8 = 6,561 settings.
- Run through cascade2's staged armies, bars and per-army gates, with each army free to take its own values as in cascade2.
- Cost: 0.5 to 4.7 h.
Why this design.
- Every dial moves in every row, so no dial is pinned at off because of an old one-at-a-time result.
- Combinations are seen statistically in stage 1 and exactly in stage 2.
- cascade2's survivors stay in the comparison as anchors.
Rejected:
- One dial at a time, then in pairs, on all 453 survivors: 126,840 settings, 58 to 91 h. On 20 representative survivors it is 5,600 settings (2.6 to 4 h), then 34,800 for the pairs among the top 30 (16 to 25 h). It is also blind to a dial that helps only when others move.
- The full factorial: about 3^100 settings.
Tables
Columns:
- Search: the values proposed for the next search.
- Track A · B: each track's value (post dials are 0 in both).
- Cascade2: the values it searched, or "held at" for a value it kept fixed.
- Live: armies moved of 16, units moved, then in brackets the unit pairs whose order flips. "alone" is the number of armies the dial moves without its sibling.
weights
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| wKill | Kill | weight on Kill (enemy points removed per 100, as Burst) | 0, 249.08, 498.166, 996.33 | 498.166 · 498.166 | no | 16/16, 724 (800) | T-588; fitted 498.166 (step 6); Kill is ~91% of Value; Kill alone 58.4% on 14 armies |
| wSoak | Soak | weight on Soak (enemy fire absorbed, gated by threat) | 0, 7.48, 14.97, 29.93 | 14.9672 · 14.9672 | no | 16/16, 724 (187) | T-588; fitted 14.97; ~2% of Value |
| wScore | Score | weight on objective control per 100 points | 0, 9.65, 19.3 | 9.6518 · 9.6518 | no | 16/16, 686 (331) | T-588; fitted 9.65; scoreFloor (22) and missionVP (28) tried as its shape, not kept |
| wActions | Actions | weight on actions per 100 points | 0, 1.31, 2.61 | 1.3058 · 1.3058 | no | 16/16, 718 (21) | T-588; fitted 1.31; secondaryVP (27) replaces it when on |
| wHold | Hold | weight on OC × Soak ÷ 100 (holding an objective) | 0, 18.89, 37.78 | 18.8878 · 18.8878 | no | 16/16, 686 (624) | T-588; fitted 18.89 |
| wPresence | Presence | weight on bodies on the board per 100 points | 0, 2.52, 5.03 | 2.5155 · 2.5155 | no | 16/16, 719 (66) | T-588; fitted 2.52 |
| wSpawn | Spawn | worth of a spawned point against a point killed | 0, 15.65, 31.31 | 15.6533 · 15.6533 | no | 1/16, 5 (1) | T-595; fitted 15.65 |
| prem | Kill | Kill premium, × all Kill (a second Kill weight). the same job as wKill | 1 | 1 · 1 | no | 16/16, 724 (342) | T-588; neutral at 1, never moved |
base
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| lands | Kill (melee) | scale on each form's charge-model landing share | 1, 1.25, 1.5 | 1.5 · 1.5 | 1.25/1.5 (game-wide) | 16/16, 724 (755) | T-590/T-596; 1.5 in Track A; step 32 (1.25) not kept; cascade2 1.25/1.5, survivors keep 1.5 |
| beta | Kill, Soak | target-choice sharpness β (how well a unit picks its targets) | 3, 6, 12 | 6 · 6 | 6/12 (game-wide) | 16/16, 725 (734) | design/ledger.md §11; 6; cascade2 6/12, survivors keep 6 |
| threat | Soak | the old threat weighting t on Soak (threatSoak replaced it) | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-597; 0 in Track A since step 26 (threatSoak) |
| solo | ranking | rank each unit at its best solo form (0: best of every form, joined included) | 1, 0 | 1 · 1 | no | 16/16, 255 (4253) | T-597; on |
| scarcity | Kill | role scarcity on Kill (scarce killers worth more) | 0, 1 | 1 · 1 | no | 16/16, 723 (3041) | T-598; on; Space Marines −4.2 [−9.1, +0.7] on their own row (T-681), its place open |
| soakfx | Soak | Soak effects (time off the table, heals) | 0, 1 | 1 · 1 | no | 2/16, 3 (1) | T-599; on; moves nothing on Space Marines (T-681) |
| raw | all | lines as measured, before T-608's one scale. a units switch, not a model dial | 0 | 0 · 0 | no | 16/16, 733 (951) | T-608; 0; for benchmarks saved before T-608 only |
| reach | Presence | arrival reach: own bodies × reach when it can arrive far forward | 1, 1.5, 2 | 1 · 1 | no | 16/16, 255 (14) | T-608; step 4 (1.5) reverted |
| combo | display | show a joined form in the Combos table when it beats its parts by this %. never moves a Value | 10 · 10 | no | 0/16, 0 (0) | T-589; display only |
calls
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| anywhere | Presence | × spawned units placed anywhere (the Biovore dial) | 1, 100, 523 | 523 · 523 | no | 1/16, 3 (39) | Jordan's call, step 5: 1 → 523 (Biovores 49th → 5th); step 33 confines it to the Biovores |
| tunnel | Presence | Presence per Subterranean Assault tunnel marker | 0, 1 | 0 · 0 | no | 1/16, 2 (0) | Jordan's call (T-601); 0, never searched |
| fireB | Kill over the game | enemy points shooting each unit a turn (only with killOverGame) (with {killOverGame:1}) | null, 300 | – · – | no | 16/16, 716 (1385); alone 0 | Jordan's call (T-623); hibernated with killOverGame |
| wCarry | Carry | the Transports weight (capacity per point; the cargo line's weight with carryCargo) | 0, 0.5, 1 | 0 · 0 | no | 14/16, 84 (1804) | Jordan's call (T-629); step 20 with carryDedicated reverted; every value costs the Tyranid lists; held at 0 by the exam and the cascades |
rules
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| r.arrival | Kill (and Soak) multipliers | × arrival rules (reserves, Deep Strike, Scouts): measured by the charge model since T-596 | – | 1 · 1 | no | 0/16, 0 (0) | no multiplier since T-596 |
| r.movement | Kill (and Soak) multipliers | × extra movement | – | 1 · 1 | no | 15/16, 339 (148) | 1, never fitted |
| r.mortal | Kill (and Soak) multipliers | × mortal wounds outside attacks | – | 1 · 1 | no | 16/16, 558 (698) | step 29: 1.69 → 1, confirmed |
| r.overwatch | Kill (and Soak) multipliers | × Better Overwatch (Jordan's call) | – | 1 · 1 | no | 8/16, 180 (304) | Jordan's call, 1, never searched |
| r.first | Kill (and Soak) multipliers | × Fights First | – | 2.64 · 2.64 | 1.8/2.64 (game-wide) | 8/16, 15 (54) | fitted 2.64 on 3 units (step 6); step 31 halve not kept; cascade2 1.8/2.64 |
| r.lone | Kill (and Soak) multipliers | × Lone Operative | – | 1.93 · 1.93 | no | 13/16, 32 (9) | fitted 1.93; step 31 not kept; designers +10% (price list) |
| r.synapse | Kill (and Soak) multipliers | × Synapse (multiplies the carrier's own Kill) | – | 2.18 · 2.18 | 1.5/2.18 (game-wide) | 2/16, 26 (122) | fitted 2.18; step 31 not kept; cascade2 1.5/2.18 |
| r.debuff | Kill (and Soak) multipliers | × debuffs on the enemy | – | 1 · 1 | no | 16/16, 125 (964) | 1, never fitted |
| r.buff | Kill (and Soak) multipliers | × buffs on friends | – | 1.12 · 1.12 | no | 15/16, 113 (281) | step 30: 1.24 → 1.12, confirmed |
| r.spawn | Kill (and Soak) multipliers | × spawning: measured by the Spawn line since T-596 | – | 1 · 1 | no | 2/16, 7 (36) | no multiplier since T-596 |
| r.heal | Kill (and Soak) multipliers | × healing | – | 1.805 · 1.805 | no | 12/16, 54 (572) | step 30: 2.61 → 1.805, confirmed |
| r.cp | Kill (and Soak) multipliers | × command points | – | 1.88 · 1.88 | 1.88/2.88 (game-wide) | 16/16, 88 (500) | fitted 1.88; 34b re-filed 11 reaction moves; cascade2 1.88/2.88 (flips between chains) |
| r.detachment | Kill (and Soak) multipliers | × detachment rules | – | 1.065 · 1.065 | no | 13/16, 255 (108) | step 30: 1.13 → 1.065, confirmed |
cuts
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| cutS | letter | the S band cut on Value within the army (default top 10/30/60/85%). never moves a Value; pairwise accuracy can't see it | data · data | no | not run | T-589; letters only; the span yardstick (T-689) reads them | |
| cutA | letter | the A band cut on Value within the army (default top 10/30/60/85%). never moves a Value; pairwise accuracy can't see it | data · data | no | not run | T-589; letters only; the span yardstick (T-689) reads them | |
| cutB | letter | the B band cut on Value within the army (default top 10/30/60/85%). never moves a Value; pairwise accuracy can't see it | data · data | no | not run | T-589; letters only; the span yardstick (T-689) reads them | |
| cutC | letter | the C band cut on Value within the army (default top 10/30/60/85%). never moves a Value; pairwise accuracy can't see it | data · data | no | not run | T-589; letters only; the span yardstick (T-689) reads them |
switches
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| charsJoined | Kill | Kill against the typical army with its characters joined (killNC) | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-605, step 7 reverted (ρ 0.569 → 0.542) |
| synapseMarginal | Kill | Synapse as one more source's worth (synapseAdd), not a multiplier | 0, 1 | 0 · 0 | no | 1/16, 18 (173) | T-611, step 6 reverted (0.569 → 0.516) |
| landsNoClamp | Kill (melee) | lands as 1 − (1 − p)^scale in place of the clamp | 0, 1 | 0 · 0 | no | 16/16, 724 (764) | T-612, step 8 reverted (−0.021) |
| killMargin | Kill | Kill with the rest of the list firing first (killM) | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-613; never measured: its field killM was never built |
| condShares | Kill | conditional abilities at their share of the game (condMult) | 0, 1 | 0 · 0 | no | 2/16, 130 (170) | T-614, step 9 reverted (−0.009) |
| leadersLeading | ranking | a leader ranks at its best joined form | 0, 1 | 0 · 0 | no | 16/16, 182 (3790) | T-604, step 10 reverted (−0.035); exam −2.3; T-715 toggles: none holds |
| killOverGame | Kill | Kill × share of the game still fighting | 0, 1 | 0 · 0 | no | 16/16, 718 (4160) | T-623, step 12 reverted (0.487 → 0.406) |
| joinedMarginal | ranking | a unit ranks at the better of solo and its worth at the margin inside its best joined unit | 0, 1 | 0 · 0 | no | 16/16, 287 (4366) | T-624, step 13 reverted; exam −3.4; T-715 toggles: none holds |
| joinedShapley | ranking | with joinedMarginal: the joined synergy split evenly (Shapley) (with {joinedMarginal:1}) | 0, 1 | 0 · 0 | no | 16/16, 287 (1709); alone 0 | step 14 reverted; exam −1.4 with joinedMarginal; T-715: +0.28 pooled, −0.19 held out |
| killByJob | Kill | Kill ranked against peers in four jobs, in place of role scarcity | 0, 1 | 0 · 0 | no | 16/16, 714 (3127) | T-626, step 16 reverted (0.472 → 0.348) |
| arrivalKill | Kill | Kill dealt in the turn it arrives forward | 0, 1 | 0 · 0 | no | 16/16, 628 (801) | T-633, step 18 reverted at 1; in Track B + 4 dials (1.5) |
| scarceAnswers | Kill | the gap the unit leaves in its army's answers | 0, 1 | 0 · 0 | no | 16/16, 724 (2981) | T-634, step 19 reverted (−0.092) |
| scoreFloor | Score | Score as a floor and saturating curve | 0, 1 | 0 · 0 | no | 16/16, 665 (246) | T-638, step 22 reverted |
| killClassWeight | Kill | Kill into tough classes counts more | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-639, step 23 reverted; inert on Tyranids below ~2.7 |
| threatSoak | Soak | Soak × min(2, Kill ÷ median Kill) | 0, 1 | 1 · 1 | no | 16/16, 727 (105) | T-645, step 26 confirmed (72.1 → 72.3); in Track A |
| burstKill | Kill | Kill read as Burst (finished in one activation) | 0, 1 | 1 · 1 | no | 16/16, 733 (2621) | T-644, step 25 confirmed (70.8 → 72.1); in Track A |
| secondaryVP | new secondary line (replaces Actions, own Presence) | secondary VP priced in points | 0, 1 | 0 · 0 | no | 16/16, 718 (3003) | T-641, step 27 not kept; in Track B + 4 dials (0.5) |
| missionVP | mission line (replaces Score, Hold, Actions) | every mission card scored per unit | 0, 1 | 0 · 0 | no | 16/16, 718 (5484) | T-647, step 28 not kept (0.540 → 0.455) |
| dialBiovoresOnly | Presence | the Biovore dial reaches only the Biovores. a guard on Jordan's call, not a model choice | 1 | 1 · 1 | no | 1/16, 1 (10) | T-650, step 33 confirmed; in Track A |
| missionBudget | mission line | the mission line on the old lines' budget (with {missionVP:1}) | 0, 1 | 0 · 0 | no | 16/16, 713 (5308); alone 0 | T-647, step 28b not kept (0.540 → 0.526) |
| supportCredit | support | support kinds as a per-point credit (κ) in place of multipliers | 0, 1 | 0 · 0 | no | 16/16, 241 (874) | T-654, 35a not kept; 35b provisional, never confirmed (14 armies 59.1 → 57.7) |
| shockPressure | Battle-shock line | Battle-shock pressure priced in points | 0, 1 | 1 · 1 | no | 6/16, 14 (241) | T-653, step 34 confirmed (73.7 → 74.8); in Track A |
| cpRefile | rule multipliers | reaction moves no longer count as command points. a data correction kept as a switch | 1 | 1 · 1 | no | 6/16, 12 (43) | T-653, step 34b confirmed; in Track A |
| preferredTargets | Kill | Kill spent on preferred target classes, capped by the field | 0, 1 | 0 · 1 | no | 16/16, 733 (2715) | T-655, step 36 not kept on A (0.575 → 0.554); in Track B |
| attachChars | Kill | Burst against the enemy army with its characters attached | 0, 1 | 0 · 1 | 0/1 (game-wide) | 16/16, 733 (1655) | T-655 36b neutral on A; held out +1.1 ± 0.7; in Track B and the trio; cascade2 0/1 |
| supportMeasured | support line | support measured on the friends it reaches (replaces the support multipliers) | 0, 1 | 0 · 1 | no | 16/16, 243 (1565) | T-657, step 37 provisional on A (75.0 → 74.5); in Track B |
| vpLedger | all | every line in VP a game, no fitted weight | 0, 1 | 0 · 0 | no | 16/16, 733 (5937) | T-658, step 38 not kept (Tyranids −8.5) |
| lifeKill | Kill | points killed over a unit's life | 0, 1 | 0 · 0 | no | 16/16, 733 (2988) | T-660, step 39: A 79.3 → 78.0, B 77.7 → 76.4 |
carry
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| carryDedicated | Carry | the Carry line counts only Dedicated Transports (acts only through wCarry) (with {}) | 0, 1 | 0 · 0 | no | 13/16, 77 (1076) | T-637, step 20 reverted (with wCarry 1) |
| carryCargo | Carry | the Carry line rebuilt from the cargo (what a ride adds to its best rider) | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-674/T-679; shape A +1.2 in sample, −0.0 ± 0.5 held out |
| carryRide | Carry (cargo) | the lands a ride raises the rider's melee Kill to (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 0.9 | 0 · 0 | no | 9/16, 37 (154); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryShield | Carry (cargo) | × the rider's Value for the turns it rides out of sight (with {carryCargo:1,wCarry:1}) | 0, 0.4 | 0 · 0 | no | 14/16, 68 (1800); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryFrag | Carry (cargo) | fragility's power on the shield (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 2 | 0 · 0 | no | 14/16, 68 (646); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryFragRef | Carry (cargo) | the shield's reference Soak (0: the army's median) (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 150 | 0 · 0 | no | 0/16, 0 (0); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryPer | Carry (cargo) | per the pair's points (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 0.5 | 0 · 0 | no | 14/16, 68 (694); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryDedOnly | Carry (cargo) | only Dedicated Transports earn it (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 1 | 0 · 0 | no | 13/16, 37 (706); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryCap | Carry (cargo) | never above c × its rider's Value (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 1 | 0 · 0 | no | 10/16, 33 (348); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryOnce | Carry (cargo) | one-use deliveries discounted (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 0.5 | 0 · 0 | no | 4/16, 4 (125); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryArrive | Carry (cargo) | re-usable arrival ways a bonus (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 0.5 | 0 · 0 | no | 5/16, 14 (50); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carryNeed | Carry (cargo) | × the share of Kill needing delivery (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 1 | 0 · 0 | no | 14/16, 68 (1800); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
| carrySquads | Carry (cargo) | no lone riders (with {carryCargo:1,wCarry:1,carryShield:0.4}) | 0, 1 | 0 · 0 | no | 5/16, 10 (46); alone 0 | T-674/T-679; on the page at 0; shape A (shield 0.4, frag 2, ref 150, dedicated only, cap 1) +1.2 in sample, −0.0 ± 0.5 held out |
profile
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| profileDials | all | datasheet features as dials on the whole Value (needs meta.profile). needs meta.profile and pm/pf, put on the data by tools/ledgerprofile.js; inert on the ledger files | 0 | 0 · 0 | no | 0/16, 0 (0) | T-662; hibernated (profileLines wins over it) |
| profileLines | each part of Value | the same features on the lines each acts on (needs meta.profile). needs meta.profile and pm/pf, put on the data by tools/ledgerprofile.js; inert on the ledger files | 0, 1 | 0 · 0 | no | 0/16, 0 (0) | T-662; G3 84.3% in sample, held out +0.4, placebos match |
| pm/pf (12 families, 155 features) | each part of Value | a slope per family of datasheet features (tools/crack2core.js FAMILIES), via profileLines. a research family; not a game-wide rule dial; live only on data tools/ledgerprofile.js prepares | 0 · 0 | no | not run | T-662; G3 84.3% in sample, held out +0.4; shuffles +9 to +19; rung (c) 155 knobs fit shuffled letters to 91.5% |
strengths
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| arrivalKillW | Kill | arrivalKill's strength (× ARRIVE_W) (with {arrivalKill:1}) | 0, 1, 1.5 | 1 · 1 | no | 16/16, 663 (636); alone 0 | T-661; candidate 1.5 (Tyranids +2.2 held out, no transfer) |
| scarceAnswersW | Kill | scarceAnswers' strength (with {scarceAnswers:1}) | 0, 0.5, 1 | 1 · 1 | no | 16/16, 724 (1663); alone 0 | T-661; 0.5: +0.8 lists, −0.4 held out |
| scoreFloorW | Score | scoreFloor's strength (with {scoreFloor:1}) | 0, 0.5, 1 | 1 · 1 | no | 16/16, 665 (120); alone 0 | T-661; 0.5: +0.3 nested (small) |
| killClassWeightW | Kill | killClassWeight's strength (with {killClassWeight:1}) | 0, 1, 3 | 1 · 1 | no | 11/16, 526 (389); alone 0 | T-661; nothing at any strength (Tyranids) |
| secondaryVPW | secondary line | secondaryVP's strength (with {secondaryVP:1}) | 0, 0.5, 1 | 1 · 1 | no | 16/16, 718 (1580); alone 0 | T-661; candidate 0.5 (Tyranids +1.3 held out) |
| missionVPW | mission line | missionVP's strength (with {missionVP:1}) | 0, 0.25, 1 | 1 · 1 | no | 16/16, 718 (3629); alone 0 | T-661; 0.25: −1.3 held out |
| vpMissionW | VP ledger | the VP ledger's mission weight (with {vpLedger:1}) | 0, 0.5, 1 | 1 · 1 | no | 16/16, 715 (1982); alone 0 | T-661; every cell below Track B |
| vpPerUnit | VP ledger | mission VP per unit (1) or per point (0) (with {vpLedger:1}) | 0, 0.5, 1 | 1 · 1 | no | 16/16, 715 (3149); alone 0 | T-661; every cell below Track B |
| threatSoakW | Soak | threatSoak's exponent (with {}) | 0, 1, 2 | 1 · 1 | no | 16/16, 718 (93) | T-661; A at 1; nothing at any other strength |
| shockPressureW | Battle-shock line | shockPressure's strength (with {}) | 0, 1, 2 | 1 · 1 | no | 6/16, 14 (86) | T-661; A at 1; candidate 2 (+1.1 held out, −0.1 nested) |
| supportMeasuredW | support line | supportMeasured's strength (0 is support worth nothing) (with {supportMeasured:1}) | 0, 1, 3 | 1 · 1 | no | 16/16, 116 (873); alone 0 | T-661; B at 1; candidate 3 (+1.3 held out, grid edge) |
| preferC | Kill | preferredTargets' class cap C (with {preferredTargets:1}) | 1, 4, 16 | 4 · 4 | no | 16/16, 724 (2120); alone 0 | T-661; B at 4; nothing beats 4 out of sample |
| preferN | Kill | preferredTargets' activations a game N (with {preferredTargets:1}) | 1, 4, 8 | 4 · 4 | no | 16/16, 724 (995); alone 0 | T-661; B at 4; nothing beats 4 out of sample |
| attachRate | Kill | attachChars' share of the field's leaders attached (null: measured 0.8) (with {attachChars:1}) | null, 0.4, 1 | – · – | no | 16/16, 732 (828); alone 0 | T-661; B at the measured 0.8; inert while preferredTargets is on |
| kappa | support | supportCredit's strength κ (with {supportCredit:1}) | 0.5, 1, 2 | 1 · 1 | no | 16/16, 241 (1086); alone 0 | T-654; fitted 1.08 in 35b, in sample only |
| lifeSurvive | Kill | lifeKill's survival strength s (with {lifeKill:1}) | 0, 1, 2 | 1 · 1 | no | 16/16, 723 (725); alone 0 | T-660; s > 0 costs 0.4–2.2 |
| lifeBlend | Kill | lifeKill's Burst share w (with lifeMode 1) (with {lifeKill:1,lifeMode:1}) | 0.25, 0.5, 0.75 | 0.5 · 0.5 | no | 16/16, 725 (299); alone 0 | T-660; w best 0.75, −0.3 |
| lifeMode | Kill | lifeKill's mode: 0 auto, 1 replace, 2 survival only (a selector) (with {lifeKill:1}) | 0, 1, 2 | 0 · 0 | no | 16/16, 733 (2254); alone 0 | T-660 |
ingredients
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| pointsExp | final Value | Value × (points ÷ 100)^−e (e > 0 favours cheap units) | -0.2, 0, 0.2 | 0 · 0 | no | 16/16, 706 (1173) | T-662; the G2 grid's best picks 0 |
| smallPiece | final Value | Value × (points ÷ army median)^e (cheap pieces lose) | 0, 0.2, 0.4 | 0 · 0 | 0/0.2 (game-wide) | 16/16, 710 (1173) | T-670; +1.2 ± 1.0 held out (Tyranids −3.1); the trio; cascade2 0/0.2 (flips between chains) |
| aircraftBoard | Kill, Score, Hold, Presence | aircraft off the board when scoring, shooting from round 2 | 0, 0.5, 1 | 0 · 0 | 0/1 (game-wide) | 7/16, 167 (80) | T-670; +0.2 ± 0.1 held out; the trio; cascade2 0/1 |
| loneOpSoak | Soak | Lone Operative as extra Soak | 0, 0.5, 1 | 0 · 0 | no | 13/16, 32 (5) | T-670; 0.0 held out |
leaders
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| leaderCredit | ranking | a leader ranks at solo + λ × (its best worth at the margin leading − solo) | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 148 (2464) | T-670; −0.8 ± 0.2 held out; T-715 toggles: none holds |
army
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| modeScarcity | Kill | an army's scarcer attack mode worth more | 0, 0.2, 0.5 | 0 · 0 | 0/0.2 (army-specific) | 16/16, 724 (481) | T-672; World Eaters +2.4 held out, others −0.1; cascade2 army-specific 0/0.2 |
| armyPick | Kill (Burst) | Burst with the army rule's choice taken (Blessings of Khorne) | 0, 0.5, 1 | 0 · 0 | no | 0/16, 0 (0) | T-672; World Eaters −2.2 at full |
| armyMarks | Kill (Burst) | a mark's share of Kill (Oath of Moment, the Cabal's rituals) | 0, 0.5, 1 | 0 · 0 | no | 5/16, 253 (318) | T-695; +0.04 at 1 (placebo +0.05) |
| armyRounds | Kill (Burst) | an army rule's options at their odds (Blessings, imperatives, Plague) | 0, 0.5, 1 | 0 · 0 | no | 3/16, 100 (39) | T-695; −0.14 at 1 (World Eaters −2.3) |
| armyStates | Kill (Burst) | a state the ledger counts never met, at share s | 0, 0.5, 1 | 0 · 0 | no | 3/16, 128 (25) | T-695; −0.11 at 1 |
| armyEnabler | added worth | a unit that switches an army rule on gains w × 50 points' worth | 0, 0.5, 1 | 0 · 0 | 0/1 (game-wide) | 3/16, 7 (34) | T-695; +0.33 [+0.0, +0.8] at 1 (Thousand Sons +4.9); cascade2 0/1 |
| armyOrders | added worth | an officer gains w × 20 points' worth per Order | 0, 0.5, 1 | 0 · 0 | no | 1/16, 15 (165) | T-695; +0.08 at 1 (Astra Militarum +1.2) |
screens
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| screenArea | added worth | board denied to enemy arrivals | 0, 1.5 | 0 · 0 | 0/1.5 (army-specific bundle (off / T-677's values)) | 16/16, 718 (3364) | T-675; −0.02 held out; World Eaters alone +5.9; cascade2 in the screen bundle (1.5) |
| screenBlock | added worth | frontage × speed (charge and movement blocking) | 0, 1.5 | 0 · 0 | 0/1.5 (army-specific bundle (off / T-677's values)) | 16/16, 710 (3730) | T-675; −0.05; World Eaters +4.1; cascade2 bundle (1.5) |
| screenTrade | added worth | enemy fire needed to remove it, at least one activation | 0, 0.01, 0.35 | 0 · 0 | 0/0.35 (army-specific bundle (off / T-677's values)) | 16/16, 733 (4299) | T-675; +0.15 ± 0.06 at 0.01; cascade2 bundle (0.35) |
| screenScore | added worth | one more scoring slot × OC (cheap OC and actions) | 0, 0.1, 1 | 0 · 0 | 0/0.1 (army-specific bundle (off / T-677's values)) | 16/16, 686 (2073) | T-675; −0.95; World Eaters +5.5; cascade2 bundle (0.1) |
| screenHide | added worth | Infiltrators, Scouts, Stealth, Lone Operative | 0, 0.5 | 0 · 0 | held at 0/0 | 16/16, 110 (523) | T-675; −1.29; cascade2 bundle (held 0) |
| screenJob | Value | a switch: the screen as a job of its own (max, not sum) (with {screenArea:1.5,screenBlock:1.5}) | 0, 1 | 0 · 0 | no | 16/16, 718 (2736); alone 0 | T-675; with area 2: −2.1, Tyranids −8.7 |
| screenSlots | added worth | only an army's top k screens get the screen credit (with {screenArea:1.5,screenBlock:1.5,screenTrade:0.35,screenScore:0.1}) | 0, 1, 3 | 0 · 0 | 0/1 (army-specific bundle (off / T-677's values)) | 16/16, 717 (5398); alone 0 | T-677; best +0.03 ± 0.41 held out; World Eaters +6.7; cascade2 bundle (1) |
| screenNext | added worth | the next screen after the top k gets x of it (with {screenArea:1.5,screenBlock:1.5,screenTrade:0.35,screenScore:0.1,screenSlots:1}) | 0, 0.25 | 0 · 0 | 0/0.25 (army-specific bundle (off / T-677's values)) | 16/16, 32 (302); alone 0 | T-677; cascade2 bundle (0.25) |
| screenRank | added worth | screen slots ranked by worth (1) rather than per point (0) (with {screenArea:1.5,screenBlock:1.5,screenTrade:0.35,screenScore:0.1,screenSlots:1}) | 0, 1 | 0 · 0 | held at 0/0 | 16/16, 32 (661); alone 0 | T-677; cascade2 bundle (held 0) |
characters
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| charLead | added worth | a CHARACTER carrying it gains w × 50 points' worth: it leads a squad with a dice buff (its presence, not its size) | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 185 (1535) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charMove | added worth | a CHARACTER carrying it gains w × 50 points' worth: movement it gives itself or its squad | 0, 0.25, 0.5 | 0 · 0 | no | 13/16, 46 (400) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charArrive | added worth | a CHARACTER carrying it gains w × 50 points' worth: arrival tricks for its squad | 0, 0.25, 0.5 | 0 · 0 | no | 13/16, 32 (161) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charOC | added worth | a CHARACTER carrying it gains w × 50 points' worth: objective control | 0, 0.25, 0.5 | 0 · 0 | no | 7/16, 17 (185) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charShock | added worth | a CHARACTER carrying it gains w × 50 points' worth: Battle-shock (forced or resisted) | 0, 0.25, 0.5 | 0 · 0 | no | 13/16, 47 (366) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charShockAmp | added worth | a CHARACTER carrying it gains w × 50 points' worth: makes enemy Battle-shock tests harder (on the shock line's prices) | 0, 0.25, 0.5 | 0 · 0 | 0/0.5 (Tyranids only) | 4/16, 5 (36) | T-673; nothing held out (phase 2); cascade2 Tyranids only (0/0.5), gated out |
| charCP | added worth | a CHARACTER carrying it gains w × 50 points' worth: command points | 0, 0.25, 0.5 | 0 · 0 | no | 13/16, 46 (276) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charPsychic | added worth | a CHARACTER carrying it gains w × 50 points' worth: a psyker | 0, 0.25, 0.5 | 0 · 0 | no | 14/16, 55 (298) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charAura | added worth | a CHARACTER carrying it gains w × 50 points' worth: an aura beyond its squad | 0, 0.25, 0.5 | 0 · 0 | no | 10/16, 19 (67) | T-673; +0.09 ± 0.12 held out (phase 2), noise-sized |
| charDebuff | added worth | a CHARACTER carrying it gains w × 50 points' worth: hinders or marks an enemy unit | 0, 0.25, 0.5 | 0 · 0 | no | 11/16, 27 (117) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charEpic | added worth | a CHARACTER carrying it gains w × 50 points' worth: an Epic Hero | 0, 0.25, 0.5 | 0 · 0 | 0/0.5 (game-wide) | 15/16, 76 (336) | T-673; +0.29 ± 0.54 held out (phase 2); cascade2 0/0.5, the one value both chains keep |
| charEnh | added worth | a CHARACTER carrying it gains w × 50 points' worth: a non-Epic character (may carry an enhancement) | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 185 (1544) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charLone | added worth | a CHARACTER carrying it gains w × 50 points' worth: Lone Operative | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 46 (260) | T-673; nothing held out (phase 2: 0 to 0.5 alone, placebo beside) |
| charHome | added worth | a CHARACTER carrying it gains w × 50 points' worth: what it unlocks: its best squad's Value against the median | 0, 0.25, 0.5 | 0 · 0 | 0/0.2 (Tyranids only) | 16/16, 180 (1007) | T-673; nothing held out (phase 2); cascade2 Tyranids only (0/0.2), gated out |
| cpOnce | rule multipliers (cp) | a command-points rule that can't stack keeps r.cp only on the army's best carrier | 0, 0.5, 1 | 0 · 0 | no | 8/16, 44 (576) | T-673; nothing held out (phase 2) |
post
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| sureFire | Value (+ w × K × (d − median d)) | Burst credited by how sure its delivery is (tools/surefire.js) | 0, 0.25, 0.5 | 0 · 0 | 0/0.25/0.5 (game-wide (post)) | 16/16, 418 (1336) | T-712; held out +2.72 ± 0.55 (placebo 0.00); cascade2 0/0.25/0.5/0.5nr |
| sureFire.reserves | sureFire's delivery | sureFire without strategic reserves as a way in (reserves 0) (with {mod:surefire,args:{sureFire:0.5}}) | 1, 0 | default · default | with/without (0.5nr) (game-wide (post)) | 16/16, 702 (544) | T-712; +3.51 held out; cascade2 as 0.5nr (81% of the main chain's 213) |
| exclusiveCarry | added worth | a transport is worth what only it can carry (slow, valuable riders) | 0, 0.5, 1 | 0 · 0 | 0/0.5/1 (army-specific (post)) | 14/16, 62 (623) | T-710; held out +1.33 ± 1.80 (placebo +0.54); cascade2 army-specific 0/0.5/1 |
| exclusiveCarryChars | exclusiveCarry's loads | characters ride in the load (1) or squads only (0) (with {mod:exclusivecarry,args:{exclusiveCarry:1}}) | 1, 0 | 0 · 0 | no | 14/16, 60 (199) | T-710; squads only +0.30 ± 0.99 held out (placebo +0.47) |
| objPresence | added worth | objective presence: scoring pieces × stickiness × reach × OC (tools/objpresence.js) | 0, 0.5, 1 | 0 · 0 | 0/0.5/1 (army-specific (post)) | 16/16, 686 (653) | T-711; plain held out +0.00 (every fold 0); cascade2 only with extras and enabler |
| objPresence.extras | objPresence's credit | only the split and sticky beyond a plain piece (with {mod:objpresence,args:{objPresence:1}}) | 0, 1 | default · default | held at 1 | 16/16, 686 (565) | T-711; extras + enabler +0.61 ± 0.53 held out (Votann); cascade2 held at 1 |
| objPresence.enabler | objPresence's credit | the split's gain also on its enabling transport (with {mod:objpresence,args:{objPresence:1,extras:1}}) | 0, 1 | default · default | held at 1 | 3/16, 4 (18) | T-711; cascade2 held at 1 |
| leaderComp | added worth (leaders) | leaders compete for the best squad: credit and penalty together (tools/leadercomp.js) | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 164 (670) | T-709/T-715; the whole idea +0.03 (placebo +0.05); credit −0.10 |
| leaderCompPen | added worth (leaders) | leaderComp's penalty half alone (a leader beaten to its best squad loses) | 0, 0.5, 1 | 0 · 0 | 0/1 (game-wide (post)) | 16/16, 92 (307) | T-715: penalty alone +0.58 ± 0.11 held out (placebo 0.00); cascade2 0/1 |
| leaderComp.price | leaderComp's synergy | how a leader's synergy is priced: dice (default), lend, lendown, joined (with {mod:leadercomp,args:{leaderComp:0,leaderCompPen:1}}) | dice, lend | default · default | no | 7/16, 35 (180) | T-715 made dice the default |
| leaderComp.stand | leaderComp's stand | the leader stands at its solo row (default) or its led row (with {mod:leadercomp,args:{leaderComp:0,leaderCompPen:1}}) | solo, led | default · default | no | 16/16, 89 (82) | T-709 option; never measured on its own |
| leaderComp.shape | leaderComp's shape | the adjustment by Value or by rank (with {mod:leadercomp,args:{leaderComp:0,leaderCompPen:1}}) | value, rank | default · default | no | 16/16, 92 (736) | T-709; added after the grid failed, no help |
| typicalSize | ranking Value | blend toward the typical squad size (rule mean) | 0, 0.25, 0.5 | 0 · 0 | 0/0.25 (game-wide (post)) | 16/16, 415 (620) | T-683; +0.26 ± 0.35 held out at rule mean; cascade2 0/0.25 (flips between chains) |
| typicalSizeRule | typicalSize's typical squad | which squad is typical: smallest, mean of sizes, best at datasheet wargear (with {mod:typical,args:{typicalSize:0.25,typicalDet:0,typicalSizeRule:mean}}) | mean, smallest, best | 0 · 0 | held at mean | 16/16, 193 (109) | T-683: the smallest squad loses; cascade2 held at mean |
| typicalDet | ranking Value | blend toward the typical (median) detachment | 0, 0.25 | 0 · 0 | held at 0 | 16/16, 593 (175) | T-683: the detachment half loses; cascade2 held at 0 |
| typicalW | ranking Value | sets typicalSize and typicalDet together when they aren't given. a shorthand for both halves | 0 · 0 | no | 16/16, 692 (656) | T-683 phase 1 | |
| bonusShare | Value × | how much of the army's bonus package (army rule, detachments, auras) a unit can receive | 0, 0.5, 1 | 0 · 0 | 0/1 (army-specific (post)) | 16/16, 624 (1103) | T-717; held out −1.22 ± 1.22; Thousand Sons +8.4 at 1 (placebo +1.3); cascade2 army-specific 0/1 |
| bonusCaster | added worth | credit for raising a dice-tested army resource (Cabal rituals, Blessings) | 0, 1 | 0 · 0 | no | 2/16, 5 (4) | T-717; ±0.0 pooled, held out 0 |
| rivalW | ranking Value | a unit marked down by a better same-army rival for the same job | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 712 (942) | T-682; −0.73 ± 0.73 held out (placebo 0.00), not kept |
| jailW | added worth | turn-one jailing of the enemy's zone (tools/steal.js) | 0, 0.5, 1 | 0 · 0 | no | 16/16, 202 (89) | T-684; 0.00 held out |
| stealW | added worth | objective steal: primary VP denied (tools/steal.js) | 0, 0.5, 1 | 0 · 0 | no | 6/16, 7 (89) | T-684; 0.00 held out; Tyranids +0.5 |
| domRival | Value × | a unit dominated on its good jobs by another of its army loses up to 90% | 0, 0.25, 0.5 | 0 · 0 | no | 16/16, 198 (899) | T-716; strict −1.27 ± 1.12 held out; loose2 −0.02 |
| domRival.mode | domRival's rule | the dominance rule: strict worst (default), mean, loose3, loose2 (with {mod:jobprofile,args:{domRival:0.5}}) | worst, loose2 | default · default | no | 16/16, 360 (1408) | T-716; loose3 −0.32, loose2 −0.02 held out |
| gradeBy | ranking Value | grade by Value per point (today), half (× √(pts ÷ 100)) or total worth (× pts ÷ 100) | perPoint, half, total | perPoint · perPoint | no | 16/16, 701 (2727) | T-700; total worth: 14 armies +1.5, Tyranids −2.9 (start-here §8.10); cascade.js and solcascade.js searched it, cascade2 didn't |
diagnostic
| Dial | Acts on | What it does | Search | Track A · B | Cascade2 | Live: armies, units (flips) | History |
|---|---|---|---|---|---|---|---|
| popshare | Value × | tournament list share (popularity), a diagnostic. reads tournament popularity: stays out of letters by Jordan's rule | 0 · 0 | no | 16/16, 729 (4978) | T-701: held out +12.5 ± 3.2; Jordan: never in a letter |
Pairs
| Dial | Dial | Units either moves | Both move | ρ (either moves) | ρ (all units) | Median ρ by army (n) | Pairs each reorders from Track A | Pairs the two order differently |
|---|---|---|---|---|---|---|---|---|
| leaderCredit | joinedMarginal | 287 | 148 | 0.525 | 0.682 | 0.671 (16) | 2464, 4366 | 2168 |
| leaderCredit | leadersLeading | 182 | 148 | 0.719 | 0.722 | 0.640 (16) | 2464, 3790 | 1829 |
| joinedMarginal | leadersLeading | 321 | 148 | 0.509 | 0.522 | 0.525 (16) | 4366, 3790 | 2664 |
| joinedMarginal | ~joinedMarginal+Shapley | 287 | 282 | 0.969 | 0.991 | 0.969 (16) | 4366, 2681 | 1709 |
| ~leaderCredit1 | joinedMarginal | 287 | 148 | 0.525 | 0.682 | 0.671 (16) | 3644, 4366 | 1488 |
| leaderCredit | leaderComp | 177 | 135 | 0.195 | 0.011 | 0.440 (16) | 2464, 670 | 2284 |
| leaderCredit | leaderCompPen | 172 | 68 | 0.179 | -0.508 | 0.502 (16) | 2464, 307 | 2713 |
| joinedMarginal | leaderComp | 316 | 135 | 0.150 | 0.036 | 0.349 (16) | 4366, 670 | 4124 |
| leadersLeading | leaderCompPen | 182 | 92 | -0.040 | -0.381 | 0.258 (16) | 3790, 307 | 3973 |
| supportCredit | supportMeasured | 243 | 241 | 0.515 | 0.201 | 0.646 (16) | 874, 1565 | 1769 |
| ~supportCredit+kappa1 | supportMeasured | 243 | 241 | 0.515 | 0.201 | 0.646 (16) | 874, 1565 | 1769 |
| r.synapse | synapseMarginal | 26 | 18 | 0.641 | 0.831 | 0.998 (1) | 122, 173 | 133 |
| ~synapse1 | synapseMarginal | 26 | 18 | 0.654 | 0.831 | 0.998 (1) | 259, 173 | 86 |
| wCarry | ~carryDedicated+wCarry1 | 84 | 44 | 0.487 | 0.713 | 0.710 (7) | 1804, 756 | 1076 |
| wCarry | ~carryCargoShapeA | 84 | 26 | 0.542 | 0.563 | 0.682 (7) | 1804, 770 | 1260 |
| wCarry | exclusiveCarry | 84 | 62 | 0.584 | 0.860 | 0.546 (7) | 1804, 623 | 1249 |
| ~carryDedicated+wCarry1 | exclusiveCarry | 78 | 28 | 0.132 | 0.518 | 0.109 (6) | 756, 623 | 885 |
| ~carryCargoShapeA | exclusiveCarry | 65 | 23 | 0.320 | 0.566 | 0.052 (5) | 770, 623 | 851 |
| carryCargo | exclusiveCarry | 62 | 0 | – | – | – (0) | 0, 623 | 623 |
| screenArea | screenScore | 718 | 686 | 0.619 | 0.639 | 0.661 (16) | 3364, 2073 | 2141 |
| screenBlock | screenScore | 710 | 686 | 0.724 | 0.746 | 0.731 (16) | 3730, 2073 | 2205 |
| screenTrade | screenScore | 733 | 686 | 0.222 | 0.222 | 0.209 (16) | 4299, 2073 | 4818 |
| screenHide | screenScore | 689 | 107 | 0.016 | 0.056 | 0.026 (16) | 523, 2073 | 2126 |
| screenArea | screenBlock | 718 | 710 | 0.932 | 0.936 | 0.938 (16) | 3364, 3730 | 1300 |
| screenScore | wScore | 686 | 686 | -0.875 | -0.898 | -0.892 (16) | 2073, 331 | 2360 |
| screenScore | objPresence | 686 | 686 | 0.963 | 0.970 | 0.959 (16) | 2073, 653 | 1492 |
| typicalSize | pointsExp | 717 | 404 | -0.143 | -0.150 | -0.088 (16) | 620, 1173 | 1335 |
| typicalSize | smallPiece | 723 | 402 | -0.126 | -0.127 | -0.073 (16) | 620, 1173 | 1335 |
| ~smallPiece0.2 | ~pointsExp-0.2 | 732 | 684 | 0.924 | 0.924 | 0.959 (16) | 1173, 1173 | 0 |
| smallPiece | gradeBy | 732 | 679 | 0.888 | 0.888 | 0.919 (16) | 1173, 2727 | 1644 |
| pointsExp | gradeBy | 706 | 701 | 0.950 | 0.949 | 0.960 (16) | 1173, 2727 | 1644 |
| charLead | charEnh | 221 | 149 | 0.664 | 0.786 | 0.782 (16) | 1535, 1544 | 491 |
| charLead | charHome | 191 | 174 | 0.343 | 0.677 | 0.400 (16) | 1535, 1007 | 1116 |
| charEnh | charHome | 221 | 144 | 0.334 | 0.566 | 0.374 (16) | 1544, 1007 | 1273 |
| charLead | leaderCredit | 190 | 143 | 0.437 | 0.848 | 0.402 (16) | 1535, 2464 | 1887 |
| charLead | leaderCompPen | 188 | 89 | -0.163 | -0.629 | 0.000 (16) | 1535, 307 | 1810 |
| objPresence | wScore | 686 | 686 | -0.870 | -0.893 | -0.873 (16) | 653, 331 | 962 |
| objPresence | wHold | 686 | 686 | -0.680 | -0.737 | -0.661 (16) | 653, 624 | 1193 |
| objPresence.extras | wScore | 686 | 19 | -0.258 | -0.252 | -0.286 (12) | 88, 331 | 417 |
| objPresence | screenScore | 686 | 686 | 0.963 | 0.970 | 0.959 (16) | 653, 2073 | 1492 |
| attachChars | charsJoined | 733 | 0 | – | – | – (0) | 1655, 0 | 1655 |
| arrivalKill | sureFire | 713 | 333 | 0.270 | 0.272 | 0.386 (16) | 801, 1336 | 1503 |
| reach | arrivalKill | 651 | 232 | 0.744 | 0.733 | 0.765 (16) | 14, 801 | 791 |
| shockPressure | charShock | 51 | 10 | 0.481 | -0.359 | 0.707 (4) | 241, 366 | 601 |
| charShock | charShockAmp | 47 | 5 | -0.228 | 0.308 | -0.274 (1) | 366, 36 | 338 |
| cpOnce | r.cp | 90 | 42 | 0.144 | -0.630 | 0.408 (7) | 576, 500 | 1076 |
| charCP | r.cp | 92 | 42 | -0.044 | 0.635 | -0.161 (8) | 276, 500 | 432 |
| secondaryVP | missionVP | 718 | 718 | 0.706 | 0.721 | 0.702 (16) | 3003, 5484 | 3975 |
| missionVP | vpLedger | 733 | 718 | 0.088 | 0.088 | 0.210 (16) | 5484, 5937 | 1407 |
| scarcity | scarceAnswers | 724 | 723 | 0.997 | 0.997 | 0.997 (16) | 3041, 2981 | 102 |
| scarcity | killByJob | 724 | 714 | 0.462 | 0.460 | 0.465 (16) | 3041, 3127 | 3066 |
| scarceAnswers | killByJob | 724 | 715 | 0.469 | 0.467 | 0.466 (16) | 2981, 3127 | 3028 |
| modeScarcity | scarcity | 724 | 723 | 0.168 | 0.169 | 0.249 (16) | 481, 3041 | 3061 |
| rivalW | domRival | 715 | 195 | 0.132 | 0.152 | 0.183 (16) | 942, 899 | 1455 |
| threat | threatSoak | 727 | 0 | – | – | – (0) | 0, 105 | 105 |
| burstKill | lifeKill | 733 | 733 | -0.148 | -0.148 | -0.146 (16) | 2621, 2988 | 4107 |
| lifeKill | killOverGame | 733 | 718 | 0.760 | 0.760 | 0.827 (16) | 2988, 4160 | 2380 |
| armyEnabler | bonusCaster | 11 | 1 | -0.786 | 0.162 | -0.859 (1) | 34, 4 | 38 |
| armyRounds | armyPick | 100 | 0 | – | – | – (0) | 39, 0 | 39 |
| charEpic | charEnh | 255 | 6 | -0.782 | -0.148 | -0.784 (15) | 336, 1544 | 1876 |
| jailW | stealW | 202 | 7 | 0.260 | 0.204 | 0.387 (6) | 89, 89 | 132 |
| stealW | objPresence | 686 | 7 | 0.085 | 0.088 | 0.114 (6) | 89, 653 | 710 |
| ~screensT677 | screenScore | 686 | 48 | 0.330 | 0.328 | 0.423 (16) | 510, 2073 | 2059 |
| sureFire | exclusiveCarry | 454 | 26 | 0.243 | 0.122 | 0.545 (14) | 1336, 623 | 1787 |
(21313 unit pairs in all, over the 16 armies.)
Constants that could be dials
| Constant | Value | File | What it sets |
|---|---|---|---|
| CHAR_PTS | 50 | ledger.js | points a character kind is worth at strength 1 (every char* dial scales it) |
| CHAR_HOME_CAP | 2 | ledger.js | charHome's cap on its best squad's Value ÷ median − 1 |
| SHOCK_AMP | 0.4 | ledger.js | charShockAmp: the extra share of failed Battle-shock tests from a −1 |
| SHOCK_ARMY_TESTS, SHOCK_ARMY_FAIL | 10, 0.35 | ledger.js | an army rule that tests every enemy unit, priced as that many tests at that fail chance |
| SHOCK (bridge 31, turns 1.538, vpOpen 0.65, vpHolder 1.25) | ledger.js | the Battle-shock line's prices | |
| ARMY_PTS, ORDER_PTS | 50, 20 | ledger.js | points an army-rule enabler or an Order is worth at strength 1 |
| ARMY_MARK_ODDS, ARMY_ROUNDS | TS 30/36; WE 58/29/10% | ledger.js | army-rule odds (marks, Blessings) |
| SCREEN_PTS, SCREEN_ACT | 65, 100 | ledger.js | a cheap screen's points; one enemy activation's points (screenTrade's floor) |
| SCREEN_GAP, SCREEN_SPAN, SCREEN_R, SCREEN_MIN | 3, 9, 8, 3 | ledger.js | screen geometry; the fewest models to count as a screen |
| AIR_KILL | 0.8 | ledger.js | aircraftBoard: the share of rounds an aircraft shoots |
| LONE_SHARE | 0.5 | ledger.js | loneOpSoak: the share of enemy shooting that can't target a Lone Operative |
| ARRIVE_W | 1/3 | ledger.js | arrivalKill's weight on the arrival turn (arrivalKillW scales it) |
| ARRIVE_SEEN | infiltrators 0.5, scouts 0.5, rapidIngress 1, others 0 | ledger.js | how far each arrival way is seen coming |
| THREAT_SOAK_CAP | 2 | ledger.js | threatSoak's cap on Kill ÷ median Kill (the exponent is threatSoakW) |
| SCORE_LO, SCORE_HI | 0.25, 0.75 | ledger.js | scoreFloor's quartiles |
| CLASS_TOUGH_W | 2 | ledger.js | killClassWeight's tough-class weight (killClassWeightW scales it) |
| JOB_STRONG, JOB_STEP, JOB_TIE | 0.75, 0.2, 0.01 | ledger.js | killByJob's strong job and second-job step |
| ANSWER_BENCH | 3 | ledger.js | scarceAnswers' bench depth |
| SEC_VP, PRIMARY_VP, SEC_DECK, SEC_HIDE, SEC_KILL_VP, SEC_ADV | 30, 35, 77.5, 0.5, 22.5, 3.5 | ledger.js | the secondary and mission lines' VP prices |
| VPL (left 0.6, destroyed 0.6, spawnRounds 3, secKillShare 0.29, primaryKillShare 0.123) | ledger.js | the VP ledger's constants | |
| ROUNDS, LIST_UNITS | 5, 12 | ledger.js | game length; units in a typical list |
| LANDS_FALLBACK, ENEMY_LANDS | 0.6, 0.6 | ledger.js | melee landing share where the charge model has none; the enemy's into us |
| PROFILE_FLOOR, PROFILE_PHI | 0.05, 0.5 | ledger.js | profile factors' floor; the share of Kill needing the unit alive where it has no life |
| LIFE_W0 | 0.5 | ledger.js | lifeKill's default blend |
| CARGO_ONCE_MOVE | 8 | ledger.js | carryOnce: a one-use delivery moves 8" or less |
| CUT_SHARE | 10/30/60/85% | ledger.js | the default letter cuts |
| attach rate (ATTACH_RATE_DEF) | 0.8 | ledger.js | the field's attached-leader share when attachRate is null |
| MOVE_REF | 12 | exclusivecarry.js | slowness reference Move; load caps 3 squads, 1 character a squad |
| CHARGE, EDGE, CLEAR | 9, 6, 8 | surefire.js | the charge's reach; reserves' edge strip and clearance |
| C (OBJ_VP 1, ADVANCE 3.5, RANGE 3, DISEMBARK 3, VP_GAME 65); holder OC H 8.26 | objpresence.js | objective presence's prices | |
| C (STEAL_VP 4.5, JAIL_TEMPO 0.1, JAIL_FIRST 0.5, …) | steal.js | jail and steal prices | |
| W (kill 2, mode 1, type 1, speed 0.5), GAP_FULL 1 | rivals.js | rivals' likeness exponents and full gap | |
| C (GOOD_SD 0.5, CAP_SD 2, MAX_CUT 0.9) | jobprofile.js | domRival's good-job bar, strength scale and cap | |
| FOCUS_PTS | 500 | bonusshare.js | bonusCaster: the army's own attack points a success is priced on |
| the leader's squad weight (Value percentile) | leadercomp.js | leaderComp's squad worth |