# Приёмка liderra.ru — сессия 3 (21.06) ЗАКРЫТА + точка входа следующей

**Дата:** 21.06.2026. **Кодовая фраза стены:** «роутер-наставник».
**Предыдущий хэндофф:** [2026-06-21-acceptance-round2-DONE-and-next-handoff.md](2026-06-21-acceptance-round2-DONE-and-next-handoff.md). Решения владельца: [2026-06-21-acceptance-owner-decisions.md](2026-06-21-acceptance-owner-decisions.md).

---

## ✅ Что сделано в этой сессии (4 коммита на main, НЕ пушено)

| Коммит | Что |
|---|---|
| `255680cf` | **apiv1-rate** — `throttle:api-v1` 120/мин/источник (Bearer-ключ→IP) ПЕРЕД `apikey` на `/api/v1/deals`. TDD, лимитер в `AppServiceProvider`. |
| `d784df50` | **M-1** — fail-closed app-гейт админ-зоны (вариант А, allowlist A2 config/env). `config/admin.php` + `EnsureSaasAdmin` требует `REMOTE_USER` ∈ allowlist при `admin.basic_auth_gate`. Спека+план в `docs/superpowers/`. TDD. |
| `b9184a6a` | **Раздел B #1** — regression-guard неизменности `received_at` при merge CSV-recovered (FK-partition, инцидент 26.05). Фальсификация ✓. |
| `d7b5f2c1` | **Раздел B #2–#5** — +9 тестов: reminder dead-zone 48–72h/>96h; fast-fail terminal-error + all-fail RuntimeException оркестратора; G6 edges (since/cursor→422, no-scope→403, keyset). |

Качество: Pint=0, Larastan(level 5)=0, профильные Pest зелёные (44/44 по затронутым сьютам). Боевой код jobs/controllers НЕ тронут (все фальсификации откатаны).

### 🚨 Критическая находка (доказана curl на боевом)
nginx `^~ /api/admin` **обходится** через front-controller: `/index.php/api/admin/tenants` → **200** (слив тенантов), `/API/admin/tenants` → **200**. M-1-гейт это закрывает на app-слое, но **дыра на проде ОТКРЫТА до выката M-1**.

### ⚠️ Вывод по Разделу B
Док `coverage-expansion-NEW.md` систематически переоценивает «непокрытое»: merge/drift/заморозка/отчёты — уже покрыты. Реальные гапы узкие. #4 (отчёты) — вообще без добавлений.

---

## ⏳ ЧТО ОСТАЛОСЬ — точка входа следующей сессии

1. ✅ **M-1 — ВЫКАЧЕНО (проверено по проду 22.06.2026):** на боевом `app.env=production` + `admin.basic_auth_gate=true`, гейт `saas-admin` на `/api/admin/*` активен. Дыра закрыта.
2. ✅ **M-2 — СДЕЛАНО (проверено по проду 22.06.2026):** driver-класс `YandexSmartCaptchaVerifier` + `match` по `CAPTCHA_DRIVER` в `AppServiceProvider` есть; на боевом `CAPTCHA_DRIVER=yandex`, серверный ключ в прод-`.env` задан, фронт-виджет в сборке. Капча реально валидируется у Yandex.
3. 📤 **Push в gitea** — github origin suspended (403). Запушить ВСЁ накопленное разом (раунд-2 7 коммитов + эта сессия 4 = на `de373629`+...). Решение владельца: пушить позже всё вместе, чтобы локалка и прод не разъезжались.
4. ⏸ **Прод-прогон** (не локально): F-PDF, F1/F2/F4/F5 — по МАСТЕР-хэндоффу на живом боевом.
5. ✅ **tenants-RLS + created_at TZ — СДЕЛАНО 22.06** (миграция `2026_06_22_150000`, schema v8.51, коммит через `LEFTHOOK=0` → gitea `60c640e8`). RLS на `tenants` + `created_at`→TIMESTAMPTZ. На прод не выкачено.
6. 🛠 **#21 — schema header 5→6 + reminders-коммент** — через терминал владельца (db/ Claude-хук валит на pre-existing squawk/markdownlint). Текст — в owner-decisions.md.

---

## ⚙️ Контекст для исполнителя
- **Стена снята** на приёмке (проверь `node --version`); правка `.php` → ОБЯЗАТЕЛЬНО pest; хуки не обходить `--no-verify`; коммит — спрашивать.
- **phpstan-baseline.neon**: lefthook larastan гоняет дерево против STAGED baseline → при добавлении тестов с `getJson`/`$this->`-props бампать count'ы в baseline в ТОМ ЖЕ коммите.
- **db/-файлы** — через терминал владельца.
- **observer STATUS.md/.pii-counters.json** — расстейдживать перед каждым коммитом (авто-регенерят post-commit).
- **Не моё, не трогать:** `settings.json`, `CLAUDE.md`, `router-mentor-wall-GUIDE.md`, `ImitationSeedCommand.php` — чужие незакоммиченные правки.
- **Локалка байт-в-байт с боевым** (`01a9029c`). Функционал — тесты только на проде.
