diff --git a/ПИЛОТ.md b/ПИЛОТ.md index 504ba681..4e46e7be 100644 --- a/ПИЛОТ.md +++ b/ПИЛОТ.md @@ -19,10 +19,13 @@ ## 🆕 ОБНОВЛЕНИЕ 29.07.2026 (вечер) — статус проекта врал клиенту «Готовим к запуску» при живом заказе **Выкачены ДВА backend-файла** — `app/Models/Project.php` и `Api/ProjectController.php` -(коммит `f01f9fa2`, ветка `fix/project-sync-status-pivot` от боевого `gitea/main`; **в `main` -не влито**). Предполёт делал контроллер сам (не через `prod-deploy-validator`): портал 200, -файл на проде сверен как дореформенный, копии старых — `/tmp/Project.php.bak-20260729` и -`/tmp/ProjectController.php.bak-20260729`. +(коммит `f01f9fa2`, ветка `fix/project-sync-status-pivot` от боевого `gitea/main`). +**Влито в `main` = `27aa6342`.** Выкат делался ДВАЖДЫ: первый в 14:07 снесло полным +перезаливом параллельной сессии, повторный в 14:37 — см. подраздел «Точечный выкат снесло» +ниже. Предполёт делал контроллер сам (не через `prod-deploy-validator`): портал 200, файл на +проде сверен как дореформенный, копии старых — `/tmp/Project.php.bak-20260729` и +`/tmp/ProjectController.php.bak-20260729`. Третьим файлом на прод доложен новый тест +(прод несёт каталог `tests/`; без него прод не был бы равен `main` побайтово). - **Баг (найден при разборе статусов у тенанта 10).** Карточка проекта показывала жёлтое «Готовим к запуску» у проектов, чей заказ у поставщика реально стоял и по которым шли @@ -64,6 +67,62 @@ t2 заказал 45, получил 0; t9 заказал 5, получил 0). с прода — поймано **до** пуша, заменено на выдуманный, повторный скан чист. Разобраться с lefthook отдельно. +### 🔴🔴 Точечный выкат снесло полным перезаливом параллельной сессии — и это НЕ заметил бы никто + +**Хронология (UTC):** + +- **14:07** — выкатил два файла точечно, проверил: 9 из 9 проектов показывают правду. +- **~14:10–14:35** — параллельная сессия влила телеграм-модуль в `main` (`77f61fb1`, +39 + коммитов) и **перезалила прод целиком** по overlay-схеме. Мои два файла вернулись к + дореформенным (9081 / 11211 байт). **Все файлы приложения получили одно время + `14:04:15`** — overlay сохраняет время из архива, поэтому по датам перезалив выглядит + «раньше» моего выката, хотя произошёл позже. 🪤 По `stat` определить порядок событий + НЕЛЬЗЯ. +- **Проверено на живых данных: пятёрка снова врала** (АКЗ, три «Автоломбарда», «Сергей + Сергеевич»). Правка прожила на бою ~30 минут и исчезла молча — ни ошибки, ни записи в + журнале. Нашлось только потому, что заказчик попросил сверить прод с git **побайтово**. +- **14:37** — переставил заново. 🔑 На этот раз содержимое бралось **прямо из git** + (`git cat-file blob ` → stdin-стрим), отпечатки сверены на проде ДО установки; + права выставлены как у соседей после overlay — `root:root 664` (в первый выкат я поставил + `www-data 644`, разошлось с деревом). + +**🔑 Класс проблемы:** пока идут параллельные сессии, **любой полный перезалив молча +откатывает всё, что выкатили точечно и ещё не влили в `main`**. Единственная защита — +влить в `main` до/сразу после точечного выката. Сделано: `main` = `27aa6342` (слияние +без конфликтов; их `77f61fb1` — предок, коммитов было 3766, стало 3769, ничего не потеряно; +разница «их main → нынешний main» = ровно 4 файла, все мои). + +**Сверка прод ↔ git побайтово** (отпечаток git-blob по каждому файлу, скрипт +`/tmp/cmp.sh` на проде + манифест из `git ls-tree -r main -- app`): + +- **2401 из 2401 совпадает байт в байт**, расхождений 0, недостающих 0. +- **Лишнее на проде, чего нет в git** (боевого кода среди этого нет): `public/build.prev/` + — 21 файл, копия предыдущей сборки фронта; два ручных бэкапа + `welcome.blade.php.bak-metrika-20260708` и `routes/console.php.bak-sov-20260710-022806`; + **7 тестовых файлов, которых в `main` нет вообще** (`AdAudienceChannelsModelTest.php`, + `JivoWidget.spec.ts`, `SalesAdAudienceView.spec.ts`, `WarmingChannelIcons.spec.ts`, + `menuRepositionFix.spec.ts`, `AdMarkupTest.php`, `XfetchBalanceProviderTest.php`) — хвосты + прошлых выкатов: overlay кладёт файлы поверх, лишние не удаляет. 🪤 Дрейф копится молча. + +**Состояние на 17:55 МСК:** статусы верны у всех 9 работающих проектов (0 врущих), мои +файлы нетронуты (время `14:37:12`, отпечатки = git), нового перезалива после 14:37 не было, +выкатов в процессе нет, `lk.liderra.ru` и `liderra.ru` — 200, `/api/projects` — 401, +php-fpm / nginx / очередь активны, ошибок в журнале после выката — ноль. + +### Телеграм-модуль оказался на бою (делала параллельная сессия, не эта) + +По прежним записям сначала планировались показы Яндекса, телеграм следом — фактически +модуль уехал на прод 29.07 вместе с перезаливом. Развёрнут **целиком**: код на месте +(входит в те же 2401 совпавших файла), в боевой базе 6 таблиц `client_tg_*` +(`client_tg_auto_rule`, `client_tg_campaign_phones`, `client_tg_campaigns`, +`client_tg_contacts`, `client_tg_optouts`, `client_tg_tariffs`), 14 миграций записаны +**партией 48**, непринятых миграций нет. + +🪤 **Первая попытка миграций провалилась** — `14:11:42`, +`SQLSTATE[42501] permission denied for schema public` на `create table client_tg_campaigns` +(запуск не под `crm_migrator`). Переделали правильно, всё доехало; это **единственная** +ошибка в журнале за 29.07. + --- ## 🆕 ОБНОВЛЕНИЕ 29.07.2026 — «Реклама за показы» + окно передачи отказов модерации ВЫКАЧЕНЫ