Parallel to existing BattleSession. Subscribes to both participants' FrameEmitted, dispatches via ComputeFrames(from, env) returning (target, frame, noStock) routing tuples. Dispatch table currently only covers Scripted-mode behaviour (preserves v1.2). Phase 2 adds Pvp arms; Phase 3 adds Bot. Not yet wired into the handler — Task 9 cuts over.