Context
Status changes made in the reviewer table or on the board are silent — no email fires when an applicant is moved to offered/rejected. The code was designed to support this (cta flag on updateSubmissionField) but no caller ever passes it, so the path is dead code.
Current behavior
updateSubmissionField in src/app/portal/admin/actions.ts emails only when cta === true, then only { title, content } from the matched per-status template.
- No caller passes
cta: in-cell updates (columns.tsx) and board drop-to-status (board/page.tsx) both call it without it. Emails are strictly manual via the per-row Notify button.
- Status history is recorded on every change regardless.
- There is no per-status "send email on transition?" toggle.
Desired behavior
- Optional auto-email when an application transitions to a status that has a saved email template, controlled per status (config flag, e.g.
config.application.status[i].emailOnTransition, default off to preserve current behavior).
- Cell dropdown changes and board drag-drop both honor the flag.
- Opt-out escape hatch per application/row (e.g. do not email if an admin manually toggles, or "notify without email" action) so the flag never forces an email.
- Reuse existing
renderStatusEmail template + tag rendering; failures toast without losing the status change.
Acceptance criteria
Context
Status changes made in the reviewer table or on the board are silent — no email fires when an applicant is moved to
offered/rejected. The code was designed to support this (ctaflag onupdateSubmissionField) but no caller ever passes it, so the path is dead code.Current behavior
updateSubmissionFieldinsrc/app/portal/admin/actions.tsemails only whencta === true, then only{ title, content }from the matched per-status template.cta: in-cell updates (columns.tsx) and board drop-to-status (board/page.tsx) both call it without it. Emails are strictly manual via the per-row Notify button.Desired behavior
config.application.status[i].emailOnTransition, default off to preserve current behavior).renderStatusEmailtemplate + tag rendering; failures toast without losing the status change.Acceptance criteria
emailOnTransitionflag exists and is surfaced in the status/template settings UI