All checks were successful
Build and Push Docker Image / build (push) Successful in 8m27s
mentor.bulkAssign now accepts mentorIds[] instead of a single mentorId and creates the cartesian product of (mentor, project) assignments. Existing active (mentor, project) pairs are skipped per-pair, not per-project, so choosing two mentors against a project that already has one of them still adds the second. Email coalescing stays one-per-mentor: each mentor receives a single email listing only their own newly-assigned projects (not the union). Each touched project still triggers a single team-introduction email when its MENTORING round is ROUND_ACTIVE, listing all currently-active mentors on that team. Dialog UI swaps the radio picker for a checkbox group with a removable chip strip for selected mentors, a live preview of the assignment count (mentors × projects = up to N), and a submit button that names both counts. Toast on success reports total assignments created, projects touched, pairs skipped, and how many mentor emails went out.