Commit Graph

10 Commits

Author SHA1 Message Date
Дмитрий 37a1062dab chore(deploy): маркер защиты выката «Где греем» → «warming/yandex»
Экран «Реклама на кандидатов» заменён тремя страницами прогрева
(SalesWarmingView, /sales/warming/{platform}). Старый маркер «Где греем»
в новой сборке отсутствует намеренно — обновляю guard deploy-build.sh,
иначе защита откажет в выкате фронта. Новый маркер warming/yandex
попадает в бандл через пункт меню /sales/warming/yandex.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 12:21:40 +03:00
Дмитрий 372d102f35 chore(deploy): «Где греем» в защитные маркеры выката фронта
Скрипт deploy-build.sh не даёт затереть живые фичи: если строка есть в
боевой сборке, а в новой её нет — выкат отклоняется. Добавил маркер
фичи выбора площадки прогрева, чтобы её тоже нельзя было снести
случайным выкатом из отставшей ветки.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 06:30:22 +03:00
Дмитрий 42e907c882 Merge gitea/main into feat/sales-finder — сведение с боевым перед выкатом
Ветка разошлась с боевым 28.06 (334 коммита в main / 215 у нас). Влито ВСЁ боевое:
автоподбор конкурентов, мобильный адаптив портала, свой учёт посетителей, мониторинг
внешних сервисов, фиксы поставщика/биллинга/бота/разборов.

ПОБАЙТОВАЯ СВЕРКА: из 1008 файлов, изменённых боевым, 989 совпадают точно;
19 отличаются — все с нашей законной работой (обе стороны внутри). Затёртых — 0.

24 конфликта разобраны вручную. Ключевое:
- VerifySupplierOrderJob — взята БОЕВАЯ версия (фикс инцидента 11-12.07: площадка
  берётся из src, а не из имени; наша была старой и вернула бы баг, терявший заявки).
- SyncSupplierProjectsJobTest — 15 боевых тестов + наш уникальный (limit-1 → только B1).
- routes/web, router/index, config/services, bootstrap/app — обе стороны сложены.
- NewProjectDialog — зелёные дни недели (наше) + мобильная раскладка (боевое).
- CHANGELOG схемы — номера версий столкнулись, наши перенумерованы в v8.67-v8.70.
- composer — обе зависимости (laravel-dompdf наш + geoip2 боевой).

Гейты: бэкенд 2907/2911 (0 падений), Larastan 0, фронт 1333/1333, сборка OK.
Baseline статанализа принял пре-существующий долг боевого кода (автоподбор/чат).
@mixin в 26 моделях — требование статанализа, dev-докблок, на рантайм не влияет.

Откат: git reset --hard pre-merge-main-20260714

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 17:49:28 +03:00
Дмитрий fda00ae1a1 docs(deploy): README — миграции на живой Managed-кластер (не мёртвая VM-копия), портал lk, выкат из main
Вторая живая деплой-инструкция с той же миной (после 06-18 runbook): §миграций
велела sudo -u postgres на VM = мёртвая копия. Исправлено на crm_migrator/Managed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 16:17:15 +03:00
Дмитрий 8052be899f chore(deploy): защищённый выкат сборки портала — не даёт затереть чужие фичи
Портал выкатывается полной заменой public/build; сборка из устаревшей ветки
молча сносила чужую работу (инцидент 08.07: Метрика снесла колонки «Сделок»).
deploy-build.sh перед подменой сверяет маркеры критичных фич (по активным
чанкам manifest.json, не по orphan-осколкам) — теряет живую фичу → ОТКАЗ.
Осознанный откат — FORCE=1, только проверка — DRY_RUN=1. Установлен на боевом.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 19:19:17 +03:00
Дмитрий f0d5630382 fix(ops): redeploy.sh — rm старых кэшей перед optimize → config.php владелец www-data
Прежний reorder (optimize последним) владельца НЕ менял: optimize перезаписывает
существующий config.php in-place (file_put_contents не трогает владельца) → оставался
ubuntu:www-data 775 (читаемо, портал работал, но комментарий врал про www-data).
Теперь rm config/routes/events перед optimize → www-data создаёт свежие как
www-data:www-data 664. Синкнут на прод (sha совпал). Главное по квирку 107 —
читаемость (валидатор П1 test -r), владелец вторичен.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 09:54:54 +03:00
Дмитрий f89df8310a fix(ops): закрыть повтор квирка 107 — optimize последним в redeploy + валидатор проверяет читаемость
Проверено на боевом 25.06: config.php = ubuntu:www-data mode 775, www-data ЧИТАЕТ его
через группу, портал HTTP 200 — реального дефекта НЕТ. Квирк «лечили» несколько раз,
гонясь за строгой проверкой «владелец == www-data», тогда как важна читаемость.

Две первопричины повтора закрыты:
1. deploy/redeploy.sh: optimize перенесён в КОНЕЦ (после chown -R ubuntu:www-data
   bootstrap/cache). Раньше optimize шёл ДО chown'а → chown переписывал владельца
   свежего config.php обратно на ubuntu. Теперь кэши пишутся после chown и остаются
   www-data:www-data.
2. .claude/agents/prod-deploy-validator.md П1: критерий сменён на ЧИТАЕМОСТЬ www-data
   (sudo -u www-data test -r config.php) вместо строгого владельца. Владелец ubuntu при
   группе www-data+775 больше НЕ даёт ложный NO-GO. Свежесть (mtime ≥ .env, квирк 104)
   сохранена. Описание квирка 107 и формат рапорта обновлены.

Прод не трогали — он здоров. После следующего redeploy config.php станет www-data-owned.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 09:07:24 +03:00
Дмитрий 972000b03d fix: синхронизация deploy/redeploy.sh с прод-фиксом sudo chmod + .gitattributes LF для .sh 2026-06-24 16:54:45 +03:00
Дмитрий 29781fb913 deploy: выкат стека на прод 23.06 + фикс redeploy.sh composer-прав + снимок ПИЛОТ
Выкачен недеплоенный стек becff632 балансовый блок плюс F/J плюс source-edit-lock
плюс ЮKassa спит флаг off. Миграция add_balance_transaction_id применена вручную
под postgres таблица crm_migrator-owned. Деньги клиента целы tenant 2
1836400 руб 1013 сделок эталон до==после. Квирк-107 ок очередь active HTTP 200.

Фикс redeploy.sh композер install от root COMPOSER_ALLOW_SUPERUSER плюс chown
vendor www-data баг положил прод в 500 на окно наката. README дополнен граблями
composer-прав opcache-рестарт и crm_migrator-миграций. Снимок ПИЛОТ обновлён.
cspell-words пополнен проектным жаргоном.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 19:50:40 +03:00
Дмитрий d87455b3b9 chore(deploy): sync redeploy.sh from prod into repo
Канон рецепта server-side деплоя, который раньше жил только в /var/www/liderra/redeploy.sh.

- deploy/redeploy.sh — копия 1:1 текущей версии с боевого (квирк 107 фикс встроен:
  sudo -u www-data php artisan optimize).
- deploy/README.md — workflow деплоя (git archive + scp + bash redeploy.sh)
  и пояснение, что боевой остаётся source of truth для исполнения,
  репо — source of truth для рецепта.

При следующей правке скрипта на боевом — синкать обратно (sha-сверка).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 08:02:21 +03:00