From 049ac9257fe22eddc7edaa1917844aa13478e740 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 5 Feb 2026 17:08:09 +0100 Subject: [PATCH] Fix voting start time race condition Set votingStartAt to 1 minute in the past when opening/reopening rounds or awards. This ensures voting is immediately available without the "opens in less than a minute" message appearing due to timing differences between when the date is set and when the page renders. Co-Authored-By: Claude Opus 4.5 --- src/server/routers/round.ts | 4 +++- src/server/routers/specialAward.ts | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/server/routers/round.ts b/src/server/routers/round.ts index 06ad903..99668f6 100644 --- a/src/server/routers/round.ts +++ b/src/server/routers/round.ts @@ -268,7 +268,9 @@ export const roundRouter = router({ if (input.status === 'ACTIVE' && previousRound.status !== 'ACTIVE') { if (previousRound.votingStartAt && previousRound.votingStartAt > now) { - updateData.votingStartAt = now + // Set to 1 minute in the past to ensure voting is immediately open + const oneMinuteAgo = new Date(now.getTime() - 60 * 1000) + updateData.votingStartAt = oneMinuteAgo votingStartAtUpdated = true } } diff --git a/src/server/routers/specialAward.ts b/src/server/routers/specialAward.ts index c2d7665..6628b07 100644 --- a/src/server/routers/specialAward.ts +++ b/src/server/routers/specialAward.ts @@ -207,9 +207,11 @@ export const specialAwardRouter = router({ } if (input.status === 'VOTING_OPEN' && current.status !== 'VOTING_OPEN') { - // If no voting start date, or if it's in the future, set it to now + // If no voting start date, or if it's in the future, set it to 1 minute ago + // to ensure voting is immediately open (avoids race condition with page render) if (!current.votingStartAt || current.votingStartAt > now) { - updateData.votingStartAt = now + const oneMinuteAgo = new Date(now.getTime() - 60 * 1000) + updateData.votingStartAt = oneMinuteAgo votingStartAtUpdated = true } }