diff --git a/cspell-words.txt b/cspell-words.txt index 8ac31653..762bc703 100644 --- a/cspell-words.txt +++ b/cspell-words.txt @@ -2842,3 +2842,5 @@ golosovoy админское непостроенным транк +запиналки +запиналок diff --git a/docs/grilling/2026-08-03-metodika-lena-pod-klienta.md b/docs/grilling/2026-08-03-metodika-lena-pod-klienta.md index 1f671879..dcff86ac 100644 --- a/docs/grilling/2026-08-03-metodika-lena-pod-klienta.md +++ b/docs/grilling/2026-08-03-metodika-lena-pod-klienta.md @@ -2023,6 +2023,325 @@ --- +### Р73. Этикетка «Омега» остаётся как есть + +**Решение владельца (05.08.2026, разбор хвостов перед стройкой):** чужое юрлицо +на экране у человека не меняем. Хвост снят с очереди, стройку не держит и больше +не поднимается. + +**Почему это пришлось решать.** На экране у сотрудника клиента подписано ООО +«Лизинговая Омега» — это этикетка оператора связи, не наша. Робот при этом +представляется Лидеррой, а продаёт компания клиента: **три разных имени в одном +звонке**. Смена этикетки — заявка оператору примерно на десять дней плюс либо +товарный знак, либо перенос номеров на ИП. + +Отрезано: «сменить этикетку до запуска» — упирается в десять дней ожидания +оператора и в бумаги, которых нет; ради косметики на экране стройка ждать не +будет. Отрезано «убрать имя с экрана вовсе» — владелец такого варианта не +выбирал, а самовольно прятать данные оператора нельзя. + +🔴 **Чего это решение НЕ закрывает:** + +- **человек на том конце по-прежнему может спросить «а кто вы такие»** — и увидит + третье имя. Скрипт на этот вопрос ответа не содержит; +- **если оператор потребует привести этикетку в соответствие** — а такое право у + него есть, — решение придётся переигрывать под срок оператора, а не под свой. + +--- + +### Р74. Дорогу назад для рекламы чиним до первых живых денег обзвона + +**Решение владельца (05.08.2026):** обзвон строим сейчас, а починку рекламы +делает **отдельная смена** — успеть надо до того, как обзвон впервые спишет +живые деньги живого клиента. + +**Почему это пришлось решать.** Реклама, остановленная из-за нехватки денег, +обратно не поднимается **ни сама, ни руками** — состояние тупиковое. Обзвон +списывает из того же кошелька. Значит обзвон, загнав клиента в минус, гасит ему +Директ **навсегда**, и клиент узнаёт об этом сам. + +Отрезано: «починить прямо сейчас, обзвон ждёт» — безопаснее всего, но +останавливает стройку ради беды, которая срабатывает только на живых деньгах. +Отрезано: «оставить как есть» — цена ошибки лежит на клиенте, а не на нас, и +молча. + +🔴 **Чего это решение НЕ закрывает:** + +- **починка идёт в БОЕВОМ рекламном модуле** — это не работа обзвона и не может + делаться той же сменой между кругами; +- **срок «до первых живых денег» надо чем-то мерить**. Сегодня ничто не мешает + обзвону списать раньше, чем реклама починена: сторожа, который бы это + остановил, нет; +- **уже остановленные клиенты** — если такие есть на бою прямо сейчас, их + реклама лежит уже теперь, и обзвон тут ни при чём. + +--- + +### Р75. Юриста про голос за границу не спрашиваем + +**Решение владельца (05.08.2026):** идём как есть. Считаем, что согласие на +передачу третьим лицам это покрывает. Вопрос закрыт. + +**Почему это пришлось решать.** Голос человека и расшифровка разговора уходят +**иностранному поставщику речи**. В 96 требованиях об этом нет ни слова — +ворота вслепую нашли это как дыру §18. + +Отрезано: «спросить юриста до первого звонка постороннему» — рекомендовал я, +владелец отклонил. Отрезано: «спрашивать по ходу, звонки не останавливая». + +🔴 **Чего это решение НЕ закрывает:** + +- 🔴 **решение принято владельцем без бумажной проверки, и я на нём не настаиваю + как на безопасном.** Записано как есть: риск не денежный, а законный, и он + остаётся; +- **в требованиях об этом по-прежнему ни слова** — то есть человек, который + придёт после нас, не узнает, что голос уезжает наружу, если не прочитает эту + строку; +- **на самих требованиях это не отражается** — Р75 закрывает вопрос «идти или + ждать», а не «написать в спеке». + +--- + +### Р76. Правило часов — одно на двоих, правим живой СМС-модуль + +**Решение владельца (05.08.2026):** «во сколько можно беспокоить человека» — +**одно правило** на СМС и на обзвон. Живой СМС-модуль правим. Это ровно первый +путь из развилки, которую план держал открытой в задаче З-3.1. + +🔴 **Уточнение, которое я обязан назвать: в моём вопросе стояло «одна +настройка», и это было сказано неточно.** Решается **общий код правила**, а не +общее значение часов. Часы рассылки и часы обзвона остаются **разными числами** — +этого требует Т36 и проверка 8 в З-3.1: админ, подвинув окно рассылок, окно +обзвона подвинуть не должен. Если владелец имел в виду именно одни часы на +двоих — это надо переспросить отдельно, потому что тогда придётся менять +требование. + +**Почему это пришлось решать.** Правило уже живёт в СМС и работает у клиентов. +Обзвону оно нужно ровно такое же. Либо два похожих правила, которые со временем +разъедутся, либо одно на двоих — но тогда правка ложится в **боевой** код, к +которому прямо сейчас обращаются живые клиенты. + +Отрезано: «своё правило у обзвона, СМС не трогаем» — рекомендовал я как самое +безопасное для боя, владелец выбрал честность устройства. Отрезано: «пока своё, +потом свести» — «потом» не наступает. + +🔴 **Чего это решение НЕ закрывает:** + +- 🔴 **это правка боевого кода живой рассылки** — значит своя приёмка, свой + сторож, показанный красным, и своя строка «что могло сломаться у соседей». + Круг на неё нельзя вести вместе с кругами обзвона: файл общий; +- **у СМС и у звонка разная вежливая граница.** Написать в 21:00 и позвонить в + 21:00 — не одно и то же. Одна настройка означает, что граница будет по + строгому из двух, и это никто пока не подтверждал; +- **часовой пояс получателя** остаётся отдельной бедой: он определяется по коду + номера, и у Москвы с Питером регион записан парой — эту грабли ловили в СМС + 03.08. + +--- + +### Р77. Пять номеров арендуем к первому живому обзвону + +**Решение владельца (05.08.2026):** пока строим и проверяем — хватает семи +свободных. Аренду недостающих пяти оформляем **перед первым живым объёмом**, не +раньше. + +**Почему это пришлось решать.** По Р71 нужно двенадцать номеров, свободных у +оператора семь. Платить за простой пяти номеров всё время стройки не за что, но +и упереться в момент запуска нельзя — оформление занимает время. + +Отрезано: «арендовать сейчас» — деньги висят зря месяц и больше. Отрезано: +«начнём на семи, доберём когда упрёмся» — упрёмся ровно в день, когда номера +нужны немедленно. + +🔴 **Чего это решение НЕ закрывает:** + +- **сколько занимает само оформление у оператора, не измерено.** «Перед первым + живым обзвоном» — срок без длины: если оформление идёт неделю, начинать надо + за неделю, и этого никто не проверял; +- **ритм 40–100 звонков в день на номер** — это оценка, не замер. Если + настоящий ритм окажется ниже, двенадцати номеров не хватит, и Р71 придётся + пересчитывать; +- **аренда — действие владельца в кабинете оператора.** Ни одна смена не может + её сделать за него. + +--- + +### Р78. Цена звонка остаётся 2 + 10, уточняется по замеру + +**Решение владельца (05.08.2026):** тариф не трогаем — 2 ₽ за минуту связи плюс +10 ₽ за работу робота. Когда пройдут первые живые звонки и станет видна +настоящая себестоимость, цифру пересчитаем. + +**Почему это пришлось решать.** Тариф назначен вслепую: кабинета поставщика речи +у нас нет, сколько он берёт на самом деле — никто не видел. + +Отрезано: «сначала узнать себестоимость» — упирается в получение доступа в чужой +кабинет и держит стройку. Отрезано: назвать свою цифру сейчас — владелец такой +не назвал. + +🔴 **Чего это решение НЕ закрывает:** + +- **цена обязана меняться настройкой, а не перестройкой.** Если тариф вшить в + код, «уточним по замеру» превратится в новую работу. Это требование к стройке, + а не к владельцу; +- **знака, что тариф ниже себестоимости, у нас нет.** Списываем с клиента 12 ₽, + платим поставщику неизвестно сколько — узнаем это по счёту, а не по портулу; +- **у МТС поле «сколько стоило» уже оказалось непригодным** в СМС — нет причин + считать, что у голоса будет лучше. + +--- + +### Р79. Длину и содержание речи решает клиент — это не наша забота + +**Поправка владельца (05.08.2026), важнее, чем вопрос, на который отвечала.** +Сейчас робот говорит **наш** текст. Дальше он будет говорить **по скрипту +клиента**: сколько по времени, что именно и в каком порядке — решает клиент. +Спор «41 секунда против 13 у чужого колцентра» снимается: это не наш выбор. + +**Почему это меняет постановку.** Хвост «переписать опенер» исчезает целиком. +Но вместе с ним меняется и то, чья это ответственность: мы даём машину, текст +приносит клиент. + +Отрезано: «сделать короткий вариант и сравнить на слух» — я это рекомендовал, +владелец отклонил как решение не за нас. Отрезано: «сократить сразу». + +🔴 **Чего это решение НЕ закрывает:** + +- 🔴 **до первого клиентского скрипта звучит наш текст** — в наших же проверках и + в первых живых звонках. Мина «трубку положили на 24-й секунде» сработала + **ровно на нём**, а не на клиентском; +- 🔴 **машина собирает скрипт сама** (требование Т7, задача З-4.2). Если текст + собирает машина, его длину задаём **мы**, а не клиент — и Р79 на этот случай + ответа не даёт; +- **запреты на речь остаются** (З-4.8): клиентская свобода не безгранична, робот + по-прежнему не имеет права утверждать согласие за клиента и обещать лишнее; +- **кто смотрит клиентский текст до выхода в бой** — сегодня ничья работа. Если + никто, то запреты проверяются только по записи, то есть **после** звонка. + +--- + +### Р80. Робота без слов-запиналок слушаем на приёмке + +**Решение владельца (05.08.2026):** отдельного звонка сейчас не делаем, послушаем +на общей приёмке готового обзвона. + +**Почему это пришлось решать.** Слова-запиналки выключили три смены назад ради +скорости, и с тех пор **вживую робота так никто и не слышал** — есть только +замеры времени. + +Отрезано: «позвонить самим себе ближайшим кругом» — рекомендовал я, владелец +отложил. Отрезано: «не проверять вовсе». + +🔴 **Чего это решение НЕ закрывает:** + +- **замер скорости не заменяет слух.** «Говорит быстрее» и «звучит живым» — не + одно и то же, и второе ничем не измерено; +- **приёмка идёт в конце.** Если голос без запиналок окажется мёртвым, чинить + придётся тогда, когда всё остальное уже построено вокруг него; +- **приёмку надо не забыть завести** пунктом с этим содержанием — иначе решение + «послушаем потом» растворится. + +--- + +### Р81. Телефония переезжает на новую АТС — Манго это только испытание + +**Решение владельца (05.08.2026):** под обзвон **подключается новая АТС**. +Нынешние восемь номеров у Манго — испытательные, не боевые. Вопрос «звонить +красноярским кодом человеку в Москве» снимается вместе с ними. + +**Почему это пришлось решать.** Все восемь номеров оператора красноярские, код +391. Человек в Москве видит на экране чужой город и не снимает трубку — а доля +снявших трубку и есть главный показатель фичи. + +Отрезано: «оставить как есть и мерить потери» — рекомендовал я, владелец +отклонил. Отрезано: «арендовать номера крупных городов у Манго» и «взять +восьмисотый» — оба про Манго, а Манго уходит. + +🔴 **Чего это решение НЕ закрывает — и это самое важное здесь:** + +- 🔴 **Р71 и Р77 повисли.** Они про аренду двенадцати номеров **у Манго**. Если + телефония уезжает, аренда пяти недостающих там может оказаться выброшенными + деньгами. Переспрошено отдельно; +- 🔴 **все замеры номеров — про Манго**: восемь у оператора, два заведены в + машину робота, одним звоним наружу. К новой АТС они не относятся ни одним + числом; +- 🔴 **машина робота настроена на Манго намертво**: в её телефонии прописан адрес + `vpbx…mangosip.ru` и две регистрации. Переезд — это работа на сервере робота, + и в плане такой задачи **нет вовсе**; +- **какая АТС, когда и кто подключает** — не названо. Пока не названо, срок + «к первому живому обзвону» повисает в воздухе; +- **стройку это не держит**: всё портальное — деньги, экраны, очередь, стоп-лист + — от оператора связи не зависит. Держит только живые звонки объёмом. + +--- + +### Р82. Расшифровка чужих записей живёт шесть месяцев + +**Решение владельца (05.08.2026):** записи, которые клиент приносит нам со +**своими** холодными разговорами: сам звук уходит через 30 дней (Т4, Т5), +**расшифровка живёт шесть месяцев**. + +**Почему это пришлось решать.** У наших записей мы хозяева разговора, у чужих — +нет. Там имена, суммы и обстоятельства живых людей, которые про нас ничего не +знают. План до ответа страховался самым осторожным вариантом «расшифровка +уходит вместе со звуком» — это была моя страховка, а не решение. + +Отрезано: «уходит вместе со звуком на 30-й день» — рекомендовал я, владелец +выбрал дольше. Отрезано: «живёт, но без имён и номеров» — обезличивание никогда +не чистит дочиста, а работа отдельная. + +🔴 **Чего это решение НЕ закрывает:** + +- 🔴 **пять месяцев расшифровка живёт без звука** — проверить её по записи будет + нечем. Если робот выучил из разговора неправду, источник уже стёрт; +- 🔴 **стирание по требованию обязано доставать и до расшифровки** (задача + З-2.5). Сегодня она написана про звук: «стереть» уберёт запись, а текст с + теми же именами останется лежать ещё до полугода; +- **от какой даты считать полгода** — от загрузки файла к нам или от даты + самого разговора — не задано. Разница может быть в месяцы; +- **чистка должна быть настоящей.** На машине робота чистки нет **никакой** — + ни звука, ни текста; сроки без сторожа, который их исполняет, это надпись. + +--- + +### Р83. У Манго ничего не арендуем, переезд робота — не работа обзвона + +**Решение владельца (05.08.2026), два ответа сразу:** + +1. **Пять недостающих номеров у Манго не арендуем** — ждём новую АТС. Двенадцать + наберём уже там, где и коды городов можно выбрать сразу. +2. **Перевод машины робота на новую АТС в план обзвона не заводим** — это + отдельная затея, не работа обзвона. + +**Почему это пришлось решать.** Р71 и Р77 были приняты **про Манго**: двенадцать +номеров, из них пять докупить. Р81 сказало, что Манго — только испытание. +Значит аренда у Манго — деньги в пустоту, а старые решения надо было либо +подтвердить, либо снять. + +**Что это меняет в решениях Р71 и Р77.** Арифметика Р71 остаётся: двенадцать +попыток дозвона требуют двенадцати номеров, иначе человек за двое суток видит +один и тот же номер и перестаёт брать трубку. Меняется только **где и когда**: +не у Манго и не «к первому живому обзвону», а на новой АТС. **Р77 в части +«арендовать пять у Манго» отменено.** + +Отрезано: «арендовать всё равно, чтобы не зависеть от сроков АТС» — платим за +то, что выбросим. Отрезано: «отложить решение» — владелец решил сразу. + +🔴 **Чего это решение НЕ закрывает:** + +- 🔴 **живой обзвон объёмом упирается теперь в новую АТС, а не в аренду.** Пока + её нет, семь испытательных номеров Манго держат ритм примерно 40–100 звонков + в день на номер — и это оценка, не замер; +- 🔴 **работа «перевести робота на новую АТС» не живёт теперь НИГДЕ.** В план + обзвона не заводим по решению владельца — значит она должна лежать в затее про + АТС. Если такой затеи на бумаге нет, работа потеряется: сегодня в машине + робота прописан адрес Манго и две регистрации; +- **какая АТС, кто и когда подключает** — по-прежнему не названо; +- **номера в кодах городов** — Р81 назвало это причиной переезда, но выбор кодов + на новой АТС отдельно никто не подтверждал. + +--- + ## Как складывается методика — собрано из решений Р1–Р37 **1. Вход. Без этого не беремся (Р3, Р15).** diff --git a/docs/superpowers/2026-08-07-PROMT-obzvon-stroyka.md b/docs/superpowers/2026-08-07-PROMT-obzvon-stroyka.md index d54ccc3c..434292d6 100644 --- a/docs/superpowers/2026-08-07-PROMT-obzvon-stroyka.md +++ b/docs/superpowers/2026-08-07-PROMT-obzvon-stroyka.md @@ -110,7 +110,7 @@ grep -c '^### Р' docs/grilling/2026-08-03-metodika-lena-pod-klienta.md — спека, 96 требований. **§18 — то, что нашли ворота: 27 дыр, которых в требованиях нет.** Полноту меряют **от спеки**, а не от плана. 5. [docs/grilling/2026-08-03-metodika-lena-pod-klienta.md](../grilling/2026-08-03-metodika-lena-pod-klienta.md) - — **72 решения владельца. Переоткрывать нельзя.** + — **83 решения владельца. Переоткрывать нельзя.** 6. [2026-08-04-PROMT-golosovoy-kanal-smena-4.md](2026-08-04-PROMT-golosovoy-kanal-smena-4.md) — устройство робота, доступ на сервер, команды. @@ -126,10 +126,10 @@ grep -c '^### Р' docs/grilling/2026-08-03-metodika-lena-pod-klienta.md |---|---|---| | ветка | `feat/prospects-manual-testing-kp` | `git rev-parse --abbrev-ref HEAD` | | вершина | `76e4862f9` | `git rev-parse --short HEAD` | -| план | 3258 строк, 20 разделов, **47 задач** | см. §0.5 | +| план | 3341 строка, 21 раздел, **47 задач** | см. §0.5 | | задачи по волнам | 7 · 7 · 5 · 8 · 9 · 3 · 8 | `grep -o -E '^### З-[0-9]+\.[0-9]+'` | | спека | 2126 строк, 18 разделов, **96 требований** | см. §0.5 | -| протокол | 2150 строк, **72 решения** | см. §0.5 | +| протокол | **83 решения** | см. §0.5 | | полный прогон | 4760 тестов, **4755 прошли, 1 упал** | `php artisan test` из `app` | 🪤 **Прогон мерен на вершине `c11ee3ad8`. После него соседние смены положили ещё @@ -153,14 +153,17 @@ grep -c '^### Р' docs/grilling/2026-08-03-metodika-lena-pod-klienta.md - **Все 29 развилок пройдены**, 28 закрыты решениями, одна (плата за второе плечо перевода) отложена владельцем осознанно и стройку **не держит**. -- **72 решения владельца** в протоколе, с отрезанными ветками и причинами. +- **83 решения владельца** в протоколе, с отрезанными ветками и причинами. + 🔴 **Р73–Р83 приняты 05.08.2026 и закрыли ВСЕ вопросы владельцу** — см. §5. - **96 требований** в спеке плюс §18 с уловом ворот. - **План прошёл ворота вслепую, суд и редактора.** 47 задач, у каждой названы файлы и проверки, порядок по узким горлам обязателен. - **Замеры смены** (перепроверять не надо, но знать полезно): - номеров у оператора Манго **восемь**: один рабочий штатный отдела продаж «не трогать», пять свободных, один входящий на робота, один исходящий. - В телефонию машины робота заведено **два**, наружу звоним **одним**; + В телефонию машины робота заведено **два**, наружу звоним **одним**. + 🔴 **Все восемь — испытательные** (Р81): телефония уезжает на новую АТС, и + ни одно из этих чисел к ней не относится; - **письмо о нехватке денег — одно и боевое**: шлётся при списании за показы Директа живым клиентам. Правка задевает бой; - на машине робота **13 ГБ свободно из 19**, записей 68 МБ в 89 файлах, @@ -175,8 +178,24 @@ grep -c '^### Р' docs/grilling/2026-08-03-metodika-lena-pod-klienta.md Три прибора метода: -1. **Цело ли хозяйство:** `ls node_modules | wc -l` — должно быть под 750, не 8. - 🪤 Оборванная установка молча ставит десятую часть и убивает сторожей текста. +1. 🔴 **Цело ли хозяйство — считать НЕ папки.** Прежний совет «`ls node_modules | + wc -l` должно быть под 750» **проверен и оказался ложным датчиком**: 05.08.2026 + он показал 745, всё выглядело целым, а сторожа текста были мертвы. Папки стояли + на месте, но **внутри пустые** — файлы не распаковались. Честный датчик: + + ```bash + ls node_modules/.bin | grep -cE 'cspell|markdownlint' # ноль = сломано + node node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs --version + ./node_modules/.bin/cspell --version + ``` + + 🪤 **`npx` маскирует поломку**: не найдя пакет на месте, он молча качает чужую + версию из сети, и проверка «проходит». Гонять только местными путями, как выше. + + 🪤 **Починка упирается в компилятор**: `npm install` падает на пакете + `better-sqlite3`, которому нужен Visual Studio, а его на машине нет. Лечится + `npm install --ignore-scripts`, но если папки уже пустые — нужна переустановка + с удалением, **а это разрешение владельца**. 2. **Полный прогон** (§2) — знать точку отсчёта до своих правок. 3. **Сервер робота:** `md5sum ~/lena-inworld/most.py` и `systemctl show lena-inworld -p Environment`. Мост **дважды молча откатывался** @@ -224,30 +243,48 @@ grep -c '^### Р' docs/grilling/2026-08-03-metodika-lena-pod-klienta.md --- -## 5. ХВОСТЫ, КОТОРЫЕ ЖДУТ ВЛАДЕЛЬЦА +## 5. ХВОСТЫ ВЛАДЕЛЬЦА — ✅ ВСЕ ЗАКРЫТЫ 05.08.2026 -Их не решить своей волей. Стройку они **не держат**, но тикают. +🔴 **Ждущих хвостов у стройки НЕТ.** Владелец разобрал их все за один заход, +решения Р73–Р83 записаны в протоколе с отрезанными ветками. Переспрашивать +нельзя. Ниже — только то, что из этих решений **следует для стройки**. -1. 🔴 **Этикетка «Омега».** Человек видит на экране чужое юрлицо, робот - представляется Лидеррой, продаёт компания клиента — **три имени в одном - звонке**. Смена — заявка в Манго примерно на **десять дней** плюс товарный знак - или перенос номеров на ИП. -2. 🔴 **Аренда пяти номеров.** По решению Р71 нужно двенадцать, свободных семь. -3. 🔴 **Трансграничная передача голоса** — голос и расшифровка уходят иностранному - поставщику, в 96 требованиях об этом ни слова. Это к юристу. -4. 🔴 **Одно правило часов на всех или второй дом правилу** — правка **живого** - СМС-модуля. Без слова владельца не трогать. -5. 🔴 **Дорога назад для рекламы.** Состояние «остановлено из-за денег» тупиковое: - обратно не поднимается ни само, ни руками. Обзвон, загнав клиента в минус, - гасит ему Директ навсегда. Починка — **боевой рекламный модуль**, к обзвону - отношения не имеет. -6. **Цена звонка.** Тариф 2 ₽ + 10 ₽ назначен вслепую, кабинета поставщика голоса - у нас нет. -7. **Опенер** — 41 секунда против 13 у чужого колцентра, компанию не называет - вовсе. Чужой текст своей волей не переписываем: сделать короткий вариант и дать - владельцу сравнить на слух. -8. **Позвонить самим себе без филлеров** — выключены три смены назад, вживую - никто так и не слышал. +| было хвостом | решение | что делаешь ты | +|---|---|---| +| этикетка «Омега» | **Р73: оставить** | ничего. Первый обзвон идёт под чужим именем осознанно | +| голос уходит за границу | **Р75: идём как есть** | ничего. 🔴 Риск законный, остаётся; решение владельца, не твоё, спорить не надо | +| часы: одно правило или второй дом | **Р76: одно правило, живой СМС-модуль правим** | 🔴 З-3.1 разблокирована целиком, см. ниже | +| дорога назад для рекламы | **Р74: чинит другая смена** | живые списания обзвона **не начинать** раньше починки | +| цена звонка | **Р78: 2 ₽ + 10 ₽, уточним по замеру** | цена — **настройка**, не прошитое число | +| длинный опенер | **Р79: длину и текст решает клиент** | не переписываешь. 🔴 Но пока клиентского текста нет, звучит наш 41-секундный | +| робот без слов-запиналок | **Р80: слушаем на приёмке** | завести пунктом в приёмочный лист | +| с какого кода звоним | **Р81: уходим на новую АТС, Манго — испытание** | экраны не обещают «звоним с местных номеров» | +| расшифровки чужих записей | **Р82: текст живёт ШЕСТЬ месяцев, звук 30 дней** | 🔴 два разных срока, см. ниже | +| аренда пяти номеров | **Р83: у Манго не арендуем, ждём АТС** | строишь на семи испытательных | + +### 🔴 Три решения меняют САМ ПЛАН — читай их в задачах, не здесь + +1. **Р76 → З-3.1.** Правило часов остаётся **одно** на СМС и обзвон, значит + правим **боевой** `SmsQuietHours.php`. Круг на него — **отдельный**, не + одновременно с кругами обзвона, которые его читают. Своя приёмка, свои две + строки про соседей, свой выкат. 🪤 **Общий код — не общие числа:** окно + рассылок и окно обзвона остаются разными настройками, этого требует Т36. +2. **Р82 → З-2.3 и З-2.5.** У чужой записи **два срока**: звук 30 дней, текст + шесть месяцев. Значит команда чистки обязана стереть звук, **не тронув + текст**, а требование «сотрите меня» обязано достать до текста, когда звука + уже нет. 🪤 От какой даты считать полгода — не задано; до ответа считаем от + загрузки. +3. **Р81 + Р83 → З-3.3.** «До аренды» стало «**до новой АТС**». Пул придёт + другой и у другого оператора — распределение номеров обязано быть настройкой, + а не прошитым числом. + +### 🔴 Одна работа теперь не живёт нигде — знай об этом + +**Перевод машины робота на новую АТС.** Владелец решил не заводить её в план +обзвона — это не работа обзвона. Но работа настоящая: в телефонии машины +прописан адрес Манго и две регистрации. Если затеи про АТС нет на бумаге, +работа потеряется. **Не делай её и не бери в план — но если владелец спросит +«всё ли учтено», назови её вслух.** --- diff --git a/docs/superpowers/plans/2026-08-04-obzvon-pod-klienta.md b/docs/superpowers/plans/2026-08-04-obzvon-pod-klienta.md index fb1c3a1c..eecf65fc 100644 --- a/docs/superpowers/plans/2026-08-04-obzvon-pod-klienta.md +++ b/docs/superpowers/plans/2026-08-04-obzvon-pod-klienta.md @@ -16,7 +16,7 @@ **Дата:** 04.08.2026 **Ветка разработки:** отдельная, от `feat/prospects-manual-testing-kp` не зависит **Спека:** `docs/superpowers/specs/2026-08-04-obzvon-pod-klienta.md` (Т1–Т98) -**Решения владельца:** `docs/grilling/2026-08-03-metodika-lena-pod-klienta.md` (Р1–Р72 — Р71 и Р72 приняты по ходу проверки) +**Решения владельца:** `docs/grilling/2026-08-03-metodika-lena-pod-klienta.md` (Р1–Р83 — Р71 и Р72 приняты по ходу проверки, 🔴 **Р73–Р83 приняты 05.08.2026 и закрыли ВСЕ шесть вопросов владельцу**, см. раздел «Что нужно от владельца») **Замер готовности:** фичи в портале нет вовсе — ни одного требования. **Всего 47 задач в семи волнах.** Разделов «ещё не разобрано» в файле нет. @@ -1274,6 +1274,24 @@ Asterisk и читает свой файл. Общий файл остаётся непонятно было, кто им управляет. Правило: срок лежит в `system_settings`, читает его **одна** команда. +🔴🔴 **Сроков ДВА, а не один — решение владельца Р82 от 05.08.2026.** Раньше здесь +стояла моя страховка «расшифровка уходит вместе со звуком». Она **отменена**: + +| что | сколько живёт | +|---|---| +| **звук** чужой записи | **30 дней** (Т4, Т5) — как и было | +| **расшифровка** чужой записи | 🔴 **шесть месяцев** | + +Значит: два разных срока в `system_settings`, две даты истечения на одной записи, +и команда из З-2.2 обязана уметь стереть **звук, не тронув текст**. + +🪤 **Пять месяцев расшифровка живёт без звука** — проверить её по записи будет +нечем. Если робот выучил из разговора неправду, источник уже стёрт. + +🪤 **От какой даты считать полгода — не задано** (от загрузки файла к нам или от +даты самого разговора). Разница может быть в месяцы. До ответа считаем **от +загрузки**: это единственная дата, которую мы знаем точно. Отметить в надписи. + **Проверки:** 1. Загрузили ноль — пускает вторым путём. Загрузили три — берёт в работу. @@ -1391,10 +1409,17 @@ Asterisk и читает свой файл. Общий файл остаётся 4. Служба стирания чистит **и стоп-лист обзвона** — сегодня она не чистит ни один из четырёх существующих. -🔴 **Трансграничная передача — вне этой задачи и вне моей власти.** Голос человека -и расшифровка уходят **иностранному поставщику**, и в 96 требованиях об этом нет -ни слова. Это вопрос к юристу и владельцу, а не к плану. Задача обязана назвать -его вслух и **не делать вид, что он закрыт**. +5. 🔴 **Стирание достаёт и до расшифровок ЧУЖИХ записей** — тех, что клиент принёс + сам (З-2.3). Решение владельца Р82 дало им **шесть месяцев** жизни, звуку — + тридцать дней. Значит после 30-го дня остаётся текст с именами и суммами живых + людей, и требование «сотрите меня» обязано доставать до него **отдельно**: звук + к тому времени уже стёрт сроком, а текст ещё лежит до полугода. + +🔴 **Трансграничная передача — вне этой задачи.** Голос человека и расшифровка +уходят **иностранному поставщику**, и в 96 требованиях об этом нет ни слова. +**Решением Р75 владелец закрыл вопрос: идём как есть, юриста не спрашиваем.** +Задача этого не чинит и чинить не должна — но и делать вид, что риска нет, +нельзя: риск законный и он остаётся. Записано, чтобы следующий читатель знал. **Файлы:** `app/app/Services/Pd/PdErasureService.php` (🔴 **общий с боевым стиранием персональных данных** — правка точечная, отдельным заходом), @@ -1405,6 +1430,9 @@ Asterisk и читает свой файл. Общий файл остаётся 1. Человек потребовал стереть данные — **звука нет, расшифровки нет**, сухие итоги на месте, отчёт за квартал и счёт клиенту сходятся. + 🔴 Проверять **и на чужой записи, у которой звук уже стёрт сроком, а + расшифровка ещё жива** (Р82): требование обязано убрать текст, а не + отчитаться «стирать нечего». 2. След стирания есть и отвечает на вопрос «что именно убрали и когда». 3. След **переживает** трёхмесячную чистку — проверять на звонке годовой давности. 4. Флаг «не обрабатывать мои данные» стоит — звонка **не было**, и в журнале @@ -1457,13 +1485,29 @@ Asterisk и читает свой файл. Общий файл остаётся | **править живой СМС-модуль**, добавив туда понятие «часы клиента» | трогаем то, что уже работает у живых клиентов | правило остаётся **одно**, как и написано в его шапке | | **завести правилу второй дом** — своё окно у обзвона | у правила два хозяина, и однажды они разойдутся | боевого не трогаем | -🔴 **Моя рекомендация — первый путь**, и вот почему: беда, от которой охраняет -надпись «живёт здесь и больше нигде», — это звонок, который **по экрану ждёт утра, -а по факту уже идёт**. Второй дом ровно её и создаёт. Но правка живого модуля — -это правка боевого, и **решение владельца**, а не моё. +🔴 **Развилка ЗАКРЫТА владельцем 05.08.2026 — решение Р76: первый путь.** +Правило остаётся **одно**, живой СМС-модуль правим. Задача разблокирована +целиком, «базовой частью» больше не ограничиваемся. -**До ответа строим базовую часть** (общая рамка как есть, без клиентских часов) — -она бесспорна и не трогает боевое. +Почему так: беда, от которой охраняет надпись «живёт здесь и больше нигде», — +это звонок, который **по экрану ждёт утра, а по факту уже идёт**. Второй дом +ровно её и создаёт. + +🔴 **Общий код — не общие числа.** Р76 отдаёт в общее пользование **правило**, а +не значения часов. Окно рассылок и окно обзвона остаются разными настройками — +этого требует Т36 и проверка 8 ниже. Кто прочитает Р76 как «одни часы на двоих» +— сломает требование. + +🔴 **Это правка БОЕВОГО кода живой рассылки, и круг на неё особый:** + +- **своя приёмка и свой сторож, показанный красным**, — сверх проверок обзвона; +- **две строки про соседей обязательны**: что могло сломаться у живой рассылки + СМС и почему не сломалось. Не формальность — этим файлом прямо сейчас + пользуются клиенты; +- 🪤 **круг на `SmsQuietHours.php` нельзя вести одновременно с кругами обзвона**, + которые его читают: файл общий, это узкое горло; +- **выкат отдельно от обзвона**: правка живого модуля доезжает до боя своим + порядком и со словом владельца, а не «заодно». **Файлы:** `app/app/Services/Obzvon/ObzvonOknoChasov.php` (новый — тонкая обёртка, **не копия правила**), `app/app/Services/ClientSms/SmsQuietHours.php` (🔴 **боевой @@ -1579,8 +1623,13 @@ Asterisk и читает свой файл. Общий файл остаётся **Чего не строим до аренды:** поведение при блокировке номера пула и раздачу номеров между клиентами — оба решения зависят от того, сколько номеров и чьи они. +🔴🔴 **«До аренды» стало «до новой АТС» — решения Р81 и Р83 от 05.08.2026.** +Пяти номеров у Манго **не будет**: телефония переезжает на новую АТС, а нынешние +восемь номеров — испытательные. Значит настройка распределения номеров тем более +обязана быть настройкой: пул придёт **другой и у другого оператора**. + 🪤 **Сколько номеров есть сегодня — не мерил никто.** Ворота назвали восемь, замер -спеки дал один, на боевой не ходили. До аренды весь раздел обратных звонков +спеки дал один, на боевой не ходили. До новой АТС весь раздел обратных звонков описывает работу, которой физически негде происходить, а человек, перезвонивший по Т46, попадает **на нашу линию продаж**. @@ -2901,7 +2950,7 @@ Asterisk и читает свой файл. Общий файл остаётся | `app/app/Services/Obzvon/ObzvonStopList.php` | 2 | **З-3.2 → З-2.5** | пятый список «не звонить» | | 🔴 `app/resources/js/views/DealsView.vue` + `app/resources/js/components/deals/DealsTable.vue` | 1 | **только З-2.4** | экран сделок (491 строка) и **сама таблица строк** (400 строк) — **соседи правят их прямо сейчас**. Пометки касаний Т67 рисуются в `DealsTable.vue`, а не в `DealsView.vue`: путь уточнён редактором, третья редакция называла только «views/…/DealsView.vue» | | 🔴 `app/app/Services/Pd/PdErasureService.php` | 1 | **только З-2.5** | **боевое стирание персональных данных**. Правка точечная, отдельным заходом | -| 🔴 `app/app/Services/ClientSms/SmsQuietHours.php` | 1 | **только З-3.1, и только по слову владельца** | **боевой файл живого СМС-модуля.** Трогаем, лишь если владелец выбрал путь «одно правило часов на всех» | +| 🔴 `app/app/Services/ClientSms/SmsQuietHours.php` | 1 | **только З-3.1.** ✅ Слово владельца **дано** — решение Р76 | **боевой файл живого СМС-модуля.** Правим: правило остаётся одно на СМС и обзвон. 🔴 Круг на него — отдельный, не одновременно с кругами обзвона, которые его читают; своя приёмка, свои две строки про соседей, свой выкат | | `bots/lena-golos/README.md` | 4 | **вместе с задачей, что его ломает** | описывает порядок работы; после каждой задачи волны 0 становится враньём | ### Что это значит для расстановки исполнителей @@ -2934,6 +2983,40 @@ Asterisk и читает свой файл. Общий файл остаётся **четыре новых**, и все четыре — не «уточнить формулировку», а деньги, закон или правка боевого. 🔴 **Редактор добавил ещё два** — итого **шесть**. +--- + +## 🔴🔴 ВСЕ ШЕСТЬ ЗАКРЫТЫ ВЛАДЕЛЬЦЕМ 05.08.2026 + +Разбор хвостов перед стройкой. Ниже вопросы оставлены **как были** — намеренно, +чтобы позже не завести их заново, — но **ни один из них больше не ждёт ответа**. + +| вопрос | решение | что это значит для стройки | +|---|---|---| +| Новое-1. Этикетка «Омега» | **Р73: оставить как есть** | ничего не делаем; первый живой обзвон идёт под чужим именем осознанно | +| Новое-2. Голос за границу | **Р75: юриста не спрашиваем, идём как есть** | ничего не делаем. 🔴 Риск законный, он остаётся; решение владельца, не моё | +| Новое-3. Часы: одно правило или второй дом | **Р76: одно правило, живой СМС-модуль правим** | 🔴 **З-3.1 разблокирована ЦЕЛИКОМ.** Правка боевого файла — своя приёмка, свой выкат, отдельный круг | +| Новое-4. Дорога назад для рекламы | **Р74: чинит отдельная смена до первых живых денег** | к обзвону работы не добавляет; но живые списания обзвона **не начинать** раньше починки | +| Новое-5. С какого кода звоним | **Р81: телефония уезжает на новую АТС, Манго — испытание** | 🔴 экраны (З-3.3, З-4.1, З-6.2) не обещают «звоним с местных номеров» | +| Новое-6. Расшифровки чужих записей | **Р82: расшифровка живёт ШЕСТЬ месяцев**, звук 30 дней | 🔴 моя страховка «уходит вместе со звуком» **отменена**; правит З-2.3 и З-2.5 | + +🔴 **Сверх шести — три решения, которых в этом разделе не было:** + +- **Р77 отменено решением Р83:** пять номеров у Манго **не арендуем**, ждём новую + АТС. Арифметика Р71 (двенадцать попыток — двенадцать номеров) остаётся, меняется + только где и когда; +- **перевод машины робота на новую АТС в этот план НЕ входит** (Р83) — решение + владельца. 🔴 Работа настоящая, машина прописана на Манго намертво, и лежать + она должна в затее про АТС, иначе потеряется; +- **Р78: тариф 2 + 10 остаётся**, уточняется по замеру. Требование к стройке: + цена меняется **настройкой, а не перестройкой** — это уже заложено в З-1.1; +- **Р79: длину и содержание речи решает клиент.** Хвост «переписать опенер» + снят. 🔴 Но пока клиентского скрипта нет, звучит **наш** 41-секундный текст — + тот самый, на котором трубку положили на 24-й секунде; +- **Р80: робота без слов-запиналок слушаем на приёмке** — пункт обязан попасть в + приёмочный лист, иначе «послушаем потом» растворится. + +--- + ### 🔴 Новое-1. Менять ли этикетку «Омега» на экране у человека Номера оформлены на **ООО «Лизинговая Омега»**, и человек видит на экране это имя. @@ -3109,12 +3192,12 @@ awk '/^\| хвост \|/{f=1;next} f&&/^\|---/{next} f&&/^\| /{c++} f&&!/^\| /{p | обед менеджера и несколько менеджеров с разными графиками | З-3.1 | окно — две границы дня, перерыва нет | | админ сузил рамку — клиентское окно молча обрезалось | З-3.1 | строка в журнал, клиента не тревожим | | обратный звонок гасит клиенту всю рекламу | З-1.7, З-6.1 | письмо называет обе остановки | -| блокировка общего номера остановит **всех** клиентов | З-3.3 | не строим до аренды | +| блокировка общего номера остановит **всех** клиентов | З-3.3 | не строим **до новой АТС** (Р81, Р83 — аренды у Манго не будет) | | человек в списках двух клиентов | З-3.3, З-6.1 | с незнакомого номера — нейтральное представление | | менеджер узнаёт о записи случайно; в договоре про это ничего | З-0.4 | бумажная работа, не назначена | | что считается «тем же местом» при переписанном каркасе | З-4.4 | переписанный целиком = новое место | | сколько живёт непринятая пометка | З-4.4 | бессрочно | -| **двенадцать против десяти** | З-3.3, З-4.1, З-6.2 | 🔴 **нужно слово владельца** | +| ~~**двенадцать против десяти**~~ | З-3.3, З-4.1, З-6.2 | ✅ **закрыто Р71 + Р83:** нужно двенадцать, но **аренды у Манго не будет** — ждём новую АТС. Строим на семи испытательных | | кто включает рекламу обратно | З-1.7 | письмо говорит правду: вручную | | можно ли скачать свои записи обратно | З-2.3 | не строим | | срок хранения писем | З-3.5 | пишем след «кому и когда» | @@ -3127,8 +3210,8 @@ awk '/^\| хвост \|/{f=1;next} f&&/^\|---/{next} f&&/^\| /{c++} f&&!/^\| /{p | настоящий потолок оператора и сервера не измерен; общего предела на портал нет | З-0.1, З-3.3 | предел три на клиента, общего нет | | попадает ли человек в стоп-лист сам, сказав роботу | З-3.2 | строим оба пути, самопопадание помечено | | ~~подтверждение согласия в авто-режиме~~ | ~~З-5.1, З-5.2~~ | ✅ **закрыто решением Р72:** не спрашиваем, у наших лидов согласие уже есть. Хвостом больше не является | -| расшифровки **чужих** записей: живут или уходят со звуком | З-2.3, З-4.2 | 🔴 **поднято владельцу — «Новое-6».** Не мой выбор: у чужих записей мы не хозяева разговора. До ответа — уходят вместе со звуком на 30-й день | -| 🔴 **с какого кода мы звоним** (все восемь номеров красноярские) | З-3.3, З-4.1, З-6.2 | 🔴 **поднято владельцу — «Новое-5».** До ответа текст на экране говорит правду о сегодняшнем дне | +| ~~расшифровки **чужих** записей: живут или уходят со звуком~~ | З-2.3, З-2.5, З-4.2 | ✅ **закрыто решением Р82:** расшифровка живёт **шесть месяцев**, звук 30 дней. Моя страховка «уходят вместе со звуком» отменена. Осталось открытым: **от какой даты** считать полгода | +| ~~🔴 **с какого кода мы звоним** — все восемь номеров красноярские~~ | З-3.3, З-4.1, З-6.2 | ✅ **закрыто решением Р81:** телефония уезжает на **новую АТС**, Манго — только испытание. Экран по-прежнему говорит правду о сегодняшнем дне и **не обещает местных номеров** | | 🔴 **база знаний робота продаёт Лидерру, а не клиента** (три файла `kb-*`) | З-0.7, З-4.8 | кладём в репозиторий и называем вслух, ничего не вырезая | | 🔴 **порог «забираем правку в каркас» не назван**, и правила разбора нет | З-6.6 | считаем и показываем число; кто и когда забирает — работа людей | | входит ли хранение звука в цену звонка | З-2.1 | не решаем, мерим место |