efec6f22d5
update_stats_on_new_game and handle_forfeit ran .before(GameMutation) while being inside StatsUpdate. win_summary_plugin constrains cache_win_data.before(StatsUpdate), which forces the entire StatsUpdate set to run after GameMutation — creating an unsolvable cycle that panicked Bevy 0.18's schedule solver at startup. Only update_stats_on_win (post-GameMutation) belongs in StatsUpdate. The pre-GameMutation systems still run before GameMutation but outside the set, so external .before(StatsUpdate)/.after(StatsUpdate) constraints remain consistent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>