docs(ПИЛОТ): снимок 28.06 — сквозная сверка прод↔git↔бэкап (1:1) + Тенанты + фронт-стенд зелёный
Прод приведён к gitea-main 84dfbc85 один-в-один (rsync-checksum, потерь нет);
бэкап цел; экран Тенанты на серверную пагинацию выкачен; 992 фронт-теста зелёные;
деньги t2=1 839 405₽ целы. Остатки не-git на проде объяснены (.bak-precutover до 03.07).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Brain Status (auto-generated)
|
||||
|
||||
Last updated: 2026-06-28T09:05:52.697Z
|
||||
Last updated: 2026-06-28T09:58:25.674Z
|
||||
|
||||
| Контролёр | Состояние | Детали |
|
||||
|---|---|---|
|
||||
@@ -33,7 +33,7 @@ Last updated: 2026-06-28T09:05:52.697Z
|
||||
| enforce-coverage-verify.mjs | `enforce-coverage-verify.mjs` | 🔴 |
|
||||
| enforce-todowrite-skill-verifier.mjs | `enforce-todowrite-skill-verifier.mjs` | 🔴 |
|
||||
|
||||
Недавние escape владельца: 0 · Недавние блоки: 3
|
||||
Недавние escape владельца: 0 · Недавние блоки: 2
|
||||
|
||||
**Недавние блоки (детали):**
|
||||
|
||||
@@ -41,7 +41,6 @@ Last updated: 2026-06-28T09:05:52.697Z
|
||||
|---|---|---|
|
||||
| 2026-06-27T11:50:42.480Z | bash:cd "c:/моя/проекты/claude-brain" && git add -- "docs/superpowers/specs/2026-06-27-secretary-closing-doors-design.md | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cd "c:/моя/проекты/cla |
|
||||
| 2026-06-27T10:01:08.010Z | bash:git restore --staged docs/observer/STATUS.md 2>/dev/null; git diff --staged --name-only | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:git restore --staged d |
|
||||
| 2026-06-27T09:25:54.127Z | bash:node -e "for (const d of ['протокол-наставника','проблема-закрытия-вопросов-протокола','содержит']) { try { const p | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:node -e "for (const d |
|
||||
|
||||
## Метрики (информационные, не алерты)
|
||||
|
||||
@@ -125,9 +124,9 @@ Episodes since last run: 542 / threshold: 10
|
||||
|
||||
| PID | Имя | CPU-время | Возраст |
|
||||
|---|---|---|---|
|
||||
| 3440 | MsMpEng | 17.84ч | NaNч |
|
||||
| 21928 | Code | 8.07ч | 0.0ч |
|
||||
| 1212 | svchost | 4.54ч | 0.0ч |
|
||||
| 3440 | MsMpEng | 18.10ч | 0.0ч |
|
||||
| 21928 | Code | 8.23ч | 14476668.5ч |
|
||||
| 1212 | svchost | 4.58ч | 0.0ч |
|
||||
|
||||
⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
> 🟢 **АКТУАЛЬНО (26.06.2026) — перебивает любые упоминания «ждут ООО / Б-1 / осталось подписать» в снимках ниже:** юр. лицо — **ИП, зарегистрировано** (НЕ ООО). **Договор с ЮKassa ПОДПИСАН 26.06** (№НЭК.448000.01), магазин **1392092** активен, приём платежей **включён со стороны ЮKassa**, СБП подключён, `info@liderra.ru` подтверждён. На проде заведены юрлицо+шлюз+webhook (см. снимок go-live ниже). **Флаг `billing_yookassa_enabled` — ВКЛЮЧЁН (подтверждено 27.06 на кластере, намеренно, штатное состояние по решению владельца).** НО **go-live онлайн-оплаты НЕ завершён:** успешной живой оплаты ещё не было (см. свежий снимок 27.06 ниже — 5 тестовых попыток 100₽ отменены на стороне ЮKassa, `paid=false`, деньги не списаны; happy-path «оплата→webhook→зачисление» в бою не проверялся; webhook IP-allowlist пуст). «Регистрация ООО» как блокер — **снято, не актуально.**
|
||||
|
||||
**Снимок снят:** 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 врёт). Кодовая фраза стены — «роутер-наставник».
|
||||
|
||||
**Снимок снят:** 28.06.2026 (~11:20 UTC) — **🔴→🟢 НАЙДЕН И ПОЧИНЕН ТИХО СЛОМАННЫЙ БИЛЛИНГ-СТОРОЖ + playwright durable + дашборд балансов/вложенности на проде.** По команде владельца «закрывай хвосты». **Главное — баг биллинга:** после переезда на Managed PG (26.06) очередь `liderra-queue` ходит в БД под ролью `crm_app_user` (RLS), и `BalancePreflightSweepJob`/`BalanceFrozenReminderJob` перебирали тенантов через `Tenant::query()` БЕЗ `app.current_tenant_id` → policy `tenants_self_isolation` отдавала **0 строк** → ночной преflight @18:00 МСК **молча стал no-op с 26.06** (heartbeat зелёный, `balance_freeze_log` пуст, ни заморозок бедных, ни снятия блоков у профинансированных). Симптом — 4 застрявших `preflight_blocked` проекта. **Фикс:** список тенантов теперь через `pgsql_supplier` (BYPASSRLS), модель грузится внутри per-tenant `SET LOCAL`. Тесты Billing 18/18, pint/phpstan чисто. **gitea/main + прод = `75dded78`** (cherry-pick поверх `cab0347f`; выкат `bin/deploy-source-edit.sh`, БД миграциями не тронута). **Прогнал sweep вручную на проде — самоисцеление подтверждено:** t25 (10090₽)→сняты блоки 2 проектов (omega/lkomega), t26 (300₽)→снят блок 1, t27 (тест example.org)→заморожен, t30 (`kaa_555@bk.ru`, 20₽ реальный)→заморожен + письмо «пополните»; `balance_freeze_log` снова пишет. **Деньги целы: t2 = 1 839 405 ₽** (до==после). **Playwright «несносимый»:** объявлен в `app/package.json → dependencies` ровно `1.59.0` (под browser chromium-1217) + lock; деплой получил шаг 6d `npm ci --omit=dev --legacy-peer-deps` (только прод-деп, без тяжёлого фронт-дерева, без скачивания браузера) → переживёт будущие чистки `node_modules` (корень падения синхрона 27.06). Поставлен на прод (3 пакета). **Дашборд (выкачено ранее 28.06):** плитка «Балансы сервисов» + «Пополнить», плитка «Клиенты», экран «Лиды» (серверная пагинация) + карточка лида (цепочка до источника), выбор периода. **🟡 Следующим заходом (решение владельца):** экран «Тенанты» на серверную пагинацию/фильтры для 1000 клиентов. **🔴 YC в минусе −606₽:** пополнить `console.yandex.cloud/billing/accounts/dn2w7fcvynjxe6elljct/payments`. Кодовая фраза стены — «роутер-наставник».
|
||||
|
||||
**Снимок снят:** 27.06.2026 (~10:40 UTC) — **🟢 ВЫКАЧЕНО на боевой: (1) снят лишний лимит по ЧИСЛУ проектов, (2) подсказка «Как увеличить количество сделок» в диалоге проекта.** По команде владельца (онлайн-наблюдение за работающим клиентом + правки его затыков). **gitea/main + прод = `fa736136`** (продвинут моими выкатами `c7e015a9`→`7ac9af7c`→`fa736136`; ссылка на `c7e015a9` в снимке ~13:00 ниже — стейл/concurrent). **Что сделано:** (1) убран гейт `max_projects` в `ProjectService::create` + поле `active_projects.limit` с дашборда — **правило продукта: лимита по числу проектов НЕТ, только по балансу/заказанным лидам**; у всех тенантов `tenants.limits={}` → код брал дефолт `?? 10` и ложно блокировал tenant 2 (117 проектов) с «Достигнут лимит проектов (10)»; `max_users`/`api_rps` — мёртвые ключи (только в комментариях), колонка `limits` оставлена. (2) подсказка с tooltip в `NewProjectDialog.vue` над «Откуда собирать заявки». **Метод выката:** `bin/deploy-source-edit.sh` — **ПОЧИНЕН под кластер** (убраны DB-шаги через `sudo -u postgres` = старая rollback-база на VM; миграции теперь `php artisan migrate --force` в кластер по `.env`, для код-онли = «Nothing to migrate»); скрипт gitignored (внутри пароль gitea). **Verify:** HTTP **200** (главная+login), подсказка в живой сборке `ProjectsView-CSdkdAXR.js`, гейт лимита в боевом коде = 0 совпадений, **деньги целы tenant 2 = 1 839 600 ₽ / 999 731 лид**, миграций нет (БД не тронута). **Бэкап кода на проде** `/tmp/app-backup-2026-06-27-*.tgz`. **🔴 ОТКРЫТЫЙ БАГ (наблюдение по логам 27.06):** сессия клиента **рвётся через ~8–10 мин активной работы** (НЕ таймаут: `SESSION_LIFETIME=120` мин, Redis здоров/noeviction) + интерфейс молчит вместо «войдите заново» (сыпет 401 в фон) → клиент видит пустую страницу. Также путаница паролей у владельца (вводил пароль от `kdv1@bk.ru` на `info@lkomega.ru`; вход — `info@lkomega.ru`/`Liderra2026!`). Разбор: `docs/superpowers/findings/2026-06-27-live-client-observation.md` + `…/2026-06-27-remove-project-count-limit.md`. **Параллельная сессия** работала локально на ветке `feat/admin-command-center` (её коммит `1a92b702` в main НЕ влит — изолировал свои правки worktree+cherry-pick). Кодовая фраза стены — «роутер-наставник».
|
||||
|
||||
Reference in New Issue
Block a user