814c45e8b35d4c39df08dc40926c895bbef78310
8 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
90cf01b374 |
docs(обзвон): владелец закрыл ВСЕ хвосты — 11 решений, план перестал врать
Разбор хвостов перед стройкой. Ждущих ответа вопросов у стройки больше нет: шесть «Новое-1…6» из плана закрыты, плюс пять решений сверх них. Протокол 83 решения вместо 72. Что решил владелец: - Р73 этикетка чужого юрлица остаётся как есть; - Р74 дорогу назад для рекламы чинит отдельная смена — до первых живых денег обзвона; - Р75 юриста про голос за границу не спрашиваем, идём как есть. Риск законный и он остаётся — записан прямо, а не спрятан; - Р76 правило часов одно на СМС и обзвон, живой СМС-модуль правим; - Р77 пять номеров арендуем к первому живому обзвону — ОТМЕНЕНО решением Р83; - Р78 тариф 2 плюс 10 остаётся, уточним по замеру; - Р79 длину и содержание речи решает клиент, хвост про опенер снят; - Р80 робота без слов-запиналок слушаем на приёмке; - Р81 телефония уезжает на новую АТС, Манго — только испытание; - Р82 расшифровка чужих записей живёт ШЕСТЬ месяцев, звук 30 дней; - Р83 у Манго ничего не арендуем, переезд робота в план обзвона не заводим. Три решения меняют сам план, и правки внесены: - Р76 разблокировала З-3.1 целиком — развилка «одно правило или второй дом» стояла открытой и ждала ровно этого. Отмечено, что круг на боевой файл отдельный: своя приёмка, свои две строки про соседей, свой выкат; - Р82 отменила мою страховку «расшифровка уходит вместе со звуком». Сроков теперь два, и чистка обязана стереть звук не тронув текст, а требование «сотрите меня» — достать до текста, когда звука уже нет; - Р81 и Р83 превратили «до аренды» в «до новой АТС» в З-3.3. Своя неточность названа вслух: в вопросе про часы я сказал «одна настройка», хотя решается общий код правила. Часы рассылки и часы обзвона остаются разными числами — этого требует Т36 и проверка 8 в З-3.1. Записано и в протоколе, и в плане, чтобы никто не прочитал Р76 как «одни часы на двоих». Найдено при разборе: два вопроса владельцу, добавленные редактором, не попали в промт смене 8 — «с какого кода звоним» и «расшифровки чужих записей». Оба заданы и закрыты. Промт исправлен. Работа, которая теперь не живёт нигде: перевод машины робота на новую АТС. В план обзвона не заводим по решению владельца, но машина прописана на Манго намертво. Названо вслух в протоколе и в промте. ОБА СТОРОЖА ТЕКСТА БЫЛИ МЕРТВЫ — вскрылось при этом же коммите. Пакеты стояли на месте, но внутри пустые: у одного остались только лицензия и схема, у другого файл обрывался посреди строки. Причина — установка, оборванная на пакете, которому нужен компилятор C++, а его на машине нет. Два вывода записаны в промт смене 8: - прежний датчик «посчитай папки в node_modules, должно быть под 750» ЛОЖНЫЙ: он показывал 745 при полностью мёртвых сторожах. Заменён на запуск самих программ; - npx МАСКИРУЕТ поломку: не найдя программу на месте, молча качает чужую версию из сети, и проверка «проходит». Три отчёта «разметка чистая» в этой сессии опирались на неё и доказательством не были. Починено: сломанные пакеты снесены и поставлены заново без сборки. Сторож орфографии показан КРАСНЫМ на подсунутой ошибке — только после этого ему верю. Он же нашёл настоящее: слово «запиналки» отсутствовало в словаре, добавлено. Проверено командой: план 3341 строка, 21 раздел, 47 задач, по волнам 7·7·5·8·9·3·8. Протокол 83 решения, 7 разделов. Разметка и орфография чистые живыми сторожами, а не скачанными. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
2c72a0cb6b |
feat(смс): своё имя есть, но у этой сети не согласовано — номер не уходит вовсе
Решение владельца 05.08.2026. Прежний вариант (подписать нашим «Liderra.ru»)
подменял бренд, за который клиент заплатил, причём незаметно: журнал сообщений
имя отправителя не хранит вовсе. Так уже работает отдел продаж
(SmsRecipientSelector → SKIP_NO_SENDER), и надпись на клиентском экране
(«нет имени отправителя для оператора») давно лежала готовая — её просто никогда
не показывали.
Два случая разведены НАМЕРЕННО и закреплены отдельными тестами:
• своего имени нет вовсе (или приостановлено) — шлём от имени Лидерры, как
и раньше. Смешай их — и рассылка встала бы у ВСЕХ разом: на бою своих имён
заведено НОЛЬ;
• своё имя есть, но у этой сети не согласовано — номер не уходит.
Отсев в ОТБОРЩИКЕ, а не при отправке: деньги не замораживаются, и причина видна
клиенту в предпросмотре — до оплаты.
🪤 Полный прогон поймал мою ошибку, которую выборочные тесты не видели: имя
спрашивалось ПО КАЖДОМУ номеру — 20 000 запросов в базу, отбор 20 000 получателей
вырос с 20 до 29 секунд и упёрся в сторожа скорости. Добавлена памятка на тенанта
(та же защита, что у AllowedSmsOperators, который прямо об этом предупреждает).
После лечения — 1,47 с.
Два теста часовой давности переписаны: они закрепляли ПРЕЖНЕЕ решение и после
смены решения стали неправдой. Теперь проверяют и «в канал не ушло ничего», и
«деньги целы».
Узкая щель записана в коде: если админ сузит список операторов у имени ПОСЛЕ
создания рассылки, такой номер уже лежит в снимке и уйдёт подписанным нашим именем.
Случай редкий — пересогласование переводит имя в «на рассмотрении», а это снимает
блокировку.
Проверено: 4621 тест, упал один чужой (ExampleTest — в рабочей папке не собран
фронтенд). Статанализ 0. Стиль чист.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
c50b3dbe1e |
docs(обзвон): ворота вслепую и суд пройдены — третья редакция плана, 46 задач
Вторую редакцию проверили трое: двое ворот вслепую и судья. Оба проверяющих
работали по спеке, план им был запрещён словами, оба отчитались «план не
открывал» и оба назвали вещи, которых в плане нет. Судья план читал и искал
ошибки надзирателя.
Проверено командой: план 2801 строка / 19 разделов / 46 задач, спека 2126 / 18 /
96 требований, протокол 2150 / 7 / 72 решения. Разметка чистая во всех трёх.
Полный прогон: 4755 из 4760, упавший тест чужой (коммит
|
||
|
|
784ed07392 |
docs(обзвон): все 29 развилок пройдены, решения владельца Р50-Р70
Допрос по спеке «Обзвон» доведён до конца: 28 развилок закрыты решениями
владельца, одна (плата за второе плечо перевода) намеренно отложена до замера
цены звонка. Незаданных развилок не осталось — объявлено вслух.
Хранение и закон:
- Р50/Р51 — сроков два: звук месяц, текст три месяца, потом остаются сухие
итоги. Строку не удаляем: иначе нечем подтвердить счета за прошлые кварталы;
- Р52 — в письме менеджеру и номер, и ссылка на сделку (цена: наша чистка до
почтового ящика не дотягивается);
- Р59 — об удалении своих записей клиент узнаёт надписью на их месте;
- Р61 — менеджера клиента о записи не уведомляем.
Темп и защита:
- Р53 — шесть попыток в сутки, ровно два дня, всего до двенадцати;
- Р58 — три одновременные линии, больше только через нас (работает без замера);
- Р64 — часы менеджера задаёт клиент, и они только сужают общее окно.
Деньги:
- Р54 — обратный звонок после кампании идёт в долг, ничего не резервируем;
- Р55 — большой список запускать не мешаем, но последствие названо словами и
нужно подтверждение;
- Р56 — письмо о минусе называет обе остановки: обзвон и рекламу.
Вход и скрипт:
- Р66 — клиента без записей берём: стандартный каркас, наши вопросы, его сайт;
- Р60/Р67 — пятнадцать записей ориентир, список на входе один;
- Р65 — источников получателей три, как в рассылках; моё Т43 снято;
- Р62 — приёмщица одна, но представляется по сделке звонящего;
- Р68 — манера живёт у робота, а не в скрипте;
- Р69 — машина отдаёт скрипт сразу размеченным;
- Р70 — правку раскладывает руками тот, кто её принимает;
- Р63 — на своём номере отвечаем всегда, запрет второго перезвона снят.
Правило, выведенное по ходу и решившее часть вопросов само: надпись — там, где
клиент за свои деньги получает работу; замок — там, где работа гарантированно
бесполезна. Р18 про выбор, а выбора нет, когда результат предрешён.
Три слепых сторожа найдены и переписаны:
- проверка «манера во всех скриптах одинакова» проходила бы ровно при
расползании правки, то есть зеленела в момент беды;
- проверка «три клиента попросили одно и то же» считала буквальные совпадения
в свободном тексте, которых не бывает;
- Т70 всё ещё обещало шесть месяцев звука вместо принятого месяца.
Дыра, вскрытая ответом: минус на счету гасит клиенту весь Директ, а кто
включает рекламу обратно после пополнения — не задано ни одним решением.
Настоящий мобильный номер, попавший в протокол как название проекта, замаскирован.
В истории он остаётся (коммит
|
||
|
|
2ce4bbc058 |
docs(обзвон): план стройки, ворота по плану и решения владельца Р39–Р41
План фичи «Обзвон» — 32 задачи в шести волнах, 17 помечены «заблокировано развилкой», в конце таблица «развилка → сколько задач держит». Ворота вслепую по плану, двое разными ходами (по требованиям подряд и «пройди один рабочий день в бою»). Нашли то, чего не видели ни спека, ни надзиратель: - заморозка денег под обзвон гасит клиенту рекламу: выключатель считает «баланс не меньше замороженного», при нарушении слушатель тушит все кампании; - перевод звонка — два плеча у оператора, а клиенту выставляется одно соединение: чем чаще успешный перевод, тем хуже сходится экономика; - обратный звонок сегодня попадает в наш собственный отдел продаж; - «исход» означает две разные вещи — чем кончилась попытка и чем кончилась работа с номером. Развилок в спеке стало 29. Ни одна не разрешена — это решения владельца. Новые решения владельца: - Р39 — режимов обзвона два, морозим по-разному: авто-обзвон по поступлению лида, обзвон базы пачкой. Владелец поймал вопросом ошибку в моей рекомендации: спрятать заморозку от выключателя значило сделать минус ежедневным, а резерв фикцией; - Р40 — звук храним месяц, не полгода (правит Р22): место падает с ~50 ГБ на клиента до ~8, а учит текст, а не звук; - Р41 — пул номеров общий на портал, аренду платим мы. Чинит то, что сегодня человек после робота перезванивает нашему отделу продаж. Спека дополнена авто-обзвоном (Т33а–Т33е) и разведённой заморозкой (Т58/Т58а/Т58б). Поправка к прежнему докладу: тревога «записи положат портал» была ошибочной — по чертежу звук лежит в облачном хранилище, а падение 29.05 было на другой машине. Правдой осталось, что в хранилище сегодня не кладётся ничего. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
06f49ce0d1 |
docs+защита: спека обзвона по методу ведения фичи, чужие телефоны убраны из виду гита
Дыра: golos-test/inostrannye/ содержала выгрузку «Записи разговоров» с 44 настоящими номерами живых людей и не была в игноре — любой `git add .` затащил бы персональные данные в историю навсегда. Закрыто правилом /golos-test/, проверено check-ignore. Работа шла по docs/superpowers/METOD-vedeniya-fichi-v1.md (файл лежит в ветке feat/night-dispatcher-part1): спека → ворота вслепую → правки чужой рукой → судья. - спека фичи «Обзвон»: 72 требования, 18 развилок владельца намеренно не разрешены; - приёмочный лист ворот написан ДО работы, а не после; - протокол допроса: решение Р38 (счёт уходит в минус, долг остаётся за клиентом) и поправка к приписке про экран СМС — путь к файлу был моей догадкой, а прочитан следующими как слово владельца, и по нему ошиблись все трое. Замеры смены: ворота вслепую двумя разными ходами дали 0 из 72 «умеет»; полный прогон 4650 проверок, 4646 зелёных, красных ноль. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
64fdf5f424 |
docs(ночной работник): решения владельца 124-127 и промт на обсуждение стройки
Четыре решения владельца, внесённые в планы кусков 5 и 6: - 124 неясный ответ («может быть») не трогает сделанное — работа ждёт ясного слова - 125 об отказе кнопки «продолжить» владелец узнаёт из окна, письма не строим - 126 угол вставшего работника уборка не трогает, пока владелец не решит - 127 забытый на паузе гасится через сутки, и в письме сказано почему Внесение вскрыло три вещи: - решение 127 потребовало нового блока в круге надзирателя: гасить забытую паузу ночью больше некому — кнопка ждёт руки, письмо ушло в 08:10, отсечка 8:00 паузных не трогает по решению 115; - и этот блок столкнулся с блоком куска 7 по ИМЕНИ: оба назвались 6а, 27 упоминаний против 26. Разведены: 6а — конец задачи (кусок 7), 6б — забытая пауза (кусок 6). Порядок круга 6 -> 6а -> 6б; - у решения 124 нашлось непрописанное следствие: пометить неясный ответ отвеченным значит закрыть пункт, сделанный в расчёте на «да». Числа: кусок 5 — 66 проверок, кусок 6 — 51, кусок 7 — 128. Долгов перед кусками 1-4 стало 11. Вопросов владельцу осталось 13 из 17. Промт следующей сессии — только обсуждение, КАК строить. Строить запрещено прямым указанием владельца. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
adc18ce2ae |
docs(ночной работник): семь планов из семи — затея «дело идёт без владельца» допланирована
Бумаги затеи о ночном работнике, который делает работу по плану восемь часов без человека, а утром присылает письмо владельцу. Что лежит: - бумага «что и зачем» (125 проверок, заморожена) и протокол допроса, 123 решения владельца - разрез на семь кусков «тонкой нитью насквозь» и договор о стыках - семь планов: куски 1-4 с кодом, куски 5-7 без кода (решение владельца 121) - записи ворот, правщиков и сквозных ворот, 45 файлов Порядок работы, отработавший впервые целиком: договор, трое пишущих разом, ворота двумя углами на каждый план, правщик, СКВОЗНЫЕ ВОРОТА двумя углами, правщик стыков. Числа: 400 находок ворот за затею, из них 160 за 01.08, ложная одна. Решение 121 (план без кода) проверено замером: планы вдесятеро короче прежних при том же числе проверок, а находок не меньше — но смысловых вместо механических. Сквозные ворота дали 25 находок, ложных ноль, и поймали класс, невидимый изнутри одного плана: приёмка сносила рабочий угол под живым работником, поднятым кнопкой «продолжить». Куски 6 и 7 не назвали друг друга ни разу. Строк настоящего кода — ноль. Ночей отработано — ноль. Стройка не начиналась. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |