- 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>
8.1 KiB
🚀 ПРОМТ ДЛЯ НОВОЙ СЕССИИ — свести все находки приёмки в один список и начать чинить
✅ ВЫПОЛНЕНО (проверено по коду 22.06.2026): находки FN-RESET, FN-LOGIN-ROUTE, FN-2, FN-3, FN-ENC исправлены в коде (на Gitea) —
AppServiceProvider::createUrlUsing(FN-RESET), миграция drop-reminder (FN-2),RegistrationService:115email_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) вместе с владельцем решить, с чего начинаем править, и начать.
Прочитай первым (источники истины)
- Отчёт приёмки:
docs/superpowers/specs/2026-06-21-acceptance-RUN-report.md— вердикт, по-пунктовые PASS/FAIL/SKIP, ВСЕ находки (FN-*), разбор логов. - Файл прогона (локальный, НЕ в git — там тест-пароль):
docs/superpowers/runbooks/2026-06-22-acceptance-RUN-provisioning.md— id тенантов, FN-1/2/3, NB-DIRECT. - Снимок боевого:
ПИЛОТ.md(корень) — запись «Снимок снят: 22.06.2026» (находки + контекст «лиды не идут с 3 июня»). - Память:
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×) — исторический майский шторм, корень починен. Почта/деньги/раздача сейчас здоровы.
Рекомендация по старту (предложить владельцу)
- Связка FN-RESET + FN-LOGIN-ROUTE — один фикс-класс (дефолтные Laravel-маршруты ↔ SPA), быстро, клиент-видимо. Сделать по TDD локально (тест:
Password::sendResetLinkстроит URL с/reset/и не бросает; flow не зовёт несуществующийroute('login')), затем владелец выкатит. - Параллельно копнуть 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.