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).
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"arms": {
|
||||
"control": {
|
||||
"bands_pooled": {
|
||||
"0-100": {
|
||||
"hits": 2,
|
||||
"shots": 3
|
||||
},
|
||||
"100-200": {
|
||||
"hits": 4,
|
||||
"shots": 28
|
||||
},
|
||||
"200-300": {
|
||||
"hits": 26,
|
||||
"shots": 211
|
||||
},
|
||||
"300-450": {
|
||||
"hits": 565,
|
||||
"shots": 4590
|
||||
},
|
||||
"450+": {
|
||||
"hits": 616,
|
||||
"shots": 6671
|
||||
},
|
||||
"ALL": {
|
||||
"hits": 1213,
|
||||
"shots": 11503
|
||||
}
|
||||
},
|
||||
"runs": {
|
||||
"run1.jsonl": {
|
||||
"hits": 81,
|
||||
"shots": 781
|
||||
},
|
||||
"run10.jsonl": {
|
||||
"hits": 90,
|
||||
"shots": 819
|
||||
},
|
||||
"run11.jsonl": {
|
||||
"hits": 78,
|
||||
"shots": 822
|
||||
},
|
||||
"run12.jsonl": {
|
||||
"hits": 80,
|
||||
"shots": 781
|
||||
},
|
||||
"run13.jsonl": {
|
||||
"hits": 85,
|
||||
"shots": 754
|
||||
},
|
||||
"run14.jsonl": {
|
||||
"hits": 78,
|
||||
"shots": 811
|
||||
},
|
||||
"run15.jsonl": {
|
||||
"hits": 62,
|
||||
"shots": 628
|
||||
},
|
||||
"run2.jsonl": {
|
||||
"hits": 92,
|
||||
"shots": 750
|
||||
},
|
||||
"run3.jsonl": {
|
||||
"hits": 90,
|
||||
"shots": 751
|
||||
},
|
||||
"run4.jsonl": {
|
||||
"hits": 67,
|
||||
"shots": 761
|
||||
},
|
||||
"run5.jsonl": {
|
||||
"hits": 88,
|
||||
"shots": 830
|
||||
},
|
||||
"run6.jsonl": {
|
||||
"hits": 72,
|
||||
"shots": 725
|
||||
},
|
||||
"run7.jsonl": {
|
||||
"hits": 86,
|
||||
"shots": 731
|
||||
},
|
||||
"run8.jsonl": {
|
||||
"hits": 77,
|
||||
"shots": 774
|
||||
},
|
||||
"run9.jsonl": {
|
||||
"hits": 87,
|
||||
"shots": 785
|
||||
}
|
||||
}
|
||||
},
|
||||
"headon": {
|
||||
"bands_pooled": {
|
||||
"0-100": {
|
||||
"hits": 0,
|
||||
"shots": 1
|
||||
},
|
||||
"100-200": {
|
||||
"hits": 8,
|
||||
"shots": 97
|
||||
},
|
||||
"200-300": {
|
||||
"hits": 12,
|
||||
"shots": 469
|
||||
},
|
||||
"300-450": {
|
||||
"hits": 21,
|
||||
"shots": 3701
|
||||
},
|
||||
"450+": {
|
||||
"hits": 15,
|
||||
"shots": 4177
|
||||
},
|
||||
"ALL": {
|
||||
"hits": 56,
|
||||
"shots": 8445
|
||||
}
|
||||
},
|
||||
"runs": {
|
||||
"run1.jsonl": {
|
||||
"hits": 2,
|
||||
"shots": 590
|
||||
},
|
||||
"run10.jsonl": {
|
||||
"hits": 6,
|
||||
"shots": 604
|
||||
},
|
||||
"run11.jsonl": {
|
||||
"hits": 5,
|
||||
"shots": 550
|
||||
},
|
||||
"run12.jsonl": {
|
||||
"hits": 2,
|
||||
"shots": 522
|
||||
},
|
||||
"run13.jsonl": {
|
||||
"hits": 4,
|
||||
"shots": 616
|
||||
},
|
||||
"run14.jsonl": {
|
||||
"hits": 3,
|
||||
"shots": 584
|
||||
},
|
||||
"run15.jsonl": {
|
||||
"hits": 4,
|
||||
"shots": 549
|
||||
},
|
||||
"run2.jsonl": {
|
||||
"hits": 3,
|
||||
"shots": 561
|
||||
},
|
||||
"run3.jsonl": {
|
||||
"hits": 1,
|
||||
"shots": 552
|
||||
},
|
||||
"run4.jsonl": {
|
||||
"hits": 6,
|
||||
"shots": 570
|
||||
},
|
||||
"run5.jsonl": {
|
||||
"hits": 4,
|
||||
"shots": 567
|
||||
},
|
||||
"run6.jsonl": {
|
||||
"hits": 3,
|
||||
"shots": 520
|
||||
},
|
||||
"run7.jsonl": {
|
||||
"hits": 8,
|
||||
"shots": 605
|
||||
},
|
||||
"run8.jsonl": {
|
||||
"hits": 5,
|
||||
"shots": 588
|
||||
},
|
||||
"run9.jsonl": {
|
||||
"hits": 0,
|
||||
"shots": 467
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"band_labels": [
|
||||
"0-100",
|
||||
"100-200",
|
||||
"200-300",
|
||||
"300-450",
|
||||
"450+"
|
||||
],
|
||||
"session": {
|
||||
"binary_sha256": "9d20f530d633982b30735d5ece38da09b707737ae1c57238ee41abe928276601",
|
||||
"commit": "a82c864c6075d8325589681bae23b371e3c4f1b5",
|
||||
"conc": 8,
|
||||
"rounds": 7,
|
||||
"runs": 15,
|
||||
"timestamp": "2026-09-24T23:45:01+02:00"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user