Same pattern as rank-battle: DoMatching stashes context; Finish takes it and records history + played-together. Opponent identity is left as placeholder fields until the resolver carries it through. Test seeds an active ViewerArenaTwoPickRun so RecordBattleResultAsync does not throw no_active_run during the e2e flow. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5.7 KiB
5.7 KiB