f6abd1764d
Task 5 плана v2: RecalcAdAudienceJob (routes/console.php, дневное 03:10 МСК) ночью сверяет стадию связанной карточки sales_prospects с последней запомненной у фирмы (sales_ad_audience_firms.stage_seen/stage_changed_at) и зовёт AdAudienceScheduler, чтобы проставить каждому номеру состояние active/paused/stopped. Найдена и закрыта дыра в исходном плане: ни prospect->updated_at (двигается ЛЮБОЙ правкой карточки — заметка менеджера ложно продлевала бы рекламу), ни firm->assigned_at (момент назначения менеджера, не смены стадии) не годились источником даты «сколько фирма сидит в текущей стадии». Решение: фирма сама хранит эту дату — миграция 2026_07_20_110000 (+2 nullable-колонки, db/CHANGELOG_schema.md v8.78). Новый тест «правка карточки не перезапускает отсчёт рекламы» закрывает ровно эту дыру. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>