From fbec11d171d16eed22d1d6acacda67e089bbb23a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 5 Apr 2026 22:04:16 +0000 Subject: [PATCH] Fix complete-round redundant Discord/recalculation and stale comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit complete-round was calling processPlayoffEvent without skipRecalculate, firing recalculateAffectedLeagues and Discord even though each match winner had already triggered those side effects via set-winner. Add skipRecalculate: true to match the autoCompleteRoundIfDone pattern. Also fix autoCompleteRoundIfDone comment which incorrectly said "non-bracket eliminations are recorded" — that's a separate step in finalize-bracket; processPlayoffEvent records bracket round placements. https://claude.ai/code/session_01RhQS6FQRh6iYtVNaryCEf5 --- ...n.sports-seasons.$id.events.$eventId.bracket.server.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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`,