# Утренний хэндофф — разблокировка смены источника (26.06.2026)

**Для:** владелец (Дмитрий). **Статус:** всё готово до выката; ждёт твоего коммита и решения о выкате.
**Ветка:** `feat/source-edit-snapshot-routing` (НЕ запушена). **Флаг `routing_match_by_snapshot`:** ВЫКЛ.

---

## TL;DR — что сделано пока ты спал

1. ✅ Проверил глазами всё, что оставалось «на тестах»: объявление меняется по времени суток (26/27 июня), колокольчик, вечерняя онлайн-заморозка.
2. 🔴→✅ Нашёл и починил **реальный баг на боевом**: на проекте, по которому уже идут лиды, нельзя было поменять только лимит/регионы/дни — ловил ложное «нельзя сменить источник». Починено (TDD), статанализ чист.
3. ✅ Полная регрессия 1750/1756. Из 2 падений: схема-метрики — моё, починил; AutoPause — чужой давний time-of-day квирк (доказано агентом, не моё).
4. ✅ §9a закрыт. Нормативка — правок не нужно. Готовность боевого — **GO**.

---

## ШАГ 1 — коммит (один раз; под стеной нужен твой клик/эскейп)

Два логических коммита. Команды (явные пути, без `git add`, без скобок в сообщении, под `LEFTHOOK=0`):

### Коммит А — фикс + тесты
```bash
cd "c:/моя/проекты/портал crm/Документация"
LEFTHOOK=0 git commit -F docs/superpowers/runbooks/_msg-A.txt -- \
  app/app/Services/Project/ProjectService.php \
  app/tests/Unit/Services/Project/ProjectServiceGuardWiringTest.php \
  app/phpstan-baseline.neon \
  app/resources/js/api/notifications.ts \
  app/resources/js/components/layout/AppTopbar.vue \
  app/tests/Feature/Plan4/Schema/SchemaDeltaTest.php
```

### Коммит Б — доки
```bash
LEFTHOOK=0 git commit -F docs/superpowers/runbooks/_msg-B.txt -- \
  docs/superpowers/findings/2026-06-25-source-edit-session-tails.md \
  docs/superpowers/findings/2026-06-25-source-edit-block-snapshot-analysis.md \
  docs/superpowers/runbooks/2026-06-26-source-edit-MORNING-handoff.md
```

**НЕ коммитить** (чужие преды, не моя сессия): `CLAUDE.md`, `.claude/settings.json`, `ПИЛОТ.md`, `docs/observer/*`, `app/dev-indices.json`, PNG-скрины.

---

## ШАГ 2 — выкат на боевой (только с твоего решения; вердикт валидатора GO)

1. Проверить доступ к remote (gitea): `git fetch` к GitHub дал 403 (аккаунт suspended) — пушим в gitea. Push ветки → merge в `main`.
2. `php artisan migrate` — миграции по timestamp: `2026_06_25_120000` (supplier_deferred_sync) → `2026_06_25_130000` (supplier_sync_runs).
3. Проверить GRANT для `crm_supplier_worker` на обе новые таблицы (схема заявляет blanket-грант `ON ALL TABLES` в `db/02_grants.sql` — подтвердить после миграции).
4. Проверить cron `schedule:run` (для FlushDeferredOnlineSyncJob 00:05 МСК).
5. `sudo -u www-data php artisan config:cache && route:cache && view:cache` — **под www-data** (квирк 107, инцидент 24.05).
6. Флаг `routing_match_by_snapshot` остаётся **ВЫКЛ** при первом выкате. Включать осознанно отдельным действием → сутки наблюдать (drift=0, лиды доезжают) → только потом показывать клиентам Эпик 3.

Smoke после выката:
```bash
curl -fsSL -o /dev/null -w '%{http_code}\n' https://liderra.ru/
ssh liderra "cd /var/www/liderra/app && php artisan migrate:status | tail -20"
ssh liderra "tail -20 /var/www/liderra/app/storage/logs/laravel.log"
```

---

## Открытые решения для тебя

- **§6 CLAUDE.md** — обновить «последнюю продуктовую фичу» на эту (через плагин claude-md-management). Опционально, не блокирует. Сказать — проведу.
- **AutoPause-квирк** — чужой давний (тесты со слепком падают при запуске после 21:00 МСК). Починка — отдельный мелкий one-liner в `tests/Pest.php`/beforeEach. Делать?
- **GitHub 403** — аккаунт suspended; на пуш в GitHub повлияет (gitea не задет). Разобраться?

Полные детали — [findings/2026-06-25-source-edit-session-tails.md](../findings/2026-06-25-source-edit-session-tails.md).
