ec032ad89d
GREEN: after all match upserts of a poll tick are written, profiles with instantAlert=true are checked for fresh (notifiedAt=NULL, tenderId IN newTenderIds) matches. If any exist they are bundled into one TenderMailService.sendInstant call per profile per tick (D-05). notifiedAt is stamped 'instant' only on a successful send (D-06) -- the same eligibility gate the digest reads, so a tender x profile pair can never be notified twice across instant and digest. Instant dispatch runs synchronously in the tick, before any later digest run. Each profile's dispatch is wrapped in its own try/catch so a send failure/thrown error never aborts the tick or the remaining profiles' dispatch; notifiedAt stays NULL on failure and is retried next tick/digest. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>