# HANDOFF — Поиск всех хвостов Лидерра, сессия 2 (закрытие + переезд)

**Дата:** 15.06.2026. **Читать ПЕРВЫМ при возобновлении.** Кодовая фраза стены — «роутер-наставник».
Предшественник: `2026-06-15-tails-audit-handoff.md` (сессия 1, Этапы 0/1/3). Этот файл — продолжение.

## Состояние охоты

5-этапный план поиска хвостов: **Этапы 0, 1, 2, 3 — ЗАКРЫТЫ.** Этап 2 (технический аудит)
выполнен этой сессией через скил `audit-portal` под церемонией стены. Осталось — **условный
Этап 2б (доменные аудиты)** + добор заблокированных углов + действия по найденным хвостам.

## Артефакты Этапа 2 (читать для деталей)

- `docs/superpowers/audits/2026-06-15-portal-tech-audit-findings.md` — сводка находок F-1…F-6.
- `docs/superpowers/audits/2026-06-15-portal-tech-audit-backend-addendum.md` — backend-вердикт (не добран).
- `docs/superpowers/specs/2026-06-15-portal-ops-risk-and-worktree-decisions.md` — Git-риск + worktree
  (NB: в нём imitation помечен «parked» — **устарело, актуально: finish 100%**, см. ниже).

## Найденные хвосты Этапа 2

- **F-1 (P1, security)** — 14 CVE на 9 пакетах: `laravel/framework 13.8` (CRLF email CVE-2026-48019),
  `guzzlehttp/psr7 2.9`, `symfony/yaml 7.4.10`, `symfony/http-foundation 7.4.8`. → `composer update`.
- **F-2 (P1)** — 2 упавших a11y-теста Vitest (`TenantsFilters.spec.ts`, `TenantsStatsHeader.spec.ts`),
  оба **untracked** → недоделанная a11y-реализация страницы Tenants (тесты есть, кода нет).
- **F-3 (P2)** — Pint 19 файлов / Prettier 68 / vue-tsc 3 (коммиты шли мимо хуков). Авто-фикс.
- **F-4 (P2)** — Larastan 200 ошибок, видимый паттерн = дрейф baseline / config-dir (нужна сверка, не 200 багов).
- **F-5 (P3)** — markdownlint 1443 / cspell jargon / eslint 7 warn.
- **F-6 (не инцидент)** — gitleaks «1 leak» = тест-фикстура в удалённой истории, не секрет.
- Чисто: squawk 0, схема dev без дрейфа, schedule 16 задач здоров.

## P1-РИСК (крупнейший хвост сессии, не было в хендоффе 1)

**GitHub-аккаунт `CoralMinister` заблокирован (403 «account suspended»):** `git fetch`/`git push`
невозможны. Локальный `main` разошёлся с origin/main (**345 локальных коммитов не запушены / 57
на origin не локально**). 345 коммитов работы (мозг/роутер-гейт/охота) — **только на этой машине,
без бэкапа.** Решение владельца: **искать альтернативу GitHub** (резервный remote — Gitea/GitLab/
второй хостинг) хотя бы для бэкапа; параллельно выяснять причину suspend. Свести 345/57 — отдельная
аккуратная задача при восстановлении доступа.

## Решения по worktree

- **wt-a11y-fullpg (`944a85dc`)** — **ОТЛОЖЕНО** до разблокировки аккаунта. Коммит цел на origin как
  ветка `fix/from-scratch-migrate-a11y-full` (1 коммит над origin/main, гарды миграций + полный
  Pa11y 21 маршрут). Чистый путь — merge PR на GitHub после восстановления (обходит диверг 345/57).
  Локальный cherry-pick НЕ делать (грязное дерево + диверг + всё равно не запушить).
- **prod-imitation-clients** — **ЗАКОНЧИТЬ 100%** (решение владельца; НЕ parked). Это QA-стенд
  «репетиция портала глазами клиента» (проверка регион-фичи + биллинга + роутинга на копии до
  Фазы 2). Сделано ~5/16 (заготовки: FakeDaData / LeadInjector / ImitationTestCase). Осталось
  Tasks 3-15 (план `.claude/worktrees/prod-imitation-clients/docs/superpowers/plans/2026-06-03-portal-client-imitation-phase1.md`).
  **Первый шаг возобновления:** починить правки боевой миграции `0001_load_initial_schema.php` из
  `7c5ca7f6` (отключённая транзакция + глушащий `catch(\Throwable){}`) — взять безопасный точечный
  подход идемпотентности из `944a85dc`. Крупный эпик, отдельной сессией, через субагентов; результат
  коммитим локально, push — когда будет альтернатива GitHub.

## Что осталось в охоте

**Этап 2б — доменные аудиты (НЕ запускались, последний неотработанный пласт).** Сканеры ловят
техдолг, но не доменные дыры; портал крутит деньги + ПДн (телефоны) + готовится в интернет:
- **threat-model** — карта атак перед публикацией (в мае уже находил `/api/managers` без авторизации
  + SSRF `/api/webhooks/test` — проверить, закрыто ли).
- **pdn-152fz-audit** — утечки ПДн (телефоны в логах/Sentry/CSV), маскирование, 152-ФЗ.
- **billing-audit** — денежная корректность (копейки, идемпотентность списаний, тарифные ступени, дрейф CsvReconcile).

**Заблокированные углы (недобор, не доменная охота):**
- backend-вердикт Pest — память воркеров php.ini (`memory_limit=2048M` в php.ini ИЛИ
  `cd app && php -d memory_limit=2G artisan test`), лучше в терминале владельца без таймаута.
- схема-deep (Boost MCP) + UI-smoke 24 маршрута (Playwright MCP + поднятый сервер) — maintenance/сервер.

## Действия по найденным хвостам (не охота, ждут владельца)

F-1 `composer update` · F-2 доделать a11y Tenants или удалить тесты · F-3 `composer pint`+`npm run format`
· F-4 сверить Larastan baseline · Git-альтернатива (P1) · a11y-мерж (после аккаунта) · imitation finish 100%.

## Обновление 15.06.2026 (сессия: бэкап-канал + доступ к проду + сравнение)

**Сделано:**
- ✅ **Бэкап-канал / Git-альтернатива (P1) — закрыт.** Поднят свой **Gitea** в Yandex Cloud:
  https://111.88.252.149.nip.io (репо `liderra/portal`: 104 ветки, 2 тега, 2482 коммита) + полный
  `git bundle` на VM. Работа теперь в 3 местах. Детали — `docs/ops/gitea/2026-06-15-gitea-backup-server-actual.md`.
- ✅ **Доступ к боевому серверу — восстановлен.** `ssh liderra-prod '<команда>'` через бастион
  gitea-VM (внутренняя сеть, обходит фильтр dev-IP; GitHub Actions больше не нужен). Это
  **разблокирует «заблокированные углы»** охоты: backend-вердикт Pest, схема-deep, UI-smoke — теперь
  достижимы прямо с dev-машины через `liderra-prod`.

**Новый хвост (сравнение прод↔локалка, снимок `docs/superpowers/audits/2026-06-15-prod-vs-local-snapshot.md`):**
- ⚠️ **Рассинхрон `main` ↔ прод по фиче lead-region.** Прод впереди `main` на одну миграцию
  `2026_05_31_100000_create_phone_ranges_and_resolution_log` (фича «регион по телефону», живая на
  проде). Код фичи — в ветках `worktree-feat+lead-region-resolution` / `worktree-lead-region-tails`
  (в бэкапе), **в `main` не влит**. **Деплой текущего `main` снёс бы lead-region** → нельзя.
  Нужно: влить ветку в `main` + регрессия, потом `main` деплоебелен. Отдельная задача.
- Прод здоров: up 25 дн, диск 49%, все службы active.

## Утверждённая цепочка скилов (НЕ менять — согласовано)

| Этап | Скил | Статус |
|---|---|---|
| 0. Инвентарь | `discovery-interview` (SYSTEM) | ✅ |
| 1. Карта связей | `graphify` | ✅ (граф устарел → read-fallback) |
| 2. Технический аудит | `audit-portal` | ✅ (этой сессией) |
| 2б. Домены (по сигналу) | `threat-model` · `pdn-152fz-audit` · `billing-audit` / `security-go-live` | ⏳ СЛЕДУЮЩИЙ |
| 3. Разбор веток | `superpowers:finishing-a-development-branch` | ✅ |

## Канал работы под стеной

Стена `enforce-supreme-gate` («роутер-наставник») активна: в разговорном режиме блокирует Bash/Skill/git,
команды идут только опечатанным планом (церемония спека→план→шаги). Гайд — `docs/superpowers/router-mentor-wall-GUIDE.md`
(читать ПЕРЕД работой). Скил-аудиты Этапа 2б гонят десятки команд → канал спросить у владельца
(рекомендация — опустить стену на время аудита / терминал / церемония). git-операции (fetch/merge/revert)
стена не пускает — терминал владельца. Память про стену пишет владелец (FLOOR-ESCAPE / maintenance).

## Готовый промт для новой сессии

> Продолжаем «поиск всех хвостов» Лидерры. Кодовая фраза стены — «роутер-наставник». Прочитай ПЕРВЫМ
> `docs/superpowers/plans/2026-06-15-tails-audit-handoff-2.md` — там состояние, находки Этапа 2,
> P1-риск (GitHub suspend + 345 непушенных), решения по worktree и утверждённая цепочка скилов.
> Этапы 0/1/2/3 закрыты. Осталось **Этап 2б — доменные аудиты** (threat-model / pdn-152fz-audit /
> billing-audit): портал крутит деньги + ПДн + готовится в интернет — там вероятны скрытые хвосты.
> Сохрани цепочку скилов: нужный скил вызывай ПЕРВЫМ (§12/§17 + стена требует церемонии перед командами).
> Спроси меня про канал запуска (опустить стену / терминал / церемония) и с какого домена начинаем.
> Не закрывай открытые вопросы (Б-1/CTO/Биз/Диз/DO/SEC) без моего явного «закрываем».
