movement ship: gate v2 fresh-data primary passed (sign-flip p=0.045, CI [+0.02,+0.58]); default TR_MOVEMENT flipped to strafe

This commit is contained in:
2026-09-26 03:19:33 +02:00
parent 087e26955f
commit 3fd6db97e7
3 changed files with 149 additions and 20 deletions
+8 -3
View File
@@ -111,11 +111,16 @@ let VBulletAdmitOnly* =
## `TR_MOVEMENT` selects the movement engine, mirroring the gun rack's
## env-driven construction. Both engines are always constructed, so the switch
## needs no rebuild:
## tfil (DEFAULT) — today's behaviour, byte-for-byte, including the
## separate rammer dispatch.
## strafe (DEFAULT since the gate-v2 fresh-data confirmation, 2026-09-26) —
## the perpendicular-strafe mover and the movement campaign's
## measured champion (docs/movement_campaign.md). It wins rounds by
## dodging (incoming hit rate ~13% vs tfil ~17%), not by dealing
## more damage.
## tfil — the long-shipped mover; still fully reachable as an explicit
## override: `TR_MOVEMENT=tfil`.
## tfil_ring — the new RANGE-WEIGHTED mover (movements/the_floor_is_lava_ring).
## UNPROVEN: it must never become the default silently.
let MovementName* = getEnv("TR_MOVEMENT", "tfil").strip().toLowerAscii()
let MovementName* = getEnv("TR_MOVEMENT", "strafe").strip().toLowerAscii()
## Per-process output paths so concurrent A/B runs do not clobber each other.
let GunStatsPath = getEnv("GUN_STATS_PATH", "/tmp/gun_stats.jsonl")
let ShotLogPath = getEnv("GUN_SHOTLOG_PATH", "/tmp/shot_log.jsonl")