# Приёмка liderra.ru — раунд 2 ЗАКРЫТ + хэндофф следующей сессии

**Дата:** 21.06.2026. **Кодовая фраза стены:** «роутер-наставник».
**Эта сессия:** разобрала находки двух независимых ревью (`acceptance-prep-review.md` + `acceptance-coverage-expansion-NEW.md`) — всё локально-исполнимое закрыто по TDD/сверке кода. Прод НЕ трогался, **не пушено** (только локальные коммиты на `main`).

---

## ✅ Что сделано (7 коммитов раунда 2, все хуки зелёные)

| Коммит | Что |
|---|---|
| `862243a2` | **F-CSV-wide** — нейтрализация формул в `CsvFormatter`/`XlsxFormatter` (все отчёты); провайдерная откачена (портила JSON). TDD |
| `c1d61068` | F-REMIND хвост — «Напоминания» из коммента AppLayout |
| `7be1c93e` | Планы: GAP-1 Татарстан 16→19, капча-M-2, lpimp 401/403, N-6 воронка, №23-tx, append-only |
| `e0fb6e46` | Runbooks: **N-1 (CRITICAL teardown)**, N-2/N-3/N-8 (R5), N-5 (R2), N-7 (R1) |
| `60397159` | cover-freeze §20.2 — шаг 9-4 (вечерняя заморозка) |
| `0e62d0a8` | Статусы раунда-2 + реестр + `owner-decisions.md` |
| `825b02cf` | **N-4** дайджест-дубль — Redis SETNX идемпотентность (TDD, без схемы) |

Качество: deptrac=0, Pint/Larastan(level 5)/composer stan=0, eslint/stylelint чисты, профильные Pest зелёные. При сверке нашёл **2 ошибки ревьюеров** (F4 `price_kopecks`→`price_per_lead_kopecks`; PR2 `[16]`=Мордовия).

---

## ⏳ ЧТО ОСТАЛОСЬ — стартовать ОТСЮДА (всё требует решения владельца)

Полный разбор с вариантами — [2026-06-21-acceptance-owner-decisions.md](2026-06-21-acceptance-owner-decisions.md). Кратко:

1. ✅ **M-1 / F-T2 — СДЕЛАНО (проверено по проду 22.06.2026):** на боевом app-слойный fail-closed гейт активен — `Route::middleware('saas-admin')` на `/api/admin/*` + `app.env=production` + `admin.basic_auth_gate=true` (REMOTE_USER allowlist, закрывает обходы front-controller'а). ~~(было: fail-open, держит только nginx)~~
2. ✅ **M-2 — СДЕЛАНО (проверено по проду 22.06.2026):** на боевом `CAPTCHA_DRIVER=yandex` → `YandexSmartCaptchaVerifier` (реальная серверная валидация у Yandex), серверный ключ в прод-`.env` задан, фронт-виджет в сборке `RegisterView-*.js`. Капча включена и работает. ~~(было: NullCaptchaVerifier безусловно)~~
3. ✅ **apiv1-rate — СДЕЛАНО (проверено по проду 23.06.2026):** `throttle:api-v1` (120/мин/источник) ПЕРЕД `apikey` на `/api/v1/deals` (коммит `255680cf`, лимитер в `AppServiceProvider`). На боевом — в `routes/web.php`. ~~(было: без rate-limit)~~
4. ✅ **tenants-RLS + created_at TZ — СДЕЛАНО 22.06** (одна миграция `2026_06_22_150000`, schema v8.51, gitea `60c640e8`): RLS на `tenants` + политика `tenants_self_isolation`; `project_routing_snapshots.created_at` → TIMESTAMPTZ. rls-reviewer OK, метадата-тест GREEN. ⚠️ TZ-ALTER блокирует партиции при накате — окно низкой нагрузки. **На прод не выкачено.**
5. ✅ **#21 — СДЕЛАНО:** schema.sql на v8.51, reminders задокументирован как снятый (G3 v8.45), карта разделов — канон-файл; техдолг линтеров `db/` вычищен (коммиты схемы идут без `LEFTHOOK=0`). Подтверждено в `2026-06-22-СОСТОЯНИЕ-остатки-и-ключи.md`. ~~(было: правка ждала терминала владельца из-за squawk/markdownlint долга)~~
6. ✅ **Раздел B — ЗАКРЫТО:** «~25 путей» — переоценка, большинство уже покрыто; реальные гапы закрыты **+9 целевыми TDD-тестами** (коммиты `b9184a6a`, `d7b5f2c1`): received_at-инвариант при merge, reminder dead-zone, terminal-пути оркестратора, G6 edges. Не остаток.
7. ⏸ **Прод-прогон** (не локально): F-PDF (мягкий failed доказан статически), F1/F2/F4/F5 (осмотр 17.06). Закрываются на живом боевом по [МАСТЕР-хэндоффу](2026-06-20-acceptance-MASTER-execution-handoff.md).

---

## ⚙️ Контекст для исполнителя

- **Стена снята** на приёмке (проверь `node --version`); работай свободно, но: правка `.php` → ОБЯЗАТЕЛЬНО тесты после; хуки не обходить `--no-verify` без слова владельца; коммит — спрашивать/собирать в конце.
- **db/-файлы (schema.sql, CHANGELOG_schema) коммитить через терминал владельца** — Claude-хук валит на pre-existing squawk/markdownlint долге.
- **`docs/observer/STATUS.md` + `.pii-counters.json`** авто-регенерит post-commit хук — расстейджить перед каждым своим коммитом (`git restore --staged`).
- **Не моё, не трогать:** `settings.json`, `CLAUDE.md`, `router-mentor-wall-GUIDE.md`, `ImitationSeedCommand.php` — чужие незакоммиченные правки параллельных сессий.
- **Параллельные сессии активны** (автор «Дмитрий» коммитит локально — напр. `c80c1199`). Перед работой — `git log` и `git status`.
- **Локалка байт-в-байт с боевым** (`01a9029c`, G1-G7). Тесты функционала — только на проде.
- **Не пушено** — спросить владельца про push в gitea (github origin suspended 403).

## 🚀 С чего начать новой сессии
1. Прочитать этот файл + [owner-decisions.md](2026-06-21-acceptance-owner-decisions.md).
2. Спросить владельца приоритет: M-1 (вариант?), M-2, apiv1-rate (лимит?), #21 (его терминал), или Раздел B (объём?). ✅ Обновление 22.06: M-1/M-2/apiv1-rate/#21/Раздел B — все закрыты (см. выше); открытых из этого списка нет.
3. Взять выбранное по TDD; коммитить по группам с расстейджем observer-файлов.
