All checks were successful
Build and Push Docker Image / build (push) Successful in 8m14s
Mentor-assignment flows (mentor.assign, autoAssign, bulkAssign, bulkAutoAssign, autoAssignBulkForRound) call createNotification and notifyProjectTeam for MENTEE_ASSIGNED / MENTOR_ASSIGNED. Both notification types have NotificationEmailSetting.sendEmail = true, so the notification system fires its own styled email in addition to the explicit mentor-team / coalesced emails on the same code path. The earlier defer-emails-until-round-open fix only gated the explicit sendMentorBulkAssignmentEmail / sendMentorTeamAssignmentEmail calls; this parallel email path kept firing immediately at every assignment. Result on prod 2026-05-26: Camille Lopez (assigned to 9 projects via two bulk_assigns) received 7 emails at 15:04 + 1 at 15:32 from the notification-system path during draft, plus 1 coalesced email at the 18:20 round activation = 9 sends instead of 1. Every PEARL team member (and equivalents on other teams) received 3 emails for the same reason. Fix - Add `skipEmail?: boolean` to CreateNotificationParams, createNotification, createBulkNotifications, and (via spread) notifyProjectTeam. When true the in-app notification row still fires but the parallel email send is suppressed; the coalesced mentor email and team intro at activateRound time remain the single source of email truth. - Wire it up in every mentor-assignment site: compute the existing shouldDeferEmailsForProject gate once before the createNotification / notifyProjectTeam calls and pass `skipEmail: deferThisEmail`. bulkAssign precomputes draftProjectIds for the whole batch. autoAssignBulkForRound uses the round's status directly. - New regression suite (mentor-email-deferral.test.ts, 3 cases): vi.mocks @/lib/email, asserts zero outbound sends when round is ROUND_DRAFT, confirms in-app notification rows still get written, and re-verifies the ACTIVE-round path still emails. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
No description provided
Languages
TypeScript
99.5%
JavaScript
0.2%
Shell
0.2%
CSS
0.1%