Files
SirStone 140fe2519a HeadOn (no-lead) vs Pattern LIVE at long range: clean negative, offline ruler killed
2 arms x 15 runs x 7 rounds, one frozen binary from HEAD a82c864, real DrussGT,
server-side events sidecar. Shipped rack is onlyPattern, so control=Pattern-only
and headon=HeadOn-only (TR_RACK_PATTERN=off TR_RACK_HEADON=both).

  arm      dmg/run  dmgtk/run  round wins  shots/run
  control      279        211     48/105       785
  headon        14        228      0/105       580

Round wins and dmg/run both separate at p<0.0001 (MC permutation, se 0.0000),
~7x the damage MDE (35.8). Per range band (pooled, 15 runs):
  300-450: Pattern 12.3% (4590 shots) vs HeadOn 0.6% (3701)  p<0.0001, MDE 2.0pp
  450+   : Pattern  9.2% (6671)       vs HeadOn 0.4% (4177)  p<0.0001, MDE 1.1pp
HeadOn loses EVERY long-range band by 20-23x, so the whole-battle loss is not a
close-range artefact.

The offline ruler (prediction_quality_results.txt) predicted the opposite: HeadOn
meanAbs 14.61 vs Pattern 17.53 at 300-450 and 12.33 vs 16.19 at 450+, hitProxy
.105/.104 and .098/.077 (+27%). That is an open-loop replay of a FIXED enemy
track, so it cannot see that a different bullet makes the surfer dodge
differently; live, the static gun does not lead at all.

TR_PATTERN_RAD_SCALE arms were skipped: applyRadial scales aim DISTANCE along an
unchanged bearing, so it cannot express 'less lead' (bearing is what firing uses).
HeadOn confirmed to ignore bulletSpeed (head_on.nim:9), liveness OK 15/15.

Adds the range-band analyzer tools/ab/ab_range_bands.py (reuses the lead-capture
Run alignment) and the captured fixtures. Does not touch bitbrain_gun.nim /
bitbrain_campaign.md (job-100).
2026-09-24 23:52:49 +02:00

43 lines
2.2 KiB
Plaintext

====================================================================================================
HIT RATE BY RANGE BAND (our shots; band = shooter->target distance px at the fire tick)
session: /tmp/ab_headon arms: control, headon reference: control
====================================================================================================
band control headon
--------------------------------------------------------------
0-100 3 2 66.7% 1 0 0.0%
100-200 28 4 14.3% 97 8 8.2%
200-300 211 26 12.3% 469 12 2.6%
300-450 4590 565 12.3% 3701 21 0.6%
450+ 6671 616 9.2% 4177 15 0.4%
ALL 11503 1213 10.5% 8445 56 0.7%
PER-RUN BAND RATES (shows the spread behind the pooled numbers)
band 0-100
control n= 2 50 100
headon n= 1 0
band 100-200
control n=11 0 0 0 20 0 0 0 0 30 0 0
headon n=15 0 30 0 0 0 0 0 0 0 14 11 0 17 25 0
band 200-300
control n=15 8 17 40 0 40 17 20 10 9 14 15 0 5 12 11
headon n=15 3 4 6 0 4 0 4 3 0 4 4 3 3 0 0
band 300-450
control n=15 14 11 15 13 13 10 11 15 15 10 10 11 14 11 13
headon n=15 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0
band 450+
control n=15 9 11 7 8 9 10 9 10 10 8 11 9 10 9 9
headon n=15 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0
band ALL
control n=15 10 11 9 10 11 10 10 12 12 9 11 10 12 10 11
headon n=15 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0
PER-BAND PERMUTATION TEST vs `control` (per-run rates, two-sided)
band arm d(pp) p method MCse MDE(pp)
------------------------------------------------------------------
0-100 headon -75.00 0.6667 exact 0.0000 99.05
100-200 headon +1.93 0.6609 exact 0.0000 12.37
200-300 headon -12.12 0.0000 MC/B=200,000 0.0000 12.07
300-450 headon -11.84 0.0000 MC/B=200,000 0.0000 1.96
450+ headon -8.89 0.0000 MC/B=200,000 0.0000 1.14
ALL headon -9.90 0.0000 MC/B=200,000 0.0000 1.02