ajaysi
8699ffc27d
fix: resolve remaining 5 QA audit findings ( #3 , #8 , #10 , #11 , #12 )
...
#3 — Duplicate prospect handling: add_lead now checks (campaign_id, url)
before insert; bulk_add_leads skips existing URLs.
#8 — Atomic rate limiting: try_increment_* methods atomically check cap
and increment in a single session; router uses these before send.
#10 — Reply matching via Message-ID: sender generates Message-ID header,
stored on OutreachAttempt; reply monitor parses In-Reply-To/References;
poll_replies matches by message_id first, falls back to from_email.
#11 — Save-to-campaign uses existing store results instead of
re-running expensive deepDiscover.
#12 — Lead status Literal type: Pydantic models enforce valid status
values; backend validates via LEAD_VALID_STATUSES frozenset;
frontend API typed as LeadStatus union.
2026-06-03 20:06:11 +05:30
..
2026-03-22 11:36:38 +05:30
2026-06-01 12:24:31 +05:30
2026-02-08 13:56:57 +05:30
2026-02-08 13:56:57 +05:30
2026-02-08 13:56:57 +05:30
2025-09-03 09:40:05 +05:30
2026-02-28 20:08:00 +05:30
2026-02-08 13:56:57 +05:30
2026-03-24 15:45:51 +05:30
2026-03-29 10:16:40 +05:30
2026-05-14 09:11:51 +05:30
2026-06-01 12:24:31 +05:30
2026-06-01 12:24:31 +05:30
2026-03-30 08:13:48 +05:30
2026-06-01 12:24:31 +05:30
2026-06-01 12:24:31 +05:30
2026-03-01 20:15:31 +05:30
2026-05-23 13:37:44 +05:30
2026-05-14 09:11:51 +05:30
2025-09-03 09:40:05 +05:30
2026-06-01 12:24:31 +05:30
2026-06-01 12:24:31 +05:30
2026-03-08 23:09:02 +05:30
2026-02-08 13:56:57 +05:30
2026-06-01 12:24:31 +05:30
2026-04-06 14:37:50 +05:30
2026-05-30 07:58:22 +05:30
2026-03-24 15:45:51 +05:30
2026-05-25 17:24:15 +05:30
2026-04-22 16:10:27 +05:30
2026-05-30 07:58:22 +05:30
2026-03-24 15:45:51 +05:30
2026-05-30 07:58:22 +05:30
2026-03-02 22:02:53 +05:30
2026-03-03 18:25:05 +05:30
2026-03-03 17:22:50 +05:30
2025-08-06 12:48:02 +05:30
2026-02-08 13:56:57 +05:30
2025-08-19 21:48:33 +05:30
2025-08-28 11:11:55 +05:30
2026-02-08 13:56:57 +05:30
2025-10-18 10:28:15 +05:30
2026-02-08 13:56:57 +05:30
2026-06-03 20:06:11 +05:30
2026-06-03 20:06:11 +05:30
2026-06-03 18:28:40 +05:30
2026-06-03 20:06:11 +05:30
2026-06-03 20:06:11 +05:30
2026-06-03 20:06:11 +05:30
2026-05-25 17:07:35 +05:30
2026-02-08 13:56:57 +05:30
2026-02-28 20:08:00 +05:30
2026-02-08 13:56:57 +05:30
2025-10-18 10:28:15 +05:30
2026-05-20 22:44:15 +05:30
2025-10-24 17:22:06 +05:30
2026-01-05 15:49:51 +05:30
2025-08-06 12:48:02 +05:30
2025-08-19 21:48:33 +05:30
2026-02-08 13:56:57 +05:30
2026-05-23 13:13:18 +05:30
2026-02-08 13:56:57 +05:30
2026-05-27 08:46:38 +05:30
2026-05-26 15:25:05 +05:30
2026-05-23 13:09:41 +05:30
2026-05-20 22:44:15 +05:30
2025-09-24 15:22:00 +05:30
2026-03-30 08:13:48 +05:30
2025-08-19 21:48:33 +05:30
2026-05-30 07:58:22 +05:30
2026-05-14 09:11:51 +05:30
2026-02-08 13:56:57 +05:30
2025-08-31 08:26:51 +00:00
2025-11-11 15:57:45 +05:30
2026-04-19 13:16:59 +05:30
2026-05-06 15:29:12 +05:30
2026-04-21 19:38:50 +05:30
2025-10-29 17:10:48 +05:30
2025-10-19 17:56:09 +05:30
2026-01-10 19:32:50 +05:30
2026-05-30 07:58:22 +05:30
2026-03-02 11:42:52 +05:30
2025-11-23 09:21:11 +05:30
2026-05-14 09:11:51 +05:30
2026-03-30 08:13:48 +05:30
2026-02-08 13:56:57 +05:30
2026-03-07 12:00:04 +05:30
2026-06-01 12:24:31 +05:30
2026-05-30 07:58:22 +05:30
2026-03-30 08:09:28 +05:30
2026-05-06 15:29:12 +05:30
2026-03-09 13:36:34 +05:30
2026-05-23 13:11:34 +05:30
2025-10-08 10:13:14 +05:30
2026-02-08 13:56:57 +05:30
2026-02-08 13:56:57 +05:30
2026-06-01 12:24:31 +05:30
2026-03-12 15:00:59 +05:30
2026-05-18 14:35:37 +05:30
2026-05-23 13:09:41 +05:30