diff --git a/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.server.ts b/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.server.ts index b549650..21ae56c 100644 --- a/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.server.ts +++ b/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.server.ts @@ -212,7 +212,7 @@ export async function action({ request, params }: Route.ActionArgs) { /** * Auto-complete a round when every match in it is marked complete. * Updates scoringEvents.playoffRound and calls processPlayoffEvent so that - * non-bracket eliminations are recorded and probabilities are refreshed. + * round placements are recorded and probabilities are refreshed. * This replaces the manual "Complete Round" button. * * skipRecalculate=true because the caller already sent a Discord notification @@ -552,8 +552,10 @@ export async function action({ request, params }: Route.ActionArgs) { }; } - // Process playoff event to update participant results - await processPlayoffEvent(params.eventId); + // Process playoff event to update participant results. + // skipRecalculate=true: match winners were already set via set-winner/set-round-winners, + // which triggered recalculateAffectedLeagues and Discord per match. No need to re-fire. + await processPlayoffEvent(params.eventId, undefined, { skipRecalculate: true }); return { success: `${round} completed and placements calculated successfully`,