- Shipped
- November 11, 2026 at 9:54 AM UTC
- Author
- Kamo
- Commit
- 50a369f
TriggerConfig gains leadFilter, accountFilter, loanFilter, loanStatuses, audienceId and includeExisting; a drip saved with the flat market/vendor/ product/state lists reads them folded into leadFilter. Lead triggers and the birthday/anniversary sweep check the lead by the campaign's SQL (AudienceQueries.byUidAll, one key read) inside the reach of the member who last saved the drip; the in-memory LeadFacts comparison is gone. byUidAll now reads by key with "x.org_id + 0" (6.6 s -> 0.9 ms on the largest org). New triggers: AUDIENCE_ENTERED, ACCOUNT_CREATED, LOAN_STATUS_REACHED LOAN_CLOSING_SOON and RATE_LOCK_EXPIRING (daily sweep). New enrolment contact types ACCOUNT and LOAN with loan merge fields. ExitRules leaveWhenNoLongerMatching re-checks before each email (NO_LONGER_MATCHES). POST **************** (+ /estimate) enrols a selection, 500 records in the request and the rest as a resumable job on the drip. Columns audience_scope, sweep_state, enroll_job are added on startup by DripAudienceSchema (db/drip-audience.sql).
