865bd211b1
Яндекс на отказ отдаёт машине «Отклонено на модерации.» и больше ничего. Из этого выходило три беды сразу: в переписке клиент видел одну бесполезную фразу, в списке кампаний под ярлыком «Отклонено» не было вообще ничего — подпись берётся как первая строка, а первым знаком у настоящего ответа идёт перенос, — и то же самое уезжало клиенту письмом. Новый ModerationReason — единственное место, где ответ модерации превращается в текст для клиента. Отписку заменяем честным «Яндекс отклонил рекламу, но причину не назвал. Выясняем — как только узнаем, напишем здесь». Первая строка нарочно короткая: она идёт подписью под ярлыком. Настоящую причину принесёт разведка, задача 15. Ловушка, пойманная до написания: подмену нельзя звать на все объявления подряд — у принятого пустое пояснение это норма, и подмена приписала бы принятой рекламе отказ. Зовём только при отказе, на ловушку стоит отдельный тест-сторож. Второй слой на экране: firstLine обрезает края до разбора на строки, а не после. Слои не подпирают друг друга — сервер решает, что сказать клиенту, экран следит, чтобы сказанное не потерялось. Письмо починилось само, оно берёт текст из переписки. Проверено вырезанием: без подмены два теста краснеют именно на возврате отписки, а тест про обрезку переносов остаётся зелёным. Портал 361 из 361, экраны рекламы 37 из 37, робот 60 из 60, мест разморозки денег по-прежнему четыре.