Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a51d34cc5 |
@@ -27,6 +27,10 @@
|
||||
> **(4) Кнопка «Отказаться» на актуализации** (`43012c98`+`f888c4ba`): мягкое отклонение находки нового сайта/адреса — фирма поля остаётся, находка в архив, её ключи запоминаются у фирмы поля (**новая колонка `dismissed_actualize_keys`**, миграция `2026_07_07_130000` ролью `crm_migrator` — прошла на проде), `ProposalClassifier` их вычитает → та же находка больше не всплывает. Кнопка названа «Отказаться» (не «Удалить» — чтобы клиент не путал с удалением конкурента).
|
||||
> **🔴 Деньги tenant 2:** мои тестовые прогоны + баг пустых списаний = ~260₽ его баланса; владелец сказал НЕ возвращать. Баланс 499 680₽, «+499 700 ручная корректировка» — админ (id=1), НЕ Claude. **Follow-up:** живая приёмка кнопки «Отказаться» под клиентом (нужна карточка актуализации); ротация пароля crm_migrator не требовалась. Память: `project-autopodbor-post-hotfix-fixes-2026-07-07`.
|
||||
|
||||
> 🏷️🔴→🟢 **АКТУАЛЬНО (12.07.2026) — КАБИНЕТ ПОСТАВЩИКА СТИРАЛ МЕТКУ КАНАЛА `B<n>_`, ПОЧИНЕНО И ВЫКАЧЕНО.** Повод — письмо робота итоговой проверки «нашёл расхождение» (11.07 и 12.07, kind=`missing`). **Тревога была ложной** — строки в кабинете были, включены, лимит верный. **🔑 Корень (главное знание про кабинет crm.lead.store):** кабинет дописывает метку канала к имени строки **ТОЛЬКО при СОЗДАНИИ** (`id=0`); при **обновлении** сохраняет имя ровно как прислали. Наш ночной `updateProject` слал голый ключ → каждый прогон 18:05 стирал метку. Два следствия: (1) `VerifySupplierOrderJob` выводил площадку из **префикса имени** → строка без префикса выпадала из `live` → ложное «нет заказа» (`live_rows` 60→57); (2) 🔴 **лид от такой строки приходил с `project` без метки** → webhook не мог определить канал → `supplier_leads.platform=DIRECT` вместо B1/B2/B3 (**сделки создавались и списывались верно, терялась только атрибуция канала**). На момент разбора **81 из 138** наших строк в кабинете были с потерянной меткой. **Фикс (gitea main `8c1d1710`, 3 файла оверлеем, миграций нет):** `SupplierPortalClient::toPayload` — на update имя уходит **с меткой** (на create остаётся голым — метку ставит кабинет, а один save с 3 флагами рождает 3 строки); `VerifySupplierOrderJob::normalizeLive` — площадка берётся из служебного поля **`src`** (`rt`→B1, `bl`→B2, `mt`→B3), а НЕ из имени; новая команда **`supplier:repair-project-names`** (`--apply`, `--only-active`; по умолчанию сухой прогон; payload собирается **из живой строки кабинета** — меняется только `name`, регионы оттуда уже в кодах поставщика и повторно НЕ переводятся). **Выкат:** предполёт 8/8 GREEN, `queue:restart` + reload php-fpm (**`config:cache` НЕ трогали**, квирк 107). **Результат на бою:** починена **81 строка, 0 ошибок**; робот прогнан вживую → **138 наших строк вместо 57, расхождений 0**; двум лидам (368, 372) восстановлен канал (B3 / B1) — вытащен из журнала выдач поставщика по `vid` уже ПОСЛЕ починки имён (в самом webhook-payload канала нет). Успели до снимка поставщика 21:00 МСК. **Откат:** `/var/www/liderra/_bak-namefix-20260712-160742`. 🟢 Закрыт follow-up 10.07 — фича итоговой проверки **сведена в `main`**. Память: `project-supplier-channel-label-strip-fix-2026-07-12`.
|
||||
|
||||
> 🧹🟢 **АКТУАЛЬНО (12.07.2026) — ХВОСТЫ ПРОГОНА + СВЕРКА «main == БОЕВОЙ».** (1) **`partitions:create-months` не нарезал ПРОШЛЫЙ месяц** — делал только «текущий + вперёд», поэтому на свежей базе партиции за прошлый месяц не было никогда, и INSERT падал `no partition found` **в первой половине КАЖДОГО месяца** (окно списаний 30 дней, стык месяцев). Добавлен флаг **`--behind`, по умолчанию 1**; выкачен на прод — **поведение боевого НЕ изменилось** (`0 created, 40 skipped`), партиции там нарезаны до **2027-01**, крон 21:00 UTC жив. (2) Возвращены **три аудит-теста ADR-021**, потерянных при сведении main 09.07 (код уехал, тесты — нет; **тот же класс потери, что `CsvReconcileJobTest`** — проверять после каждого сведения веток). (3) Полный прогон **2407 → 2417 из 2418**; единственное падение `ExampleTest` — только там, где не собран фронт (`Vite manifest not found`), к коду отношения не имеет. (4) **Larastan: 30 замечаний, ни одного живого бага** (уровень типов); 🔑 локальный счётчик зависит от способа генерации заглушки — правильный `ide-helper:models --write-mixin -n`, неправильный `-N` даёт сотни ложных. **✅ СВЕРКА ПРОВЕДЕНА:** боевой ↔ `gitea/main` по хэшам каждого файла бэкенда — **569/569 совпали побайтово, различий 0**; лишние на бою 5 файлов = служебные кэши `bootstrap/cache/*` (в гите их и не должно быть). `gitea/main` = **`7feab849`**. Память: `project-main-tails-cleanup-2026-07-12`.
|
||||
|
||||
**Снимок снят:** 29.06.2026 (~11:00 UTC) — **💳🟢 ВЫКАЧЕНА фича «ОПЛАТА ПО СЧЁТУ» (Этап 1) на боевой liderra.ru.** По командам владельца «ок коммить и пуш, обнови память и деплой только со скилом». **Что выкачено (gitea main `cdfae077`, деплой `bin/deploy-source-edit.sh`):** клиент в кабинете Биллинг → отдельная вкладка **«Счета»** + в «Пополнить» способ «По счёту (для юрлиц)» → формирует **PDF-счёт** по своим реквизитам; админ **`/admin/invoices`** (новый пункт меню «Счета») отмечает оплату одной кнопкой → атомарно зачисляет баланс + формирует **Акт** (без НДС, УСН) + шлёт клиенту письмо «Счёт оплачен» **с вложением PDF-акта**; PDF открываются inline. Просрочка `invoices:expire` (cron 03:40 МСК). Наименование услуги — «**Оплата генерации рекламных лидов**». Зависимость **dompdf** установлена на проде, **«Nothing to migrate»** (схему БД не меняли — таблицы saas_invoices/items/upd уже были). **Реквизиты ИП заполнены в боевом `legal_entities` id=1** (`ip_kondratev`, is_default): банк **Филиал «Центральный» ВТБ (ПАО) Красноярск**, р/с **40802810690810008032**, корр 30101810145250000411, БИК 044525411, ОКПО 2052921109, адрес Красноярск ул.Новосибирская 5-97 (было bank=null). **Предполёт 8/8 GREEN** (prod-deploy-validator), финиш через superpowers:finishing-a-development-branch. **Проверка:** приложение live, HTTPS /login 200, новых ошибок в логе нет, **деньги целы t2 = 1 839 210 ₽ / 1019 сделок**, счетов на проде 0 (чисто, клиенты ещё не выставляли). **ЮKassa для оплаты по счёту НЕ годится** (её B2B только через Сбербанк, обе стороны в Сбере; наш ИП в ВТБ) — деньги по счёту всегда идут прямой платёжкой на р/с ВТБ. **Этап 2** (автозачисление через ВТБ API «Интеграционный Банк-Клиент», только poll, без вебхуков) — отдельно, после вопросов менеджеру ВТБ. Спека/план — `docs/superpowers/specs|plans/2026-06-29-oplata-po-schetu-*`. Память: `project-oplata-po-schetu-etap1`, `reference-ip-requisites-kondratev`.
|
||||
|
||||
**Снимок снят:** 28.06.2026 (~13:30 UTC) — **🔍🟢 СКВОЗНАЯ СВЕРКА БАЙТ-В-БАЙТ прод↔git↔бэкап + экран «Тенанты» на 1000 + фронт-стенд в зелёный. Прод приведён к git 1:1.** По командам владельца «сверь прод/локалку/бэкап байт-в-байт» и «да» (выкатить). **Сверка (метод: на Linux `rsync -rclni` checksum, LF без CRLF-шума, свежий клон gitea-main ↔ `/var/www/liderra/app` ↔ распакованный `/tmp/app-backup-0907.tgz`):** исходники прода = **gitea-main `84dfbc85` один-в-один** (контент-расхождений 0 после выката тест-правок); бэкап цел, разница прод↔бэкап = ровно выкат «Тенанты»; **потерянных/изменённых правок НЕТ.** На проде сверх git только не-git артефакты: `*.bak-precutover` ×2 (страховка отката Managed PG — **держать до ~03.07**), `bootstrap/cache/*` ×5 (кэш Laravel, генерится), `tests/Frontend/menuRepositionFix.spec.ts` (старый удалённый тест, висит — деплой без `--delete`; мусор, в рантайме не участвует). **Выкачено в этот заход:** (1) экран «Тенанты» на серверную пагинацию/поиск/фильтры (статус производный CASE + тариф) — демо показано владельцу локально, прод `c92d498b`; (2) фронт-тест-стенд приведён в зелёный — 22 протухших теста в 10 спеках обновлены под актуальные компоненты (только тесты, компоненты не тронуты), `84dfbc85`, выкачены чтобы прод==git. **Полный прогон фронта: 127 файлов / 992 теста зелёные.** **Деньги целы: t2 = 1 839 405 ₽ / 990 сделок** (деплои код-только, БД не тронута). Сайт 200. Рецепт сверки на будущее: rsync-checksum на проде / `git hash-object`, НЕ raw-sha с Windows (CRLF врёт). Кодовая фраза стены — «роутер-наставник».
|
||||
|
||||
Reference in New Issue
Block a user