Finish now consumes the stashed BattleContext, records a ViewerBattleHistory row (idempotent + retention-capped), and calls IPlayedTogetherWriter for human PvP (skipped for AI). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>