- Shipped
- September 3, 2026 at 1:03 AM UTC
- Author
- Kamo
- Commit
- 6d31ee1
baf3c88 added an attachment parameter to sendToUser by moving the whole body into a new six-argument overload. The @Transactional stayed on the five-argument signature, which from then on only delegates — and POST /api/email/templates/send, the service-to-service endpoint behind every transactional email on the platform, calls the six-argument one. So **************** ran with no transaction and threw TransactionRequiredException. Every template send has answered 500 since 2026-09-01 22:21, to SecurityService, ESigService, MediaService, DaemonService and DocsService — after handing the message to SMTP, so the mail went out and the caller was told it had not. The worst of it was member creation: SecurityService sends the verification mail from inside the member-creation transaction, so the 500 marked that transaction rollback-only and "Add Member" died with a bare "Internal Server Error" in every organization, discarding a member that had been created in full. Reported for Harmony Home Loans; it was platform-wide. **************** resolves every field.method() call in the service to its repository through reflection and fails when a @Modifying query with no @Transactional of its own is reached from a method that is not @Transactional either. It tracks overloads by declaration rather than by name, which is the whole point here — the annotated twin would otherwise clear the broken one. Verified red on the bug and green on the fix.