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

Поправка: F-DIGEST снята — была ошибкой чтения устаревшего комментария,
не отставанием локалки (она байт-в-байт с боевым 01a9029c). Канон-схема
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

20 KiB
Raw Blame History

МАСТЕР-ХЭНДОФФ: полный приёмочный тест боевого liderra.ru — точка входа для свежей сессии

🟢 ЧИТАЙ ЭТО ПЕРВЫМ. Ты — новая сессия-исполнитель. Этот документ ведёт тебя от старта до вердикта GO/NO-GO. Не угадывай — иди по ссылкам.

Дата: 20.06.2026. Кодовая фраза стены: «роутер-наставник» (на приёмке стена снята — действуй свободно, но строго по §1 безопасности). Что ты делаешь: прогоняешь полное приёмочное тестирование боевого портала liderra.ru «глазами клиента» — перед передачей продажникам. Доказываешь, что платящему клиенту всё реально работает (вход → проект → заказ поставщику → поставка лида → сделки → деньги → изоляция → отчёты/импорт/онбординг/помощь/API), и оцениваешь ёмкость/железо.


§1. БЕЗОПАСНОСТЬ — прочитать дважды (это БОЕВОЙ прод)

Полный свод — R0 §3-§4. Кратко, неотменяемо:

  • НЕ трогать lkomega / tenant 2 — реальный бизнес владельца («Компания 1», info@lkomega.ru, баланс ~1.83М ₽, 1013 сделок ЦЕЛ). Не править/удалять/вливать/менять баланс.
  • Реальный заказ у поставщика crm.bp-gr.ru — только тест-проектами, вычищать ДО 21:00 МСК (иначе поставщик зафиксирует слепок и начнёт слать реальные платные лиды).
  • НЕ светить секреты (вебхук-секрет, пароли, креды) в чат/логи/коммиты. Берёшь у владельца.
  • Все тест-объекты — с маркером TEST- (для teardown).
  • Мутации прода — осознанно (стены нет; вся ответственность на тебе). Read-only SELECT — свободно.
  • 🛑 Критдефект (деньги расходятся / изоляция течёт / чужие данные): СТОП по пункту, зафиксируй «ожидали/получили/факт из БД», доложи владельцу, НЕ чини на боевом. UX-косяки — отдельным списком, прогон не блокируют.
  • ⚠️ Прод спит (0 активных проектов) — рабочее окно; железо слабое (2 ГБ / 2 vCPU@20%) → на нагрузке (R4) со SAFETY-стопом.

§2. ЧТО ПРОЧИТАТЬ — строгий порядок

  1. Этот мастер (точка входа, маршрут, формат отчёта, безопасность).
  2. prod-logic-map.md §0–§21 — логика прода построчно. Без неё не понять, что проверяешь.
  3. Хартия — объём (10 клиентских пунктов + слой D + блок ПЕРЕСМОТР — каноничный).
  4. R0 — доступ, безопасность, формат карточки.
  5. Ранбуки R1→R5 + R3b по порядку (исполняемая техформа) — см. §4.
  6. 26 пер-пунктовых планов (этой серии, docs/superpowers/plans/2026-06-20-acceptance-*) — детальные было→ожидали→стало + код-факты file:line + что снимать 📸 / что 💡 — см. §5.
  7. Реестр находок — что уже найдено, что перепроверить.
  8. Хэндофф эфира §1, §4 — формат живого показа владельцу.

ЛОКАЛЬНЫЙ РЕПОЗИТОРИЙ В СИНХРОНЕ С БОЕВЫМ. Деплой 01a9029c (G1G7, schema v8.49) — в локальной истории (предок HEAD), код байт-в-байт с прода. Код-факты планов читаны из локального app/ и валидны. ⚠️ НО канон — это сама схема/код, а не комментарии-докблоки. Одна находка (F-DIGEST) была ложной, потому что я прочитал устаревший комментарий в NotificationService.php вместо канона db/schema.sql (дефолт письма). Правило: критичные факты сверяй по схеме/живому коду, не по комментариям; и поскольку это прод-тест — подтверждай ключевые числа на самом проде (R0 §2). См. §7.


§3. ДВА ВЫХОДА: техническая сверка + живой эфир владельцу

Ты делаешь одно действие, но фиксируешь его двумя способами:

Слой Для кого Формат Где
Техническая сверка для тебя/контроля карточка R0 §6: ID · §ref · Предусловие · Действие · Ожидаем · Сверка(команды) · Если не так · Покрывает; статус PASS/FAIL/SKIP + «ожидали/получили» накапливаешь в отчёт (R5)
Живой эфир для владельца (НЕ программист) карточка было→ожидали→стало простым языком + 📸 живой скриншот того, что видно на экране + 💡 объяснение внутреннего; бэйдж /🔴/ live-demo/steps/NNNN.json

Правило: что видно на экране портала (баланс, сделки, плашка, реквизиты) — обязательно 📸 живой скриншот (Playwright против https://liderra.ru). Что внутри (раздача, списание, цепочка) — 💡 простыми словами + 📝 сверка в БД (read-only).

Механика эфира (поднять перед показом)

  • В live-demo/: php -S 0.0.0.0:8899 → открыть http://localhost:8899/efir.html (кнопки ▶/⏸ — пульт владельца).
  • Карточки роняешь в live-demo/steps/NNNN.json (формат — эфир-хэндофф §1), увеличиваешь steps/count.txt, скриншоты в live-demo/img/.
  • Авто-продолжение/пауза — ScheduleWakeup + читать steps/control.txt (play/pause).
  • Уже отснято 13 образцовых карточек (онбординг/раздача/баланс/изоляция/помощь/API) — на боевом пересними живыми снимками liderra.ru.

§4. ПОРЯДОК ИСПОЛНЕНИЯ — ранбуки (техническая спина)

Этап Ранбук Что делает Уборка/риск
1 R1 провижининг 7 тест-клиентов / 16 проектов / 12 rt (SQL TEST-, owner-escape; проекты — через ПОРТАЛ, иначе нет синка) + парный teardown-скрипт rt у поставщика → чистить до 21:00
2 R2 инъекционный стенд: слепок (snapshot:backfill) → POST /api/webhook/supplier/<СЕКРЕТ>; TOTP для 2FA секрет у владельца
3 R3 движок карточками: распределение/деньги/сделки/изоляция + Часть E all-pairs (27 прогонов) + блокировка share-aware тест-баланс, не реальные деньги
3б R3b онбординг (G1), дайджест-письма (G2), напоминания убраны (G3) — после деплоя, перечитать на проде живые ящики kdv1@/stels_info@
4 R4 слой D — нагрузка: адаптивный ramp до ~3000 лидов + параллельные правки + SAFETY-стоп (2 ГБ), цель 10k/сут, кривая+прогноз боевая коробка, lkomega рядом
5 R5 финал: сверки денег/изоляции, audit:verify-chains, teardown (поставщик→слепки→тест-тенанты→Redis), вердикт GO/NO-GO teardown строгий порядок

Логика порядка: R1 строит популяцию → R2 даёт инструмент → R3 гоняет корректность+all-pairs → R3b онбординг/UI → R4 нагружает → R5 убирает и выносит вердикт.


§5. КАРТА: пункт свода → пер-пунктовый план (детализация было→ожидали→стало + код-факты)

26 планов этой серии в docs/superpowers/plans/2026-06-20-acceptance-*. Каждый — детальный разбор пункта с file:line, что снимать 📸, что 💡, и где честно помечены расхождения свода с кодом (находки).

Пункт План-файл Гонится в
PR2 проекты→12 rt …-PR2-projects-plan.md R1
PR3 балансы …-PR3-balances-plan.md R1
№1 распределение/CAP=3 …-01-distribution-cap-plan.md R3
№2 второй круг …-02-second-round-plan.md R3
№3 каскад региона …-03-region-cascade-plan.md R3
№4 лимит/пауза под локом …-04-limit-pause-under-lock-plan.md R3
№5 идемпотентность …-05-idempotency-plan.md R3
№6 каналы/парсинг …-06-channels-parsing-plan.md R3
№7 списание+тройная запись …-07-charge-triple-entry-plan.md R3
№8 тариф-ступень …-08-tier-step-plan.md R3
№9 нехватка→откат+автопауза …-09-insufficient-rollback-plan.md R3
№10 два проекта=одно списание …-10-two-projects-one-charge-plan.md R3
№11 лента денег+калькуляторы …-11-money-ledger-calculators-plan.md R3
№12 денежный аудит …-12-money-audit-plan.md R3/R5
№13 сделки лента/карточка/статусы …-13-deals-list-card-status-plan.md R3
№14 ручная/массовые/экспорт …-14-manual-bulk-export-plan.md R3
№15 сделки переживают удаление проекта …-15-deals-survive-project-delete-plan.md R3
№16 изоляция …-16-isolation-plan.md R3/R5
№18 онбординг …-18-onboarding-plan.md R3b
№19 гейт реквизитов+ИНН …-19-requisites-gate-inn-plan.md R3b
№20 колокольчик+дайджест …-20-bell-digest-plan.md R3b
№21 напоминания убраны …-21-reminders-gone-plan.md R3b
№22 отчёты …-22-reports-plan.md R3b
№23 импорт CSV …-23-csv-import-plan.md R3b
№24 помощь …-24-help-support-plan.md R3b
№25 импер­сонизация (клиентская плашка) …-25-impersonation-client-plan.md R3/прод
№26 публичный API+ключи …-26-public-api-keys-plan.md R3b

№17 all-pairs (27 прогонов) — не отдельный пункт, а матрица прогона пунктов №1–№16 в сочетаниях S×R×B×Lim×D → R3 Часть E (генератор 111 пар). Фаза 4 (нагрузка) → R4. Фаза 5 (финал/вердикт) → R5. PR1 (7 клиентов) + PR4 (teardown-скрипт) → R1.

⚠️ Планы писались по локальному коду с пометками «(лок)». На проде исполняй те же шаги против liderra.ru (провижининг SQL+escape, реальная DaData/Россвязь, реальный поставщик, живые письма). Пометки «🟦 на прод-прогоне» в планах — теперь основной режим.


§6. ПРОВИЖИНИНГ И ДОСТУП (кратко; полно — R0 §2, R1)

  • Доступ: ssh liderra-prod '<cmd>' (бастион). Read-only SQL: ssh liderra-prod 'psql -h 127.0.0.1 -U crm_app_user -d liderra -tA -c "SELECT …"'. RLS-таблицы — sudo -u postgres psql -d liderra -c "SET app.current_tenant_id='<ID>'; SELECT …".
  • Тест-клиенты: SQL-INSERT tenants(TEST-…, active, баланс) + users(bcrypt, is_active=true), маркер TEST-, owner FLOOR-ESCAPE. imitation:seed на проде запрещён, endpoint создания тенанта нет.
  • Проекты: создавать через портал (иначе нет синка к поставщику и rt не появятся).
  • Живые ящики: kdv1@bk.ru, stels_info@bk.ru — на тех клиентов, кому письма важны (сброс пароля, новый лид, заморозка). Остальным — пустой адрес, токены смотреть в БД read-only.
  • Браузер: Playwright против https://liderra.ru.
  • Секреты (вебхук-секрет, пароли) — у владельца, в чат не писать.

§7. НАХОДКИ — что уже известно и что перепроверить на проде

Полный реестр — findings-register. Сводка с поправкой по боевому:

ID Суть Статус на проде
F-CSV 🔴 экспорт без защиты от CSV-инъекции (формулы =+-@) перепроверить файлом на проде (№14, №11) — возможен фикс
F-DELPROJ 🟡 свод «сделки сохраняются»; код запрещает удаление проекта со сделками поправить свод (№15)
F-DIGEST снята ложная: читал устаревший комментарий NotificationService.php; канон db/schema.sql:796 = new_lead.email:true — дайджест вкл по умолчанию (G2-B). Локалка в синхроне комментарий поправлен; №20 обновить (дайджест вкл)
F-PDF 🟡 PDF-отчёт → штатно failed (заглушка) подтвердить на проде (№22)
F-REMIND 🧹 фронт-хвосты снятой фичи напоминаний (auth.ts 'reminder', коммент) проверить мёртвый переключатель на проде; дочистить (№21)
F1/F2/F4/F5 прежний осмотр 17.06 (город/цена0₽/пустой столбец/мок-средняя) перепроверить (№3,№11,№13)
F3 «хватит на дней» Дашборд↔Биллинг закрыта (единый источник)

§8. МАСТЕР-ЧЕК-ЛИСТ «ничего не пропущено»

  • Прочитан prod-logic-map §0–§21, хартия (ПЕРЕСМОТР), R0.
  • Поднят эфир (:8899), пульт работает; готов ронять карточки.
  • R1: 7 клиентов/16 проектов/12 rt заведены (TEST-), teardown-скрипт готов.
  • R2: инъекция работает (слепок→вебхук→сделка).
  • R3: пункты №1–№16 пройдены карточками (тех. PASS/FAIL + эфир); R3 Часть E all-pairs (27) покрыта.
  • R3b: №18–№26 (онбординг/реквизиты/колокольчик/напоминания/отчёты/импорт/помощь/импер­сонизация/API) — перечитаны на проде, пройдены.
  • R4: нагрузка — ramp, кривая, прогноз ёмкости, SAFETY-стоп не сорван.
  • R5: F1 Σ-сверка денег, F2 изоляция, F3 audit:verify-chains зелёный, F4 маржа, teardown ДО 21:00 (поставщик→слепки→тенанты→Redis→проверка чистоты), tenant 2 ЦЕЛ.
  • Все находки §7 перепроверены/обновлены; новые — в реестр.
  • Итоговый отчёт + вердикт GO / NO-GO (GO = 0 расхождений по деньгам и изоляции, ядро проходит сквозь).

§9. ВЕРДИКТ

GO — если: деньги сходятся копейка-в-копейку (F1), изоляция 0 утечек (F2), аудит зелёный (F3), ядро движка (раздача→списание→сделка→изоляция) проходит сквозь, критдефектов нет. UX-косяки GO не блокируют (список владельцу). NO-GO — любой критдефект денег/изоляции/чужих данных.

Итоговый отчёт — формат R5: по пунктам PASS/FAIL/SKIP + находки + ёмкость + вердикт.


§10. ОТКУДА СТАРТОВАТЬ ПРЯМО СЕЙЧАС

  1. Прочитай §2 (в порядке): map → хартия → R0.
  2. Возьми у владельца: вебхук-секрет, пароли тест-клиентов, подтверждение окна (прод спит, до 21:00 для поставщика).
  3. Подними эфир (§3).
  4. Иди R1 → R2 → R3(+E) → R3b → R4 → R5, на каждом пункте сверяясь с пер-пунктовым планом (§5); ключевые числа (тарифы, дефолты) подтверждай по схеме/живому коду и на проде (это прод-тест), не по комментариям.
  5. Критдефект → СТОП + владельцу. Teardown ДО 21:00. Финал → вердикт.