# 🧹 Поднимать сервис и заглушку одной командой - **Тип:** chore - **Категория:** Очередь — шаг dev заводит владельца панели тем самым ключом — до него команду не собрать - **Зачем:** Локальная проверка требует двух терминалов, ручной остановки обоих процессов и чистки каталога данных; учётную запись заводят проходом по браузеру. Шаг `task dev CONFIG=<путь> USER=<почта>` поднимает сервис и подставной провайдер OIDC разом, кладёт данные во временный каталог, заводит учётные записи и гасит оба процесса по Ctrl+C. Задуманное устройство: - конфиг пишет человек и передаёт путём — шаг его не сочиняет; - шаг подменяет каталог данных: кладёт копию переданного конфига во временный каталог со своим `data_dir`, чтобы прогон начинался с пустой базы независимо от того, что написано в конфиге. Временное живёт в `/tmp` — в `data/` писать запрещено (CLAUDE.md, «Запреты»); - оба процесса идут одной группой, `trap` на `INT` и `TERM` гасит их разом, `wait` держит терминал; - шаг заводит обычную учётную запись входом: поднимает `cmd/oidcstub` с `-email` из `USER`, сам проходит цепочку входа и тем создаёт запись; - владельца панели заводит **ключ конфига**, который приносит [admin-owner-from-config](admin-owner-from-config.md). До неё шаг владельца панели завести не может — отсюда и место в списке. ## Затрагивает - `Taskfile.yml` — шаг `dev` с переменными `CONFIG` и `USER`; - скрипт запуска в `scripts/` — он попадает под шаг `shell` гейта; - `CLAUDE.md`, раздел «Команды»; - `README.md`, раздел про локальный запуск. ## Критерии приёмки - Команда поднимает оба процесса и печатает адрес, по которому открывать приложение. Оракул: прогон с тестовым конфигом — сервис и заглушка слушают свои порты. - Ctrl+C гасит обоих и не оставляет висящих процессов. Оракул: `pgrep` по обоим именам после остановки — пусто. - После запуска в базе есть учётная запись с переданной почтой. Оракул: запрос к коллекции пользователей во временной базе. - Каталог данных лежит во временном месте, а `data/` не тронут. Оракул: путь базы из журнала подъёма и `git status` после прогона. - `task gate` остаётся зелёным, скрипт проходит `shellcheck`. Оракул: прогон гейта целиком. ## Рамки Шаг локальный: наружу не ходит, боевых ключей не требует и в образ не попадает. Распознавание при выдуманных ключах не работает — это остаётся как есть, шаг его не подменяет.