Files
portal/docs/superpowers/specs/2026-06-22-FINDINGS-fix-session-prompt.md
T
Дмитрий ada7088511 feat(projects): клиентская валидация формы нового проекта (F-NEWPROJECT-1) + синк статусов находок по проду
- NewProjectDialog.submit(): обязательны название и источник (домен/номер/отправители по типу сигнала); ошибка показывается сразу, без обращения к серверу. +2 TDD-теста, два существующих теста обновлены под новый гейт. Полный фронт-сьют — без новых падений; проверено глазами в браузере на локалке.
- docs: пометки находок приёмки/UI/impersonation/ADR-018 приведены к фактическому прод-статусу (M-1, M-2 капча Yandex, FN-RESET/2/3/ENC, F-CSV, apiv1-rate, N-4, F-T1, F-P1 — на проде; failed_jobs очищены 494191->0; tenant 24 удалён soft-delete).
- решение владельца 22.06: admin-area доделки (saas-admin SSO, two-person approval, role-guard супер-админа, supplier fallback, обезличенный admin_user_id) сняты как отдельные задачи — доделать единым пакетом вместе с подключением Yandex SSO после ООО.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 16:43:10 +03:00

8.1 KiB
Raw Blame History

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

ВЫПОЛНЕНО (проверено по коду 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-ROUTERoute [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-AUDITaudit: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.