# gauntlet analysis — pattern (reference) vs bb (treatment)

session:    /tmp/ab/j117_gauntlet
commit:     da4a971ca99e81894e86a35a521bbef9ba081d3f  binary sha256 f5876e7e8c14389de8f335b1529868da80d987cea5ca298abc058ecaff1925cf
design:     3 runs x 5 rounds per opponent per arm, conc=4
arms:       pattern = (none)
            bb = TR_RACK_PATTERN=off TR_RACK_BITBRAIN=both TR_BITBRAIN_GAINS=1.0,1.25,1.5,2.0 TR_BITBRAIN_MEM=decay

opponents:  32 retained of 33 attempted; 1 dropped
  dropped Aurora: inert (only 1 fires in both arms — never meaningfully fought)

## Per-opponent table (MEASURED; damage is damage DEALT by ModularBot)

| opponent | style | pattern dmg/run | bb dmg/run | Δ dmg | pattern wins/run | bb wins/run | Δ wins | rounds/arm | opp fired | runs |
|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| Aristocles | dodger | 409.3 | 380.0 | -29.3 | 5.00 | 5.00 | +0.00 | 15/15 | 416 | 3/3 |
| CassiusClay | dodger | 133.1 | 127.0 | -6.1 | 0.67 | 1.00 | +0.33 | 15/15 | 1259 | 3/3 |
| Cigaret | dodger | 124.7 | 192.8 | +68.1 | 1.33 | 2.33 | +1.00 | 15/15 | 792 | 3/3 |
| CigaretBH | dodger | 145.2 | 186.6 | +41.4 | 2.33 | 3.33 | +1.00 | 15/15 | 863 | 3/3 |
| Diamond | dodger | 99.4 | 91.4 | -8.0 | 0.00 | 0.33 | +0.33 | 15/15 | 1717 | 3/3 |
| Dookious | dodger | 153.3 | 158.8 | +5.5 | 1.67 | 1.67 | +0.00 | 15/15 | 1206 | 3/3 |
| GresSuffurd | dodger | 192.8 | 163.7 | -29.1 | 1.67 | 2.67 | +1.00 | 15/15 | 1357 | 3/3 |
| Jen | dodger | 354.5 | 362.5 | +8.0 | 5.00 | 5.00 | +0.00 | 15/15 | 730 | 3/3 |
| Komarious | dodger | 223.9 | 265.8 | +41.9 | 2.67 | 3.33 | +0.67 | 15/15 | 1341 | 3/3 |
| KurtWaveSurfer | dodger | 357.4 | 354.3 | -3.1 | 3.33 | 2.33 | -1.00 | 15/15 | 1466 | 3/3 |
| LionWWSVMvoid | dodger | 469.3 | 473.9 | +4.5 | 5.00 | 5.00 | +0.00 | 15/15 | 849 | 3/3 |
| Lukious | dodger | 238.8 | 201.7 | -37.1 | 2.67 | 3.00 | +0.33 | 15/15 | 1307 | 3/3 |
| RougeDC | dodger | 327.9 | 301.1 | -26.8 | 5.00 | 5.00 | +0.00 | 15/15 | 682 | 3/3 |
| WaveSurferGF | dodger | 171.1 | 115.2 | -55.9 | 0.33 | 0.00 | -0.33 | 15/15 | 851 | 3/3 |
| WaveSurferPG | dodger | 123.1 | 146.2 | +23.1 | 0.67 | 0.33 | -0.33 | 15/15 | 877 | 3/3 |
| Ascendant | other | 96.8 | 85.3 | -11.5 | 0.00 | 0.00 | +0.00 | 15/15 | 1078 | 3/3 |
| BrokenSword | other | 140.4 | 124.9 | -15.5 | 3.33 | 3.33 | +0.00 | 15/15 | 631 | 3/3 |
| Coriantumr | other | 108.6 | 153.1 | +44.5 | 1.67 | 2.00 | +0.33 | 15/15 | 1055 | 3/3 |
| DiamondHawk | other | 234.0 | 252.0 | +18.0 | 3.00 | 3.67 | +0.67 | 15/15 | 1444 | 3/3 |
| DrussGT | other | 203.2 | 185.1 | -18.1 | 2.67 | 2.00 | -0.67 | 15/15 | 3602 | 3/3 |
| LightningBug | other | 408.7 | 402.7 | -6.0 | 5.00 | 5.00 | +0.00 | 15/15 | 403 | 3/3 |
| Phoenix | other | 112.8 | 83.4 | -29.4 | 0.33 | 0.00 | -0.33 | 15/15 | 1135 | 3/3 |
| RetroGirl | other | 321.0 | 227.9 | -93.1 | 3.00 | 2.00 | -1.00 | 15/15 | 1317 | 3/3 |
| Shadow | other | 113.4 | 103.5 | -9.9 | 0.33 | 0.33 | +0.00 | 15/15 | 1251 | 3/3 |
| TripHammer | other | 91.4 | 88.0 | -3.4 | 0.33 | 0.33 | +0.00 | 15/15 | 1434 | 3/3 |
| YersiniaPestis | other | 84.8 | 88.5 | +3.8 | 0.33 | 0.00 | -0.33 | 15/15 | 1192 | 3/3 |
| BlitzBat | regular | 129.0 | 115.4 | -13.6 | 3.67 | 3.33 | -0.33 | 15/15 | 646 | 3/3 |
| DiamondStealer | regular | 273.6 | 264.8 | -8.8 | 1.33 | 1.33 | +0.00 | 15/15 | 797 | 3/3 |
| FloodMini | regular | 392.7 | 399.3 | +6.7 | 5.00 | 5.00 | +0.00 | 15/15 | 301 | 3/3 |
| HawkOnFire | regular | 236.6 | 210.7 | -25.9 | 3.33 | 2.33 | -1.00 | 15/15 | 978 | 3/3 |
| PatternRobot | regular | 111.7 | 116.3 | +4.6 | 5.00 | 5.00 | +0.00 | 15/15 | 136 | 3/3 |
| WallAvoider | regular | 281.1 | 325.8 | +44.7 | 3.33 | 3.67 | +0.33 | 15/15 | 886 | 3/3 |

## Pooled arm totals (all retained opponents)

* `pattern`: damage/run = 214.5, round wins = 237/480 = 49.4%, damage taken/run = 291.5
* `bb`: damage/run = 210.9, round wins = 239/480 = 49.8%, damage taken/run = 296.4

## Cross-opponent sign test (HEADLINE)

* **damage/run**: `bb` better on **13** opponents, worse on **19**, tie 0 (of 32) — two-sided sign-test p=0.3771
* **wins/run**: `bb` better on **10** opponents, worse on **9**, tie 13 (of 32) — two-sided sign-test p=1

## Pooled paired estimate (per-opponent deltas; outlier-resistant view)

* **damage/run**: mean Δ = -3.621, between-opponent SD = 31.654, SE = 5.596, 95% CI ≈ [-14.588, +7.347], range [-93.098, +68.117]
  sign-flip permutation (monte-carlo, 1000000 draws): p=0.5266  (MC se=5.0e-04)
  MDE at n=32 opponents (α=0.05, 80% power, paired): 15.677 damage per run
* **wins/run**: mean Δ = +0.021, between-opponent SD = 0.521, SE = 0.092, 95% CI ≈ [-0.160, +0.202], range [-1.000, +1.000]
  sign-flip permutation (monte-carlo, 1000000 draws): p=0.9106  (MC se=2.9e-04)
  MDE at n=32 opponents (α=0.05, 80% power, paired): 0.258 wins per run

## Style split — is Δ larger on REGULAR movers than on dodgers?

(style labels are INFERRED from robots.json name/docs — see tools/ab/opponents_gauntlet.txt)

* **dodger** (n=15): mean Δdmg/run = -0.2 (SD 33.6, MDE 24.3); mean Δwins/run = +0.20 (SD 0.56, MDE 0.41)
* **other** (n=11): mean Δdmg/run = -11.0 (SD 33.7, MDE 28.5); mean Δwins/run = -0.12 (SD 0.45, MDE 0.38)
* **regular** (n=6): mean Δdmg/run = +1.3 (SD 24.4, MDE 27.9); mean Δwins/run = -0.17 (SD 0.46, MDE 0.53)

* regular vs dodger Δdmg/run: Mann-Whitney p=0.8457 (U=42); regular n=6, dodger n=15
* regular vs dodger Δwins/run: Mann-Whitney p=0.1862 (U=28)

## Movement characterisation (MEASURED from the opponent's own trace)

straight% = ticks with |turn| < 1 deg; wall% = within 50 px of a wall; mode% = single most common 1-deg |turn| value (a straight-liner, a spinner and a fixed oscillator all concentrate here — the observable signature of a 'regular' mover)

| opponent | inferred | straight% | wall% | full-spd% | mode% (|turn|) | Δ dmg |
|---|---|---:|---:|---:|---:|---:|
| Aristocles | dodger | 94.7 | 37.4 | 0.6 | 94.7 (0) | -29.3 |
| Ascendant | other | 47.0 | 14.4 | 16.7 | 40.1 (1) | -11.5 |
| BlitzBat | regular | 78.5 | 12.6 | 38.5 | 78.0 (0) | -13.6 |
| BrokenSword | other | 79.4 | 11.4 | 36.1 | 79.2 (0) | -15.5 |
| CassiusClay | dodger | 43.0 | 25.8 | 24.3 | 41.5 (1) | -6.1 |
| Cigaret | dodger | 83.9 | 16.6 | 17.4 | 83.3 (0) | +68.1 |
| CigaretBH | dodger | 84.1 | 44.2 | 15.5 | 83.3 (0) | +41.4 |
| Coriantumr | other | 80.7 | 33.4 | 31.4 | 80.0 (0) | +44.5 |
| Diamond | dodger | 62.5 | 38.2 | 20.3 | 54.9 (0) | -8.0 |
| DiamondHawk | other | 81.8 | 48.7 | 35.5 | 81.4 (0) | +18.0 |
| DiamondStealer | regular | 10.8 | 2.3 | 13.7 | 29.0 (4) | -8.8 |
| Dookious | dodger | 73.7 | 47.4 | 21.7 | 72.0 (0) | +5.5 |
| DrussGT | other | 67.8 | 31.2 | 21.7 | 63.4 (0) | -18.1 |
| FloodMini | regular | 93.8 | 39.9 | 0.0 | 93.7 (0) | +6.7 |
| GresSuffurd | dodger | 65.2 | 56.3 | 22.1 | 60.2 (0) | -29.1 |
| HawkOnFire | regular | 80.7 | 46.8 | 37.0 | 80.3 (0) | -25.9 |
| Jen | dodger | 71.0 | 77.8 | 48.2 | 69.5 (0) | +8.0 |
| Komarious | dodger | 74.9 | 61.3 | 14.0 | 72.9 (0) | +41.9 |
| KurtWaveSurfer | dodger | 76.9 | 29.0 | 20.7 | 75.3 (0) | -3.1 |
| LightningBug | other | 96.1 | 25.1 | 0.0 | 96.0 (0) | -6.0 |
| LionWWSVMvoid | dodger | 77.9 | 49.5 | 9.4 | 75.4 (0) | +4.5 |
| Lukious | dodger | 71.9 | 58.9 | 32.5 | 70.4 (0) | -37.1 |
| PatternRobot | regular | 49.8 | 32.7 | 15.7 | 39.5 (0) | +4.6 |
| Phoenix | other | 47.5 | 21.7 | 22.8 | 31.2 (0) | -29.4 |
| RetroGirl | other | 64.8 | 43.9 | 30.9 | 63.4 (0) | -93.1 |
| RougeDC | dodger | 63.7 | 65.2 | 46.7 | 52.6 (0) | -26.8 |
| Shadow | other | 50.3 | 17.2 | 19.6 | 39.9 (1) | -9.9 |
| TripHammer | other | 56.6 | 47.5 | 15.9 | 42.7 (0) | -3.4 |
| WallAvoider | regular | 38.5 | 11.4 | 29.2 | 27.8 (0) | +44.7 |
| WaveSurferGF | dodger | 48.5 | 19.2 | 20.3 | 32.9 (0) | -55.9 |
| WaveSurferPG | dodger | 52.5 | 20.3 | 22.7 | 37.1 (1) | +23.1 |
| YersiniaPestis | other | 45.1 | 14.1 | 15.3 | 32.1 (1) | +3.8 |

* Spearman(predictability, Δdmg/run) = +0.178 (p≈0.321, n=32)
* Spearman(predictability, Δwins/run) = +0.238 (p≈0.179)
* mean measured predictability of inferred 'regular' movers: 0.58 (n=6)
* mean measured predictability of inferred 'dodger' movers: 0.65 (n=15)

## Validity / liveness

* every retained opponent fired: min opponent fires (summed over both arms) = 136
* arm env reached the bot in every run that was kept: 0 run(s) had a missing declared env var (verified from each bot's own boot report)
* total battle attempts 192 for 192 retained runs (0 arm/opponent cells needed a retry)
* retained rounds: ref=480, test=480

