docs телеграм: оба хвоста плана закрыты — закрытие по слову и кнопка «Остановить»

План утверждал, что закрытия по слову кабинета и кнопки нет, потому что слова мы не знали.
Слово узнали живьём в тот же вечер («Завершена»), и обе задачи закрыты.

В документ дописано, что теперь есть, три обезвреженные мины и три мёртвых сторожа,
вскрытых строгой проверкой: ключ от двойного возврата (со сломанным ключом ВСЕ денежные
тесты оставались зелёными), развилка отчёта об остановке, и порядок «сначала цифры, потом
закрытие» (при перестановке клиенту уходило 253,96 ₽ вместо 240,58 ₽).

Сторожа: модуль телеграма 459, робот 263, экраны 63, статанализ 0.

🔴 На боевой не выкачено: нужны миграция, весь фронт и подмена рабочей копии робота —
всё ждёт отдельного разрешения владельца.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-08-08 23:59:17 +03:00
parent 6816031be0
commit f29d14f25b
@@ -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** зелёных. Оба «молчаливых» сторожа (тревога по заморозке, незнакомое слово) проверены