docs(приёмка): пошаговый launch-промт для сессии-исполнителя
Accessibility (Pa11y live) / a11y (push) Has been cancelled

Пуленепробиваемый вход: железные запреты (омега/секреты/21:00/критдефект),
состояние прода (только омега, реальная капча, playwright ок, бэкап), что взять
у владельца, порядок R0-R5 с поправками (Татарстан=19, vid-диапазон, teardown
без name/auth_log, онбординг через ручную капчу), анти-ошибка ритуал, вердикт.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-21 20:30:27 +03:00
parent 6e903d5f5a
commit bf1c87e707
@@ -0,0 +1,113 @@
# 🚀 ПРОМТ ДЛЯ СЕССИИ-ИСПОЛНИТЕЛЯ — приёмочный тест боевого liderra.ru
> **Это твой единственный вход. Читай сверху вниз и делай РОВНО как написано. Кодовая фраза стены: «роутер-наставник».**
> Ты — новая сессия. Твоя задача — провести **полный приёмочный тест боевого портала liderra.ru** «глазами клиента» перед передачей продажникам, и выдать вердикт **GO/NO-GO**. Прод спит (один реальный клиент — омега). Подготовка уже сделана прошлой сессией (см. §2). Не импровизируй — где не уверен, **спроси владельца**, не гадай.
---
## ⛔ §1. ЖЕЛЕЗНЫЕ ЗАПРЕТЫ (прочитай дважды — это БОЕВОЙ прод)
1. **НИКОГДА не трогай `tenant_id = 2`** — это **`Компания 1` / `info@lkomega.ru`**, ЕДИНСТВЕННЫЙ реальный клиент (баланс **1 835 400 ₽**, **1013 сделок**, **117 проектов**). Не править, не удалять, не списывать, не имперсонировать, не включать в выборки на запись. **Любая мутирующая SQL ОБЯЗАНА содержать `tenant_id IN (<твои TEST-id>)` или `<> 2`. Перед КАЖДОЙ мутацией перечитай WHERE и убедись: tenant 2 НЕ затрагивается.**
2. **Все тест-объекты — с маркером `TEST-`**`tenants.organization_name` И `tenants.subdomain`). ⚠️ У таблицы `tenants` **НЕТ колонки `name`** — опознавай тест-тенантов по `organization_name`/`subdomain`, не по `name` (иначе SQL упадёт).
3. **Все инъекции вебхука — с `vid` из зарезервированного TEST-диапазона `9000000000000..9999999999999`** (13 цифр). Это единственный маркер для уборки orphan-таблиц (`supplier_leads`/`webhook_log`/`failed_webhook_jobs` — без `tenant_id`).
4. **Реальный заказ у поставщика crm.bp-gr.ru — только тест-проектами, чистить rt-проекты ДО 21:00 МСК.** Иначе поставщик зафиксирует слепок и начнёт слать платные лиды.
5. **Критдефект** (деньги расходятся / изоляция течёт / видны чужие данные / двойное списание): **СТОП по пункту**, зафиксируй «ожидали / получили / факт из БД», **доложи владельцу, НЕ чини на боевом**. UX-косяки — в отдельный список, прогон не блокируют.
6. **Секреты** (вебхук-секрет, пароли) — бери у владельца, **в чат/логи/коммиты не писать**.
7. **Read-only `SELECT` — свободно. Мутации — осознанно**, по правилам выше. Доступ к проду: `ssh liderra-prod '<команда>'`; RLS-таблицы — `sudo -u postgres psql -d liderra -c "SET app.current_tenant_id='<ID>'; SELECT …"`.
8. **Перед массовым удалением (teardown) — свежий `pg_dump`** (как в R5). Не удаляй `auth_log`/`saas_admin_audit_log` (глобальная audit-цепочка — порвёшь `verify-chains`; это находка N-3).
---
## §2. СОСТОЯНИЕ ПРОДА НА СТАРТ (что оставила прошлая сессия 21.06)
- **Прод вычищен: остался ТОЛЬКО tenant 2 (омега).** Все demo/test-тенанты (1,3,4,5,16) удалены. Чистый фон — случайно зайти не подо что.
- **Капча на проде — РЕАЛЬНАЯ** Yandex SmartCaptcha (`CAPTCHA_DRIVER=yandex`, site-key боевой, `test=false`). Headless-автомат её НЕ решит (см. §5 про онбординг).
- **Playwright/синк к поставщику — РАБОТАЕТ** (браузер установлен, сессия в Redis жива).
- **Выкачено на прод и проверено:** M-1 (fail-closed админ-гейт), M-2 (реальная капча), F-CSV (экранирование выгрузок), F-DEPTRAC, rate-limit `/api/v1/deals`, N-4 (дедуп дайджеста mark-after).
- **Код:** локалка = прод-исходники = gitea-бэкап **байт-в-байт**. Бэкап БД до сноса: `/tmp/liderra-pre-teardown.dump` (откат возможен).
- **Прежние «живые ящики» `kdv1@/stels_info@` УДАЛЕНЫ** — для писем бери свежий ящик, которым владеешь.
---
## §3. ЧТО ВЗЯТЬ У ВЛАДЕЛЬЦА ПЕРЕД СТАРТОМ (НЕ начинай прогон без этого — спроси)
1. **Вебхук-секрет** (`system_settings.supplier_webhook_secret`) — для инъекций R2.
2. **Тест-IP в allowlist** ИЛИ подтверждение «инъекция с самого прод-сервера» (`ssh liderra-prod 'curl … 127.0.0.1 …'`). На проде пустой allowlist = fail-closed (404).
3. **Живой ящик, которым владелец управляет** — для писем онбординга/дайджеста/заморозки.
4. **Готовность владельца решать капчу** для онбординг-карточек (см. §5) и подтверждение окна/«прод спит»/дедлайн 21:00 по поставщику.
5. **Пароли** для входа (если понадобятся под конкретные сценарии).
---
## §4. ЧТО ПРОЧИТАТЬ — строгий порядок (не пропускай)
1. **МАСТЕР:** `docs/superpowers/specs/2026-06-20-acceptance-MASTER-execution-handoff.md` (точка входа, маршрут, формат отчёта).
2. **Логика прода:** `docs/superpowers/specs/2026-06-18-prod-logic-map.md` §0–§21 (без неё не понять, что проверяешь).
3. **Хартия:** `docs/superpowers/specs/2026-06-18-acceptance-test-charter.md`.
4. **R0** (доступ/безопасность/формат карточки): `docs/superpowers/runbooks/2026-06-18-acceptance-r0-start-access-safety.md`.
5. **Ранбуки R1→R5 + R3b** по порядку (исполняемая форма) — `docs/superpowers/runbooks/2026-06-18-acceptance-r{1,2,3,3b,4,5}-*.md`. У каждого есть **Часть F «Расширенный охват»** (Раздел B) — гнать тоже.
6. **Реестр находок + расширение охвата:** `docs/superpowers/specs/2026-06-20-acceptance-findings-register.md`, `2026-06-21-acceptance-coverage-expansion-NEW.md`, `2026-06-21-acceptance-prep-review.md`.
7. **26 пер-пунктовых планов:** `docs/superpowers/plans/2026-06-20-acceptance-*` — детальные `было→ожидали→стало` + код-факты file:line.
> Перед открытым codebase-вопросом — сначала `/graphify query`, потом Read/Grep (правило CLAUDE.md §5 п.14).
---
## §5. ПОШАГОВЫЙ ПОРЯДОК — делай ровно так
**Шаг 0. Подними «эфир» для владельца** (живой показ): `live-demo/``php -S 0.0.0.0:8899``efir.html`. Карточки в `live-demo/steps/NNNN.json` (формат — `2026-06-20-acceptance-efir-handoff.md`).
**Шаг 1. R1 — провижининг** (`…r1-provisioning.md`): завести **7 тест-клиентов `TEST-C1..C7` / 16 проектов / 12 rt**.
- Тенанты — SQL-INSERT (sudo postgres) с маркером `TEST-` в `organization_name`+`subdomain`, bcrypt-пароль, `is_active=true`. **`imitation:seed` на проде ЗАПРЕЩЁН.**
- ⚠️ **R1 предусловие (гейт реквизитов):** SQL-засев даёт тенанта **без** реквизитов → создание проекта вернёт 422 `requisites_required`. Перед заведением проектов заполни лёгкие реквизиты (subject_type+contact_name+contact_phone, +ИНН для ЮЛ/ИП), и баланс ≥ Σ(лимиты)×тариф (иначе 409).
- Проекты — **через ПОРТАЛ** (иначе нет синка к поставщику и rt не появятся).
- Собери **парный teardown-скрипт** (список id) сразу.
**Шаг 2. R2 — инъекционный стенд** (`…r2-injection-stand.md`): слепок (`snapshot:backfill --date=<активная>` — НЕ `rebuild` вслепую, N-5) → `POST /api/webhook/supplier/<СЕКРЕТ>` с **`vid` из TEST-диапазона**. Проверь HMAC-путь (I8) и `phones[]` (I9).
**Шаг 3. R3 — движок** (`…r3-engine.md`): пункты №1–№16 карточками (распределение/деньги/сделки/изоляция) + **Часть E all-pairs (27)** + **Часть F** (CsvReconcile, вечерняя заморозка, терминальные пути, T7, bulk-изоляция и т.д.).
- ⚠️ **Регионы — порядковые 1..89, НЕ ГИБДД:** Москва=82, СПб=83, **Татарстан=19** (НЕ 16 — 16 это Мордовия!), Москобл=56.
- Инварианты, не точный состав (жребий в проде случайный).
**Шаг 4. R3b — онбординг/UI/G6/G7** (`…r3b-onboarding-digest.md`): №18–№26 + **Часть F** (отчёты-цикл, импорт-правила, G6 API, G7 поддержка/impersonation).
- 🔑 **ОНБОРДИНГ ЧЕРЕЗ РЕАЛЬНУЮ КАПЧУ:** капчу решает **владелец вручную** — либо (а) владелец сам регистрируется в своём браузере и ты продолжаешь под аккаунтом, либо (б) ты ведёшь Playwright, на капче ставишь паузу, владелец решает в видимом окне, ты жмёшь «отправить». Код придёт **письмом** на ящик владельца. Так проверяются ONB-REG/ONB-CODE/ONB-CAPTCHA (хотя бы 1 раз вживую); остальную популяцию — SQL (R1).
**Шаг 5. R4 — нагрузка** (`…r4-load-capacity.md`): адаптивный ramp до SAFETY-стопа (2 ГБ, омега спит рядом — не уронить).
**Шаг 6. R5 — финал/teardown/вердикт** (`…r5-finalize-teardown.md`):
- Сверки: F1 Σ-деньги по копейкам, F2 изоляция 0 утечек, F3 `audit:verify-chains` зелёный, F4 маржа.
- **TD1 убрать тест rt-проекты у поставщика ДО 21:00.** TD2–TD5 — слепки → тест-тенанты (trigger-bypass под postgres) → Redis → проверка чистоты.
- ⚠️ **Teardown тест-тенантов:** опознавай их по `organization_name`/`subdomain LIKE 'TEST-%'` (НЕ `name`). Удаляй строго `WHERE tenant_id IN (<TEST-id>)`, **никогда не 2**. Скрипт TD3 уже исправлен (N-1: `supplier_lead_costs` через `deal_id`; строка `reminders` убрана). orphan-таблицы (supplier_leads/log/webhook/failed) — по TEST-`vid`-диапазону (N-2). **auth_log не трогать** (N-3).
- **Итог: вердикт GO / NO-GO** (формат R5).
---
## §6. АНТИ-ОШИБКА — проверка перед КАЖДОЙ мутацией прода (ритуал)
Прежде чем выполнить любой `DELETE/UPDATE/INSERT` или мутирующий `ssh`:
1. **Назови вслух (в ответе) tenant-id, которые затрагиваешь.** Если среди них **2** — СТОП, ты ошибся.
2. **WHERE обязан фильтровать по `tenant_id IN (<твои TEST-id>)`** (или `<> 2`). Без явного фильтра — не выполнять.
3. **Перед teardown — `pg_dump`.** После teardown — **проверь омегу:** `SELECT balance_rub, (SELECT count(*) FROM deals WHERE tenant_id=2) FROM tenants WHERE id=2` → должно остаться **1835400.00 / 1013** (если изменилось — ты задел омегу, СТОП, откат из дампа).
4. **Не обходи стену/гейты обходными путями.** Упёрся — спроси владельца (CLAUDE.md §5 п.7).
5. **«Готово» — только если правда проверил** реальной командой/БД, не «по памяти».
---
## §7. ВЕРДИКТ (формат R5)
- **GO** — деньги сходятся копейка-в-копейку (F1), изоляция 0 утечек (F2), аудит зелёный (F3), ядро (раздача→списание→сделка→изоляция) проходит сквозь, критдефектов нет. UX-косяки GO не блокируют (список владельцу).
- **NO-GO** — любой критдефект денег/изоляции/чужих данных.
Итоговый отчёт — по пунктам PASS/FAIL/SKIP + находки + ёмкость + вердикт. Положи в `docs/superpowers/specs/2026-06-21-acceptance-RUN-report.md`. Коммит — спросить владельца.
---
## §8. СТАРТ ПРЯМО СЕЙЧАС
1. Прочитай §4 (мастер → map → хартия → R0).
2. Спроси у владельца §3 (секрет, IP, ящик, готовность решать капчу, окно).
3. Подними эфир (Шаг 0).
4. Иди R1 → R2 → R3(+E,+F) → R3b(+F) → R4 → R5. На каждом пункте — карточка + сверка БД + (если видно на экране) живой скриншот Playwright против `https://liderra.ru`.
5. Перед любой мутацией — ритуал §6. Критдефект → СТОП + владельцу. Teardown ДО 21:00. Финал → вердикт.
**Не уверен — спроси. Не выдумывай — открой и проверь. Омегу (tenant 2) — не трогай.**