Resuelto via status dropdown skips resolvedAt + reporter resolution email
Live instance: SOP-9 (b41a5184-66c5-4405-89bc-e68cf67a29f8) has status='Resuelto' with resolvedAt NULL. updateSupportTicketStatus (src/lib/support-actions.ts) accepts ANY active supportTicketStatus option, including 'resuelto'. It sets statusId + updatedAt only, and its own comment says it deliberately does not touch the reporter because 'the dedicated resolve form owns the student-facing resolution email'. Nothing ENFORCES that split, so an operator picking Resuelto from the status dropdown lands a ticket in the resolved state while: resolvedAt/resolvedByUserId/resolutionNote stay NULL; the reporter resolution email never fires; the stakeholder fan-out goes out as 'status-change' rather than 'resolved'. resolveSupportTicket keys its exactly-once delivery on resolvedAt, so a later real resolve still works, but until then the ticket is closed and the student was never told. Fix shape (recommend a): (a) reject 'resuelto' in updateSupportTicketStatus with copy pointing at the resolve form, because resolution has required side effects (notify, resolutionNote, resolvedBy) a bare status flip cannot supply. (b) stamp resolvedAt in the status setter - rejected: still skips resolutionNote/resolvedByUserId and would silently mail the reporter from a dropdown. Also needs a call on SOP-9 itself: closed, reporter never notified. Class-A (email-send path). Found while investigating the pm-triage watermark anomaly; unrelated to PLUTO-625.
Questions
Activity
-
Status dropdown resolve/unresolve delegated to setSupportStatusCore, actor=realUserId. SHA f0837fe, audit PASS.