Files
portal/docs/superpowers/plans/2026-06-20-acceptance-24-help-support-plan.md
T
Дмитрий e217103d3d docs(приёмка): мастер-хэндофф для прод-прогона + планы 24/25/26 + поправки
Мастер-документ точки входа для свежей сессии: тест на боевом liderra.ru,
порядок R1-R5, карта 26 планов, безопасность, эфир, вердикт GO/NO-GO.
Планы 24 помощь, 25 импер­сонизация, 26 публичный API.

Поправка: F-DIGEST снята — была ошибкой чтения устаревшего комментария,
не отставанием локалки (она байт-в-байт с боевым a119aba8). Канон-схема
db/schema.sql:796 new_lead.email:true — дайджест вкл по умолчанию. План 20
и реестр обновлены. Тесты — только на проде.

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

7.3 KiB
Raw Blame History

Приёмка liderra.ru — ПУНКТ №24: «Помощь» — заявка в поддержку (G7-A)

Для исполнителя: формат PR1 (одобрен 20.06). Каждый шаг = 🔧 Код-факт (file:line) · 🎬 Действие · 📋 ОТЧЁТ (было→ожидали→стало + 📸/📝) · ❌ Если не так. Техника «под капотом»; владельцу — человеческие карточки.

Цель: показать, что клиент может из кабинета обратиться в поддержку: заполняет короткую форму (имя/контакт/сообщение, частично предзаполнены из профиля), отправляет — заявка всегда сохраняется, даже если почта поддержки временно недоступна (письмо — дополнение, не условие). Плюс — живой чат поддержки, если он подключён.

Что снимаем глазами: раздел Помощь (форма → «Заявка отправлена»), чат-виджет. Живые 📸.

Источник сценария: свод проверок №24 (G7-A); новая фича деплоя 19.06.


🔧 Код-факты (подтверждено чтением 20.06)

  • Заявка создаётся всегдаstore сохраняет support_requests (с tenant_id) в транзакции, возвращает 201SupportRequestController.php:23-53, запись — :34-42.
  • Письмо — best-effort — заявка уже в БД; сбой SMTP не теряет её и не валит запрос (паттерн как код-письмо онбординга) — :19, :46-48.
  • Валидация — поля имя/контакт/сообщение обязательны; пусто → 422 — :25-33.
  • Изоляция (RLS)SET LOCAL app.current_tenant_id; клиент видит/создаёт только свои заявки — :35.
  • Чат-виджет JivoSite — виден, если задан JIVO_WIDGET_ID (иначе скрыт).

Шаг 24-1 — Отправить заявку в поддержку

🔧 Код: store :23-53. 🎬 Действие (лок): в разделе Помощь заполнить форму (имя/контакт предзаполнены из профиля, дописать сообщение) → отправить.

📋 ОТЧЁТ:

Что Было Ожидалось Стало (факт) Чем подтверждаем
Форма пустая/предзаполнена после отправки — «Заявка отправлена» (слот прогона) 📸 Помощь (форма → алерт «отправлена»)
Заявка в базе нет создана (со своим tenant_id) (слот) 📝 support_requests (своя строка)
Письмо поддержке поставлено в очередь (best-effort) (слот) 📝 очередь письма (внутр.)

💡 Что внутри: клиент может прямо из кабинета написать в поддержку — часть полей уже заполнена за него. Заявка сразу сохраняется в системе, а письмо поддержке — это дополнение: даже если почта на минуту откажет, обращение не потеряется.

Если не так: заявка не сохранилась при сбое почты → дефект (best-effort нарушен).


Шаг 24-2 — Пустую форму не отправить (валидация)

🔧 Код: :25-33. 🎬 Действие (лок): отправить форму с пустыми полями.

📋 ОТЧЁТ:

Что Было Ожидалось Стало (факт) Чем подтверждаем
Пустая отправка не принимается (просит заполнить) (слот) 📸 Помощь (ошибки полей)

Если не так: пустая заявка создаётся → мусор в поддержке.


Шаг 24-3 — Изоляция и чат-виджет

🔧 Код: RLS — :35; JivoSite — по JIVO_WIDGET_ID. 🎬 Действие (лок): проверить, что клиент видит только свои заявки; чат-виджет отображается при заданном ключе.

📋 ОТЧЁТ:

Что Было Ожидалось Стало (факт) Чем подтверждаем
Чужие заявки не видны (только свои) (слот) 📝 RLS: только свой tenant
Чат поддержки виден, если ключ задан (слот) 📸 виджет чата (или его отсутствие без ключа)

Если не так: видны чужие заявки → утечка (связка с №16).


Verification №24 (выход из пункта)

  • 📸 Заявка отправляется, показывается «Заявка отправлена».
  • 📝 Запись support_requests создаётся всегда (даже при сбое почты).
  • 📸 Пустая форма не принимается (валидация).
  • 📝 Изоляция: только свои заявки; 📸 чат-виджет при заданном ключе.

📸 vs 📝 в этом пункте

  • 📸 Скриншот: Помощь (форма, алерт «отправлена», ошибки валидации), чат-виджет.
  • 📝 Текст: запись в support_requests, очередь письма, RLS — текстом.

Грабли

  • Письмо best-effort — для проверки «заявка не теряется» сымитировать сбой почты (на dev MAIL в лог) и убедиться, что запись всё равно создана.
  • Чат-виджет — только при заданном JIVO_WIDGET_ID; без ключа его отсутствие — норма.
  • Уже показано в эфире (карточка 7) — здесь углубление best-effort/валидации/изоляции.