diff --git a/ПИЛОТ.md b/ПИЛОТ.md index 12d55174..9f019c8a 100644 --- a/ПИЛОТ.md +++ b/ПИЛОТ.md @@ -16,6 +16,67 @@ --- +## 🆕 ОБНОВЛЕНИЕ 03.08.2026 (вечер) — кошелёк телеграм-рекламы и сторож виртуалки + +**Выкачено три вещи.** Разрешение владельца получено на каждый шаг отдельно. + +### 1. Кошелёк и заморозка телеграм-рекламы + +Порядок соблюдён: **сперва робот, потом портал** — иначе заморозка повисла бы навсегда. + +- **Робот** (машина владельца, `C:\liderra\mts-telegram-robot`): заменены `src/cabinet.js` + и `src/runner.js`, потолок траты снижен **5 000 → 1 000 ₽** по решению владельца на первый + боевой прогон. Опрос идёт: `GET /api/tg-robot/next` → 200 раз в минуту. Робот работает + **задачей Планировщика**, а не висящим процессом. Откат — `C:\liderra\_bak-koshelek-20260803`. +- **Портал**: миграция `mts_cost_rub` (под `crm_migrator`, роль проверена командой), затем + **29 файлов** и пересобранные экраны. Откат — `_deploy-bak-tgkoshelek-20260803.tgz`. + +🔴 **Промт называл 12 файлов, а разошлись 29** — не хватало трёх исходников экранов, +тринадцати тестов и `Pest.php`. Разницу считать **командой**, а не по списку из промта. + +**Замеры боевой базы ДО выката:** кампаний телеграма **0**, списаний `tg_ad` **0** — никто не +пострадал от прежней дыры, возвращать нечего. Рекламный кошелёк на бою **один** (tenant 2). + +### 2. Сторож рендер-виртуалки читает `ok` + +Виртуалка `51.250.1.97` — теперь **единственная точка отказа «Поиска клиентов»** (чужой xf4.ru +умер и снят). Сторож у неё был болен тем же: «ответ меньше 500 = жив», поле `ok` не читалось, +а прежний тест «зелёный при 404» этот изъян охранял. + +Теперь зелёный — только при `ok: true`; 200 без признака `ok` — красный; пустой адрес проверки +больше не подменяется ручкой рендера (она POST-only и на GET даёт 404). **Приёмка вырезанием +на самом бою:** на ручку рендера → красный, без адреса → серый, на живой ручке → зелёный +«занято 0 из 8, прокси 1». Откат — `_bak-storozh-vm-20260803.php`. + +🪤 Зелёный означает, что виртуалка **рассказала о себе**, а не что она отрисует страницу. + +### 3. Сверка после всего + +**Бой и рабочая ветка совпадают байт в байт: 2629 файлов, ноль расхождений.** + +🔴 **Пока шёл выкат, соседняя смена дважды тронула то же самое:** дописала две записи прямо в +рабочую ветку и в 07:11 UTC пересобрала и выложила экраны — через двадцать минут после меня. +Ничего не потеряно (проверено по существу: обслуживаемая сборка телеграма содержит карточку +денег, экраны СМС на месте), но повезло: собери они из дерева без моей работы, портал так же +отвечал бы 200, а экраны молча пропали бы. + +🪤 **На бою копятся по ДВЕ сборки каждого экрана** — распаковка старые не удаляет, решает +только `manifest.json`. Пока безвредно, но мусор растёт с каждым выкатом. + +### 🔴 Открытый хвост: боевой «Поиск клиентов» отстаёт от ветки + +Замер 03.08 вечером: из 35 рабочих файлов `/opt/sales-finder` **9 расходятся** с веткой +(`web/app.py`, `web/bulk.py`, `web/ui.py`, `salesfinder/rubrics.py`, `cities.py`, `models.py`, +`portal.py`, `bulkops.py`, `tools/crawl_rubricator.py`). Боевой — это **старая основа плюс +точечная заплатка рендера от 03.08**; такого дерева нет ни в одной ветке. Тесты туда не +кладут — их отсутствие не расхождение. + +Прежняя запись «Finder совпадает с `main`» (снимок 15.07) **устарела** — не опираться. +Догонять боевой поиск до ветки — отдельная работа и решение владельца: там лежит невыкаченный +«прогрев» от 22.07, и слепая перезапись может сломать поиск. + +--- + ## 🆕 ОБНОВЛЕНИЕ 03.08.2026 (день) — модуль СМС научился определять оператора и час номера **Что выкачено.** Две правки: `d4ccb5ac` — оператор и часовой пояс берутся из бесплатного