825b02cf72
N-4: SendNewLeadsDigestJob выбирал сделки received_at>now()-30min без маркера отправки → ручной/повторный прогон (R3b велит дёргать вручную) дублировал письмо-дайджест. Окно «непересекается» только при ровно-30-мин прогонах. Фикс без схемы: идемпотентность по сделке через Redis SETNX (Cache::add 'digest_sent:<id>', TTL 1 сутки) — паттерн как rate-limit ZeroBalancePausedMail. Уже отправленная сделка в дайджест повторно не входит. TDD: тест «повторный прогон НЕ дублирует» (RED 2 письма → GREEN 1), сюит 5/5. R3b DIGEST-ON + owner-decisions + NEW-статус обновлены (N-4 → закрыто). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>