No real customers, messages or case details. Each test starts with a synthetic closed matter and a firm-controlled test inbox.
1. Ordinary eligible closure -> one approval task, no immediate send.
2. Same facts plus negative feedback or unfavorable outcome -> same eligibility; these fields must not control routing.
3. Opted out -> suppress; late opt-out after approval/delay -> exit before email.
4. Privacy hold -> lawyer review; do not convert dissatisfaction into a privacy reason.
5. Two matters, same contact/location -> one reserved invitation; second held as duplicate.
6. Request inside approved 180-day example cooldown -> block new request.
7. Reopened matter after approval -> stop dispatch.
8. Historical import into closed stage -> excluded unless a separately approved cohort.
9. Missing permission/reviewer/link -> hold, never default to allow.
10. Manual rerun or duplicate trigger -> consult ledger; no second send.
11. Prior send status unknown -> inspect timeline; no blind resend.
12. Email open or review-link click -> never mark review posted.
13. Confirm destination is correct firm location; no matter details in subject or body.
14. Reply draft -> remains internal; no representation confirmation or public auto-post.
15. Tagged task completed but approval=false -> no send.
16. Tagged task completed and approval=true but no recorded reviewer decision -> no send.
17. Approval expired or revoked after task completion -> no send.
18. Held or declined task -> remove trigger tag before closure, retain approval=false; closing it must not trigger send.
19. Approval=true plus current recorded decision and all safeguards passed -> exactly one authorized test email; preserve decision and send evidence separately.
20. Live account cannot require both event and current approval/decision checks -> task-only automation and manual send fallback.
