18f3352823
Живой случай 04.08.2026 на боевом: Директ отказал по позиции уже ПОСЛЕ заморозки, и 1 020,60 ₽ клиента повисли запертыми. Кампания осталась черновиком, а «Паузы», которой снимают заморозку, у черновика нет — вернуть деньги было нечем. Заморозка стоит до первого обращения к Директу намеренно: иначе не хватило бы денег, а в Яндексе крутилась бы включённая реклама за счёт Лидерры. Значит убирать за неудачей обязан сам запуск. Граница точная: бронь отпускается, только если в кабинете Яндекса ничего не завелось (yandex_campaign_id пуст). Есть кампания — деньги остаются заперты, она способна крутить показы; запуск возобновляемый, клиент дожмёт его повторным нажатием, а заморозка идемпотентна и второй раз денег не запрёт. Сделано обёрткой над запуском, тело не переливалось. Порядок уборки верный: сначала возвращается прежний статус кампании, потом деньги. Сторожа держат обе стороны границы: «возвращает деньги, если Директ отказал до того, как кампания заведена» (числа #11 один в один) и «оставляет деньги запертыми, если кампания в Яндексе уже заведена». Второй был зелёным сразу, поэтому проверен вырезанием — убрал условие границы, он покраснел. Разбор — в отчёте приёмки, §6ж. Прогон: 383 сторожа блока рекламы, статанализ 0, стиль чист. Схема не менялась.