Problem
createRefund then sendReply share one try/catch reporting "Retry or handle manually": money already moved but the caller is told to retry, risking a double refund.
Where
lib/execute.ts (shared try around refund + email).
Acceptance
Add a failing test first with refund-OK/email-throw, asserting the result distinguishes "refund done, email failed" from retryable failure. Then fix.
Problem
createRefundthensendReplyshare one try/catch reporting"Retry or handle manually": money already moved but the caller is told to retry, risking a double refund.Where
lib/execute.ts(shared try around refund + email).Acceptance
Add a failing test first with refund-OK/email-throw, asserting the result distinguishes "refund done, email failed" from retryable failure. Then fix.