# 🚀 ПРОМТ ДЛЯ НОВОЙ СЕССИИ — свести все находки приёмки в один список и начать чинить

> ✅ **ВЫПОЛНЕНО (проверено по коду 22.06.2026):** находки FN-RESET, FN-LOGIN-ROUTE, FN-2, FN-3, FN-ENC исправлены в коде (на Gitea) — `AppServiceProvider::createUrlUsing` (FN-RESET), миграция drop-reminder (FN-2), `RegistrationService:115` email_verified_at (FN-3), `CsvLeadsParser:37` (FN-ENC), SPA-обработка 401 (FN-LOGIN-ROUTE). **✅ всё на проде (проверено по боевому 22.06.2026).** FN-INN-LOOKUP / FN-AUDIT — диагностика прода; FN-FAILEDJOBS / tenant 24 — действия владельца. Промт ниже оставлен как история.

> Вставь это как первый промт. Кодовая фраза стены: **«роутер-наставник»**.

## Что ты делаешь
22.06.2026 проведён полный приёмочный тест боевого **liderra.ru** — вердикт **GO** (ядро: деньги/изоляция/раздача/нагрузка — чисто; омега `tenant 2` цела). Но найден ряд находок. **Твоя задача:** (1) прочитать отчёт и все находки, (2) **вывести ЕДИНЫЙ приоритизированный список всего, что надо починить**, (3) вместе с владельцем решить, **с чего начинаем править**, и начать.

## Прочитай первым (источники истины)
1. **Отчёт приёмки:** `docs/superpowers/specs/2026-06-21-acceptance-RUN-report.md` — вердикт, по-пунктовые PASS/FAIL/SKIP, ВСЕ находки (FN-*), разбор логов.
2. **Файл прогона (локальный, НЕ в git — там тест-пароль):** `docs/superpowers/runbooks/2026-06-22-acceptance-RUN-provisioning.md` — id тенантов, FN-1/2/3, NB-DIRECT.
3. **Снимок боевого:** `ПИЛОТ.md` (корень) — запись «Снимок снят: 22.06.2026» (находки + контекст «лиды не идут с 3 июня»).
4. Память: `project-acceptance-run-2026-06-22.md` (и индекс MEMORY.md).

## Сводный список находок (свести в единый, проверить по отчёту — это краткая выжимка)

**🔴 Срочное (чинить до/около передачи продажникам):**
- **FN-RESET** — сброс пароля сломан для ВСЕХ. `forgotPassword`→дефолтное Laravel-уведомление строит URL через `route('password.reset')`, которого нет (SPA-роут `/reset/:token`). Клиент видит «ошибка», письмо не уходит; побочно ломает анти-перебор. **Фикс ~4 строки:** `ResetPassword::createUrlUsing(fn($u,$t)=>config('app.url')."/reset/{$t}?email=".urlencode($u->email))` в `AppServiceProvider::boot()`.
- **FN-LOGIN-ROUTE** — `Route [login] not defined` (свежий 21.06). Тот же класс, что FN-RESET (дефолтные Laravel-маршруты, которых SPA не объявляет). **Чинить вместе** одним заходом.
- **FN-SESSION** (живое, операционно) — заход к поставщику через Playwright валится **~121×/день каждый день** (`SupplierAuthException: PlaywrightBridge exit 1`). Переустановка браузера 21.06 НЕ вылечила → `CsvReconcileJob` (подбор пропущенных лидов) не работает. **Вероятная зацепка к «лиды не идут с 3 июня».** Разбирать запуск Playwright под www-data (HOME/права/версия headless-shell).

**🟡 Скоро:**
- **FN-FAILEDJOBS-PILE** — ✅ СДЕЛАНО на проде 22.06.2026: `queue:flush` выполнен (было 494 191 → 0). ~~490 223 мёртвых `failed_jobs` (B1+SMS, майский шторм вашиденьги24, корень починен)~~.
- **FN-AUDIT** — `audit:verify-chains` ВО ВРЕМЯ прогона краснеет на свежих app-строках текущего месяца (глобальная per-partition цепочка); самоизлечивается после teardown; прогон записал transient-инциденты на проде. Разобрать почему свежие строки sharing-flow не верифицируются + почистить ложные инциденты m06.
- **tenant 24** — ✅ СДЕЛАНО на проде 22.06.2026: онбординг-аккаунт `kdv1@bk.ru` (300 ₽) удалён soft-delete (обратимо).

**🟢 Минор:**
- **FN-1** — смс+слово создаёт у поставщика только B2 без B3 (по `SupplierProjectGrouping::resolvePlatforms` должно B2+B3).
- **FN-2** — мёртвый ключ `reminder` в дефолте `users.notification_preferences` (фича удалена; расходится с `db/schema.sql:795`).
- **FN-3** — онбординг-confirm не ставит `users.email_verified_at` (аккаунт всё равно активен).
- **FN-ENC** — лид с битой UTF-8-кодировкой падал в очереди (4× исторически).
- **FN-RLS-CTX** — путь запроса к `projects` без `app.current_tenant_id` (29.05, исторически).
- **M-1** — админ-зона `/api/admin/*` держится только на nginx-пароле (fail-open) — бизнес-решение о defense-in-depth.
- **NB-DIRECT** — DIRECT-проекты синкаются к поставщику как site → дают 3 rt (не 0); на DIRECT-инъекцию не влияет.

**⚰️ НЕ находки (развеяно разбором логов):** основной шум (490k B1+SMS / collision 2001× / routing_failed 667×) — исторический майский шторм, корень починен. Почта/деньги/раздача сейчас здоровы.

## Рекомендация по старту (предложить владельцу)
1. **Связка FN-RESET + FN-LOGIN-ROUTE** — один фикс-класс (дефолтные Laravel-маршруты ↔ SPA), быстро, клиент-видимо. Сделать **по TDD локально** (тест: `Password::sendResetLink` строит URL с `/reset/` и не бросает; flow не зовёт несуществующий `route('login')`), затем владелец выкатит.
2. Параллельно копнуть **FN-SESSION** (это про деньги — поток лидов): воспроизвести падение Playwright под www-data на проде, найти корень (это, вероятно, и есть часть «лиды не идут»).

## Жёсткие правила (как в приёмке)
- **Прод НЕ чинить вживую** — фиксы по TDD в локальном репо, владелец выкатывает. Диагностика на проде — **read-only** (`ssh liderra-prod`, `sudo -u postgres psql` для RLS-таблиц).
- **Омегу (`tenant 2`, «Компания 1», 1 835 400 ₽ / 1013 сделок) НЕ трогать.**
- Коммит/пуш — **только с явного слова владельца** (пуш — в **gitea**, github мёртв). Память — `coverage: direct:memory-sync` или фраза «memory dump».
- Не уверен — спроси. Не выдумывай — открой и проверь.

## Первый шаг
Прочитай отчёт (§выше п.1), выведи владельцу **единый список** (по этому шаблону, сверив с отчётом), и спроси: **с чего начинаем** — рекомендация FN-RESET+FN-LOGIN-ROUTE связкой + параллельно FN-SESSION.
