From f29d14f25b5a64c06067e1b8ecf58104f085d9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 8 Aug 2026 23:59:17 +0300 Subject: [PATCH] =?UTF-8?q?docs=20=D1=82=D0=B5=D0=BB=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC:=20=D0=BE=D0=B1=D0=B0=20=D1=85=D0=B2=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D1=82=D1=8B=20=E2=80=94=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=D1=83=20=D0=B8=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B0=20=C2=AB=D0=9E=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit План утверждал, что закрытия по слову кабинета и кнопки нет, потому что слова мы не знали. Слово узнали живьём в тот же вечер («Завершена»), и обе задачи закрыты. В документ дописано, что теперь есть, три обезвреженные мины и три мёртвых сторожа, вскрытых строгой проверкой: ключ от двойного возврата (со сломанным ключом ВСЕ денежные тесты оставались зелёными), развилка отчёта об остановке, и порядок «сначала цифры, потом закрытие» (при перестановке клиенту уходило 253,96 ₽ вместо 240,58 ₽). Сторожа: модуль телеграма 459, робот 263, экраны 63, статанализ 0. 🔴 На боевой не выкачено: нужны миграция, весь фронт и подмена рабочей копии робота — всё ждёт отдельного разрешения владельца. Co-Authored-By: Claude Opus 5 (1M context) --- ...-08-08-telegram-konec-reklamy-i-vozvrat.md | 84 ++++++++++++++++--- 1 file changed, 74 insertions(+), 10 deletions(-) diff --git a/docs/superpowers/plans/2026-08-08-telegram-konec-reklamy-i-vozvrat.md b/docs/superpowers/plans/2026-08-08-telegram-konec-reklamy-i-vozvrat.md index cf8b05f9..84c45379 100644 --- a/docs/superpowers/plans/2026-08-08-telegram-konec-reklamy-i-vozvrat.md +++ b/docs/superpowers/plans/2026-08-08-telegram-konec-reklamy-i-vozvrat.md @@ -125,9 +125,32 @@ completed → [] терминальный **Реклама правда встала.** Робот перечитал кабинет трижды после нажатия (14:00, 15:01, 16:01 МСК): показы застыли на **22**, расход площадки — **10,56 ₽**, ни единицы движения. -🔴 **Слово для законченной кампании так и не узнали — и потеряли его три раза.** Разборщик -робота его не узнал и прислал пустоту (`status: null`); до нажатия там было `approved`. -Ш2 на боевом не стоит, поэтому в журнал не попало ничего. +🔴 **Слово потеряли три раза подряд.** Разборщик робота его не узнал и прислал пустоту +(`status: null`); до нажатия там было `approved`. Ш2 на боевом не стоит, поэтому в журнал +не попало ничего. + +### ✅ Замер добит вечером 08.08 — оба ответа есть + +Владелец вошёл в кабинет руками, замер прошёл (только чтение): + +| Что | Ответ | +|---|---| +| Слово кабинета для законченной кампании | **«Завершена»** | +| Слово, пока идёт остановка | **«Останавливается»** + «Это займёт до 30 минут» | +| Баланс кабинета до / после | 4 812,51 ₽ → **4 984,35 ₽** | +| Вернулось | **+171,84 ₽ — ровно `182,40 − 10,56`** | +| Кнопки у завершённой строки | только «Посмотреть настройки» — запустить заново нельзя | + +🔑 **Кабинет отдаёт неоткрученный остаток ЦЕЛИКОМ, сам, без просьбы.** Предсказание сошлось +до копейки. Значит правило Б («встала») — про наш возврат клиенту, а не про деньги кабинета: +их площадка уже вернула. + +🔑 **`parseModerationStatus` не знает НИ ОДНОГО из двух слов** — он знает «отклонен», +«одобрен/активн/запущен», «модераци/запланирован», «черновик». Теперь есть чем его научить, +и закрытие по слову кабинета делать уже из чего. + +🔴 **Клиенту переплата пока НЕ возвращена:** кампания №15 на боевом всё ещё `launched`, +задача закрытия не выкачена. Клиенту причитается `255,36 − 10,56 × 1,4` = **240,58 ₽**. 🔴 **Ш2 в нынешнем виде слово НЕ спасёт.** `TelegramStatsApplier` запишет «слово незнакомое — посмотреть глазами», но самого слова в записи не будет: `readCampaignStats` в @@ -145,16 +168,57 @@ completed → [] терминальный `bots/mts-telegram-ads/_stop-nazhat.mjs` (нажатие), `_stop-zamer-do.mjs` / `_stop-zamer-itog.mjs` (замеры, только чтение), снимки `_stop-do.png` / `_stop-posle.png`. -**Первое, что сделать следующей смене:** попросить владельца войти руками -(`cd /c/liderra/mts-telegram-robot && node bin/login.js`), прогнать `_stop-zamer-itog.mjs` и -получить ОБА ответа разом — вернулись ли 171,84 ₽ и каким словом кабинет зовёт законченную -рекламу. Пока ответов нет, закрытие по слову кабинета делать не из чего. +✅ **Оба ответа получены в тот же вечер** (владелец вошёл руками, замер прошёл только чтением): +остаток вернулся целиком, слово кабинета — «Завершена». Дальше по ним сделаны и закрытие по +слову, и кнопка «Остановить» — см. раздел «Что было дальше» в конце. ## Итог -Сделано: Ш1–Ш5 целиком. Кнопка «Остановить» — НЕ сделана (портальной кнопки нет; про -кабинетную теперь знаем, что она говорит «Останавливается» и занимает до 30 минут), -закрытие по слову кабинета — НЕ сделано (слова по-прежнему не знаем). +Сделано: Ш1–Ш5 целиком. На момент написания кнопка «Остановить» и закрытие по слову кабинета +сделаны НЕ были — слова мы тогда ещё не знали. Обе задачи закрыты позже в тот же день, см. +ниже. + +## Что было дальше — оба хвоста закрыты 08.08.2026 + +Слово кабинета узнали живьём («Завершена»), и по нему сделана отдельная работа: замысел +[2026-08-08-telegram-knopka-ostanovit-design.md](../specs/2026-08-08-telegram-knopka-ostanovit-design.md), +план [2026-08-08-telegram-knopka-ostanovit.md](2026-08-08-telegram-knopka-ostanovit.md). + +**Что теперь есть:** + +- робот знает слова «Завершена» и «Останавливается» и передаёт наверх сырой текст строки — + следующее незнакомое слово больше не потеряется; +- портал закрывает кампанию и возвращает переплату **по слову кабинета**, а не через трое + суток по правилу «встала». Правила А и Б остались подстраховкой; +- у клиента появилась кнопка **«Остановить рекламу»** с честным окном: назад пути нет, + остановка до 30 минут, деньги вернутся когда площадка закончит; +- робот умеет нажимать «Завершить» — в строке ИМЕННО своей кампании — и доказывает результат + сменой слова, а не отчитывается успехом вслепую. + +**Три мины, найденные при разведке кода и обезвреженные:** + +1. читалка собирает текст строки вместе с подписями кнопок, а у идущей рекламы там стоит + кнопка «Завершить» — совпадение по корню закрывало бы работающую рекламу и возвращало + деньги за то, что крутится прямо сейчас; +2. очередь заданий считала одинаковыми любые два задания по одной кампании — просьба + остановить, поданная в час опроса цифр, молча терялась бы; +3. поиск кнопки по всей странице (как в разведке) у двух клиентов сразу завершил бы чужую + рекламу. + +**Три мёртвых сторожа, вскрытых строгой проверкой** (код был верен, охраны не было): + +- ключ, не дающий вернуть деньги дважды: со сломанным ключом **все** денежные тесты + оставались зелёными; +- развилка «отчёт об остановке → свой применитель»: отчёт мог уехать в применитель запуска; +- порядок «сначала цифры, потом закрытие»: при перестановке клиенту уходило 253,96 ₽ вместо + 240,58 ₽. + +Сторожа после работы: модуль телеграма **459**, робот **263**, экраны телеграма **63**, +статанализ **0**. + +🔴 **На боевой НЕ выкачено.** Выкат несёт миграцию (одна колонка) и весь фронт; рабочая копия +робота на машине кода остановки ещё не знает — её подмена это тоже изменение боевого. Всё +ждёт отдельного разрешения владельца. Сторожа: ClientTg **438** зелёных (было 412), Larastan **0**, Pint чисто, экраны Телеграма **58** зелёных. Оба «молчаливых» сторожа (тревога по заморозке, незнакомое слово) проверены