# Спека: починка CsvWebhookRaceTest — недостающий routing-snapshot

## Цель

Три теста `CsvWebhookRaceTest` падают («Deal не создан»), потому что их setup не
создаёт routing-snapshot, который требует текущая маршрутизация. Это устаревший
setup теста, не баг продукта. Добавить создание снимка в `beforeEach`, чтобы
`RouteSupplierLeadJob` находил eligible-проект и создавал сделку.

## Root cause {#D1}

`LeadRouter` определяет eligibility структурно через `project_routing_snapshots`
за активную дату слепка (slepok-инвариант, Task 2.5/2.9): запрос
`FROM project_routing_snapshots snap WHERE snap.snapshot_date = ?`. Из live
`projects` берётся только `delivered_today`. `CsvWebhookRaceTest.beforeEach`
создаёт живой `Project` (is_active, daily_limit), но НЕ создаёт строку снимка →
`LeadRouter` не находит eligible-проект → `RouteSupplierLeadJob` не создаёт `Deal`.
На проде снимок создаёт cron `SnapshotProjectRoutingJob` — обработка лидов цела.
Проходящий supplier-тест с `Bus::fake()` не запускает джоб, поэтому маршрутизацию
не задевает; рабочие тесты (`RouteSupplierLeadJobBillingTest` и др.) снимок создают.

## Фикс {#D2}

В `beforeEach` после `linkProjectToSupplier($this->project, $this->sp);` добавить
вызов хелпера (как в рабочих supplier-тестах):

```php
createRoutingSnapshotFromProject($this->project, null, 'site', 'race-csv.ru', 100);
```

Параметры зеркалят проект: `signal_type='site'`, `signal_identifier='race-csv.ru'`,
`daily_limit=100`. Дата `null` = сегодня (активный слепок на момент прогона). Меняется
только тест-setup; код продукта и другие тесты не трогаются.

## Критерий приёмки {#D3}

`php artisan test tests/Feature/Supplier/CsvWebhookRaceTest.php` — все тесты файла
зелёные (3 ранее падавших на «Deal не создан» проходят: сделка создаётся, merge/
no-double-charge логика отрабатывает).

```verified-context-json
[
  {
    "id": "ctx-link",
    "kind": "EXTRACTED",
    "ref": "app/tests/Feature/Supplier/CsvWebhookRaceTest.php",
    "anchor": "linkProjectToSupplier($this->project, $this->sp);"
  },
  {
    "id": "ctx-router",
    "kind": "EXTRACTED",
    "ref": "app/app/Services/LeadRouter.php",
    "anchor": "FROM project_routing_snapshots snap"
  }
]
```

## Переговоры

### Круг 1

Открытая точка для наставника: фикс меняет ТОЛЬКО setup теста (добавляет снимок),
а не код продукта — корректно, т.к. root cause = устаревший setup относительно
snapshot-based маршрутизации, а не дефект. Прошу наставника зафиксировать
forward-рекомендацию: подтвердить, что правка теста (а не кода) здесь уместна.
