From b80de43db1079b6789f6172a18ffe28c20578b7c Mon Sep 17 00:00:00 2001 From: prosolis <5590409+prosolis@users.noreply.github.com> Date: Thu, 28 May 2026 15:08:16 -0700 Subject: [PATCH] J3 D8-e: GOGOBEE_SIM_INLINE_BOSS toggle for engine A/B Diagnostic env toggle (off by default) routing the sim's boss/elite doorways through the inline SimulateCombat path instead of the turn engine, for A/B-ing the martial T4/T5 'regression'. D8-e confirmed the gap is honest multiattack math (inline swings the enemy once/round; the turn engine loops the full SRD profile) and that prod autopilot is secretly easier than manual !fight. Toggle left in for the D8-f parity work. --- internal/plugin/expedition_sim.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/plugin/expedition_sim.go b/internal/plugin/expedition_sim.go index 2ace294..c36db72 100644 --- a/internal/plugin/expedition_sim.go +++ b/internal/plugin/expedition_sim.go @@ -14,6 +14,7 @@ package plugin import ( "encoding/json" "fmt" + "os" "sort" "time" @@ -22,6 +23,12 @@ import ( "maunium.net/go/mautrix/id" ) +// simInlineBossCombat is a D8-e DIAGNOSTIC toggle. When GOGOBEE_SIM_INLINE_BOSS=1 +// the sim routes boss/elite doorways through the inline SimulateCombat path +// (production autopilot behavior) instead of the turn-based !fight engine. +// Used to A/B the martial T4/T5 regression. NOT for production. +func simInlineBossCombat() bool { return os.Getenv("GOGOBEE_SIM_INLINE_BOSS") == "1" } + // SimRunner owns a temp-DB AdventurePlugin + EuroPlugin pair and exposes // just enough surface to drive synthetic players end-to-end. type SimRunner struct { @@ -429,7 +436,7 @@ func (s *SimRunner) RunExpedition(uid id.UserID, zoneID ZoneID, walkCap, maxDays for i := 0; i < walkCap; i++ { simNow = simNow.Add(simWalkInterval) - walk := s.P.runAutopilotWalk(ctx, autopilotRoomCap, true, false) + walk := s.P.runAutopilotWalk(ctx, autopilotRoomCap, true, simInlineBossCombat()) if walk.initErr != "" { res.Outcome = "halted" res.StopCode = "init:" + walk.initErr