# План тестов петли (до и после боевого запуска)

Цель: до траты бюджета убедиться, что каждый стык петли живой — click-id
ловится, события доходят, аудитории наполняются, конверсии видны в сетях.
Все факты о сетях — из аудита; «проверить в кабинете» = в аудите не
документировано.

## Этап 0 — стенд без сетей (dry-run, до регистрации аккаунтов)

1. `/pb/health` → `kv_bound: true`, `test_mode: true`.
2. Тест-консоль: `collect` с `uid=mm-test-01`, `click_id=test-click-001`
   → `{ok:true}`; повторный collect с другим полем — merge, не перезапись.
3. `kadam` с `uid=mm-test-01`, event=reg, dry → в ответе target
   `https://kdtrk.net/ru/postback/?data=test-click-001`.
4. `exo` с `uid=mm-test-01`, event=dep, `value=50`, dry → target
   `…tag.php?goal=GOAL_ID_DEP&tag=test-click-001&value=50` (плейсхолдер цели
   допустим в dry).
5. Валидации: exo `tag` длиной 701 символ → 400; `event=foo` → 400;
   `uid` без сохранённого клика → 400 с подсказкой про /pb/collect.
6. `/pb/log` → все прогоны видны с пометкой dry (возможна задержка KV).
7. GTM: импорт `gtm-blueprint.json` в тестовый контейнер, Preview на тестовой
   странице с `?mm_kdm=test1&mm_exo=test2`: magicpix пушит `mm_ready`,
   в KV появляется `click:<uid>`; событие `dataLayer.push({event:'reg'})`
   зажигает тег цели Exo (заглушки ID). S2S-форвардер оставить на паузе.

## Этап 1 — тестовые события с боевыми ID (аккаунты есть, кампаний нет)

1. Подставить GOAL_ID Exo в теги и vars, код пикселя Kadam — в тег; Publish.
2. Kadam: реальный `{click_id}` даёт только клик по объявлению кампании
   (макрос подставляется в URL лендинга) — без кампании его не получить.
   (а) До кампании: проверяем только dry-run постбэка и наполнение
   pixel-аудитории визитами лендинга (кабинет Audiences).
   (б) После запуска тестовой кампании с минимальным бюджетом (этап 4 или
   ранний мини-запуск — по решению): взять click_id из клика и выполнить
   боевой `/pb/kadam?event=reg&click_id=<реальный>&dry=0`.
   Разделение reg/dep в S2S-аудиториях — проверить в кабинете.
3. Exo: пиксельные цели должны регистрировать срабатывания на тестовой
   странице (статистика цели в кабинете). S2S без клика по рекламе Exo не
   атрибутируется (по аудиту) — «OK» на тестовый tag возможен, но конверсия
   может не засчитаться: это ожидаемо, фиксируем поведение в кабинете.
4. TEST_MODE=0, повторить reg/dep: `/pb/log` — `attempts:1`, Exo `body:"OK"`.

## Этап 2 — попадание в аудитории

- **Kadam (Type 1):** кабинет Audiences: pixel-аудитория растёт от визитов
  лендинга; S2S-аудитория пополняется от постбэков (тип S2S подтверждён
  аудитом; порог/задержка наполнения — проверить в кабинете).
- **ExoClick (Type 2):** после рекомендованных ~3 дней накопления включаем
  цель LP как Positive в Behavioral Retargeting; цели reg/dep показывают
  конверсии в статистике. Раньше 3 дней ретаргетинг не включать
  (рекомендация доков, не гейт кабинета).

## Этап 3 — верификация конверсий

- **Kadam:** `POST /stats/conversions` (partners.kadam.net/api/v1,
  Bearer-токен из «Profile and settings») — событийная выгрузка; сверить наши
  click_id из `/pb/log` с конверсиями в ответе.
- **ExoClick:** статистика Conversion Goal в кабинете (или API v2); окно
  конверсии 12 ч – 90 дней; помнить — атрибуция только кликам по рекламе Exo.

## Этап 4 — петля целиком (после запуска кампаний)

1. Kadam: кампания Targeting → Retargeting на пилотную аудиторию; конверсии
   возврата видны и в кабинете, и через /stats/conversions.
2. Exo: кампания Positive(LP) + Negative(dep); проверить, что задепозитивший
   тест-пользователь перестаёт видеть рекламу (саппрешен).
3. Дедупликация Exo: на боевых целях reg/dep оставить ОДИН канал — пиксель
   ИЛИ S2S (в обкатке сравнить оба и выбрать по качеству данных).
4. Лог приёмника чистый: ретраи единичны, 502 нет; click-id в логе матчатся
   со статистикой сетей.

## Выход из пилота

Все четыре критерия успеха с дашборда выполнены → фиксируем итоги (скрины
кабинетов, выгрузка /stats/conversions, экспорт чек-листа JSON) и готовим
решение по боевым бюджетам и запасным сетям (PropellerAds T1, MGID T2).
