a4ff69aea3
Портальный клиент голосового робота считал опознавательный знак задания от ОДНИХ ЦИФР телефона, а в тело задания клал номер КАК ЕСТЬ. Один и тот же человек, записанный `+7 999 000-00-01` и `79990000001`, давал ОДИН знак и РАЗНЫЕ тела. Приёмник робота сравнивает тело дословно и на такую пару отвечает отказом — то есть честный повтор получал отказ вместо звонка. Вторая половина той же беды: знак и телефон приходили в `pozvonit` ДВУМЯ независимыми доводами, и ничто не заставляло их сойтись. Работник очереди, посчитавший знак один раз и перебирающий номера, отправил бы роботу рассогласованную пару, и человеку не позвонили бы молча. Что сделано: - заведено ОДНО место приведения номера — `ObzvonClient::odinVidNomera`; оба потребителя берут номер оттуда: и знак, и тело задания; - `pozvonit` больше НЕ принимает знак снаружи. Он принимает то, из чего знак складывается — арендатор, кампания, номер, попытка, — и складывает знак сам. Рассогласовать нечего: второго номера в клиенте не существует; - отказ по номеру теперь считается по признаку "в номере ноль цифр", а не по `trim`. Раньше строка вроде "абв" проходила дальше и давала ОДИН И ТОТ ЖЕ знак на все такие задания — два разных задания столкнулись бы знаками у робота, и одному из людей не позвонили бы вовсе; - в докблоке `pozvonit` вслух записано следствие решения владельца Р124: номер попытки нельзя прибавлять на исходе, где звонок МОГ состояться, — иначе знак станет другим и защита не сработает именно в том случае, ради которого заведена. Разбор ответа робота, пределы времени, предел одновременных и проверка шифрования Р123 не тронуты. Мерки. Сторожа роняли работой, а не текстом: возвращали беду в код и смотрели на то, что уходит подставному роботу. - вернул в тело номер "как есть" — 4 красных из 55; - вернул знак доводом снаружи — 1 красный из 55, сторож читает доводный ряд метода через `ReflectionMethod`, а не текст файла; - возврат доказан слепком со снятием невидимых знаков конца строки, после возврата 55 из 55 зелёных; - полный прогон на своей базе: 5293 проверки, 5289 зелёных, красных 0, ошибок 0, пропущено 4; арифметика сходится; - `composer stan` — 0 ошибок, `pint --test` — passed. Открытым оставлено и названо в отчёте: `8...` и `+7...` сегодня разные люди для портала; `dopolnitelno` обязано быть одинаковым у повтора; правило счёта попыток не назначено. Отчёт: docs/superpowers/priyomka/stroyka-6/otchyot-pomoshchnika-znak-tela-2026-08-07.md