652b708203
Из 29 карточек приёмки Яндекса закрыты 27. Остались две, и обе ждут не работы, а события: живого отказа всех объявлений разом и платных комбинаций Я1-Я9. Нашлась вторая за день тихая беда. Слушатель остановки рекламы был подписан на событие ДВАЖДЫ: Laravel 11 сам находит слушателей в app/Listeners по типу параметра handle(), а в провайдере он вдобавок прописан руками. Остановка не бесплатная: по каждой кампании клиента она идёт в Яндекс за числом показов, платит за показанное и глушит кампанию, - и всё это делалось по два раза. Деньги уцелели по случайности: списание идемпотентно по ключу показов, снятие заморозки тоже, а второй заход не находил кампаний, первый уже увёл их из работы. Ручная подписка убрана. Найдено не глазами, а вырезанием: новый сквозной сторож Я-Б3 не покраснел, когда подписку отключили. Если бы регистрация была одна, он обязан был. Замерено на живой кампании #13, без единого рубля сверху: - Я-Д3: показано 21, списано 10,50 руб = 21 x 500/1000; по смете было бы 850; - Я-М2: кампания running, заморозка 839,50 = 850 - 10,50, показы идут; - Я-Х4: задача из очереди под боевой ролью без контекста клиента видит 1 кампанию служебным путём и 0 обычным - тот самый молчаливый ноль, ради которого служебный путь и заведён. Новые сторожа, каждый принят красным: - Я-Б2: денег ровно на смету - запуск проходит, вторая кампания уже нет; - Я-Б3: деньги кончились - кампания РЕАЛЬНО встала и владельцу ушло письмо; - Я-М4: пока вердикта нет, не двигаются ни заморозка, ни списание; - Я-М5: после «Исправить» и повторного запуска заморозка ОДНА; - Я-Х2: десять подделок отбиты, чужой номер клиента ничего не меняет; - Я-Д1: заморозка равна смете копейка в копейку, включая некруглую; - Я-Д2: сплошной обход всех семи читающих путей - наценка не видна нигде (прежний сторож проверял один путь из семи); - остановка рекламы подписана ровно один раз. Прогоны: 424 теста рекламы зелёные, статанализ 0, формат чистый. Журнал результатов приёмки дописан разделом на 05.08 - что закрыто, чем закрыто и чего ждём.