# План v4 — Подготовка портала к осмотру (Фаза 1 имитации)

## Цель

Подготовить наполненный локальный портал к осмотру глазами клиента: проверить
подключение к базе, довести схему, наполнить имитационными данными, проверить
наличие фронтовых зависимостей, собрать фронт и поднять сервер (спека D1–D3). Сам
проход по экранам и фиксация находок — отдельным шагом после подъёма сервера.

## Подготовка к осмотру (шаги)

1. Команда наполнения дополняется выводом готового логина первого имитационного
   клиента: в конце метода добавляется строка вывода с email пользователя первого
   тенанта и паролем `password` — чтобы вход был самодостаточным без чтения базы
   вручную (D2).
2. Проверка подключения к локальной базе (показ сведений о соединении) — если
   база недоступна, подготовка останавливается здесь с явной ошибкой, а не падает
   молча на наполнении (D1).
3. Идемпотентная миграция схемы локальной базы (применяет только недостающие
   миграции; существующие данные не трогает) — гарантия, что схема готова под
   наполнение (D1).
4. Запуск команды наполнения на 20 заявок и 3 клиента — появляются сделки,
   списания, движения баланса и уведомления (D1).
5. Проверка наличия фронтового сборщика среди установленных зависимостей копии
   (только чтение списка пакетов) — если зависимостей нет, подготовка
   останавливается здесь с явной ошибкой до шага сборки (D3).
6. Сборка фронтовых ассетов, чтобы локальный сервер отдавал готовое приложение
   (D3).
7. Подъём локального сервера приложения — портал становится доступен по адресу
   для прохода по экранам (D3).

Все семь шагов — механические операции правки, проверки, миграции, наполнения,
сборки и запуска; навык в них не задействован. Проход глазами клиента по экранам
D2–D8 со скриншотами и сводный отчёт (D9) — отдельная работа после подъёма
сервера.

```skills-json
[]
```

```steps-json
[
  {"op":"Edit","object":"app/app/Console/Commands/Imitation/ImitationSeedCommand.php","ref":"D2"},
  {"op":"Bash","object":"php app/artisan db:show","ref":"D1"},
  {"op":"Bash","object":"php app/artisan migrate --force","ref":"D1"},
  {"op":"Bash","object":"php app/artisan imitation:seed --leads=20 --clients=3","ref":"D1"},
  {"op":"Bash","object":"npm --prefix app ls vite","ref":"D3"},
  {"op":"Bash","object":"npm --prefix app run build","ref":"D3"},
  {"op":"Bash","object":"php app/artisan serve","ref":"D3"}
]
```

```verified-context-json
[
  {"id":"vc1","kind":"EXTRACTED","ref":"app/app/Console/Commands/Imitation/ImitationSeedCommand.php","anchor":"imitation:seed is forbidden in production"},
  {"id":"vc2","kind":"EXTRACTED","ref":"docs/superpowers/runbooks/2026-06-03-phase1-imitation-runbook.md","anchor":"Ручной проход глазами клиента"}
]
```

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

### Круг 1

Шаги сборки и подъёма сервера обязательны, чтобы приложение рендерилось и было
доступно для прохода глазами клиента; без них экраны D3–D8 не открыть. Шаг 1 —
минимальная аддитивная правка вывода логина, поведение наполнения не меняет.

### Круг 2

Готовность схемы: перед наполнением идёт идемпотентная миграция — применяет только
недостающие миграции и не трогает существующие данные.

### Круг 3

Навык верификации убран: семь шагов — механические операции, навык в них не
вызывается. Верификация экранов уместна отдельной работой после подъёма сервера.

### Круг 4

Существование базы и подключение: добавлен шаг показа сведений о соединении перед
миграцией — он подключается к локальной базе и при недоступности останавливает
подготовку явной ошибкой до миграции и наполнения. Создание самой базы — разовая
настройка окружения копии, которая уже выполнена (локальный портал работает на
этой базе), поэтому отдельным шагом не закладывается; проверка подключения
закрывает риск молчаливого падения.

Наличие фронтовых зависимостей: добавлен шаг чтения списка установленных пакетов
с проверкой сборщика перед сборкой — если зависимостей нет, подготовка
останавливается явной ошибкой до шага сборки. Это и есть запасная проверка;
команда установки зависимостей не закладывается намеренно (она вне допустимых
операций подготовки), а наличие проверяется без установки.
