e217103d3d
Мастер-документ точки входа для свежей сессии: тест на боевом 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>
172 lines
20 KiB
Markdown
172 lines
20 KiB
Markdown
# МАСТЕР-ХЭНДОФФ: полный приёмочный тест боевого liderra.ru — точка входа для свежей сессии
|
||
|
||
> **🟢 ЧИТАЙ ЭТО ПЕРВЫМ. Ты — новая сессия-исполнитель. Этот документ ведёт тебя от старта до вердикта GO/NO-GO. Не угадывай — иди по ссылкам.**
|
||
|
||
**Дата:** 20.06.2026. **Кодовая фраза стены:** «роутер-наставник» (на приёмке стена снята — действуй свободно, но строго по §1 безопасности).
|
||
**Что ты делаешь:** прогоняешь **полное приёмочное тестирование боевого портала `liderra.ru`** «глазами клиента» — перед передачей продажникам. Доказываешь, что платящему клиенту **всё реально работает** (вход → проект → заказ поставщику → поставка лида → сделки → деньги → изоляция → отчёты/импорт/онбординг/помощь/API), и оцениваешь ёмкость/железо.
|
||
|
||
---
|
||
|
||
## ⛔ §1. БЕЗОПАСНОСТЬ — прочитать дважды (это БОЕВОЙ прод)
|
||
|
||
Полный свод — [R0 §3-§4](../runbooks/2026-06-18-acceptance-r0-start-access-safety.md). Кратко, неотменяемо:
|
||
|
||
- ⛔ **НЕ трогать `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](2026-06-18-prod-logic-map.md)** §0–§21 — логика прода построчно. **Без неё не понять, что проверяешь.**
|
||
3. **[Хартия](2026-06-18-acceptance-test-charter.md)** — объём (10 клиентских пунктов + слой D + блок **ПЕРЕСМОТР — каноничный**).
|
||
4. **[R0](../runbooks/2026-06-18-acceptance-r0-start-access-safety.md)** — доступ, безопасность, формат карточки.
|
||
5. **Ранбуки R1→R5 + R3b** по порядку (исполняемая техформа) — см. §4.
|
||
6. **26 пер-пунктовых планов** (этой серии, `docs/superpowers/plans/2026-06-20-acceptance-*`) — детальные `было→ожидали→стало` + код-факты file:line + что снимать 📸 / что 💡 — см. §5.
|
||
7. **[Реестр находок](2026-06-20-acceptance-findings-register.md)** — что уже найдено, что перепроверить.
|
||
8. **[Хэндофф эфира](2026-06-20-acceptance-efir-handoff.md)** §1, §4 — формат живого показа владельцу.
|
||
|
||
> ✅ **ЛОКАЛЬНЫЙ РЕПОЗИТОРИЙ В СИНХРОНЕ С БОЕВЫМ.** Деплой `01a9029c` (G1–G7, 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](2026-06-20-acceptance-efir-handoff.md)), увеличиваешь `steps/count.txt`, скриншоты в `live-demo/img/`.
|
||
- Авто-продолжение/пауза — `ScheduleWakeup` + читать `steps/control.txt` (`play`/`pause`).
|
||
- Уже отснято 13 образцовых карточек (онбординг/раздача/баланс/изоляция/помощь/API) — на боевом пересними живыми снимками `liderra.ru`.
|
||
|
||
---
|
||
|
||
## §4. ПОРЯДОК ИСПОЛНЕНИЯ — ранбуки (техническая спина)
|
||
|
||
| Этап | Ранбук | Что делает | Уборка/риск |
|
||
|---|---|---|---|
|
||
| 1 | **[R1](../runbooks/2026-06-18-acceptance-r1-provisioning.md)** | провижининг **7 тест-клиентов / 16 проектов / 12 rt** (SQL `TEST-`, owner-escape; проекты — через ПОРТАЛ, иначе нет синка) + парный teardown-скрипт | rt у поставщика → чистить до 21:00 |
|
||
| 2 | **[R2](../runbooks/2026-06-18-acceptance-r2-injection-stand.md)** | инъекционный стенд: слепок (`snapshot:backfill`) → `POST /api/webhook/supplier/<СЕКРЕТ>`; TOTP для 2FA | секрет у владельца |
|
||
| 3 | **[R3](../runbooks/2026-06-18-acceptance-r3-engine.md)** | движок карточками: распределение/деньги/сделки/изоляция + **Часть E all-pairs (27 прогонов)** + блокировка share-aware | тест-баланс, не реальные деньги |
|
||
| 3б | **[R3b](../runbooks/2026-06-18-acceptance-r3b-onboarding-digest.md)** | онбординг (G1), дайджест-письма (G2), напоминания убраны (G3) — **после деплоя, перечитать на проде** | живые ящики kdv1@/stels_info@ |
|
||
| 4 | **[R4](../runbooks/2026-06-18-acceptance-r4-load-capacity.md)** | слой D — нагрузка: **адаптивный ramp до ~3000 лидов + параллельные правки + SAFETY-стоп** (2 ГБ), цель 10k/сут, кривая+прогноз | боевая коробка, lkomega рядом |
|
||
| 5 | **[R5](../runbooks/2026-06-18-acceptance-r5-finalize-teardown.md)** | финал: сверки денег/изоляции, `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](2026-06-20-acceptance-findings-register.md). Сводка с поправкой по боевому:
|
||
|
||
| ID | Суть | Статус на проде |
|
||
|---|---|---|
|
||
| **F-CSV** 🔴 | экспорт без защиты от CSV-инъекции (формулы `=+-@`) | **перепроверить файлом** на проде (№14, №11) — возможен фикс |
|
||
| **F-DELPROJ** 🟡 | свод «сделки сохраняются»; код **запрещает** удаление проекта со сделками | поправить свод (№15) |
|
||
| **F-DIGEST** ✅ снята | ложная: читал устаревший **комментарий** `NotificationService.php`; канон [db/schema.sql:796](../../../db/schema.sql#L796) = `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](../runbooks/2026-06-18-acceptance-r5-finalize-teardown.md): по пунктам 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. Финал → вердикт.
|