Files
transcriber/tasks/items/dev-run-task.md
T
av 97c6c7c440 tasks: заведены задачи про владельца панели из конфига и команду локального запуска
- admin-owner-from-config первой строкой: сервис заводит владельца панели
  по ключу конфига; задача отменяет требование спеки storage, и это названо
  в рамках
- dev-run-task следом: task dev поднимает сервис и заглушку разом, гасит
  оба по Ctrl+C; зависит от ключа конфига
2026-08-15 20:39:45 +03:00

3.9 KiB
Raw Blame History

🧹 Поднимать сервис и заглушку одной командой

  • Тип: 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. До неё шаг владельца панели завести не может — отсюда и место в списке.

Затрагивает

  • Taskfile.yml — шаг dev с переменными CONFIG и USER;
  • скрипт запуска в scripts/ — он попадает под шаг shell гейта;
  • CLAUDE.md, раздел «Команды»;
  • README.md, раздел про локальный запуск.

Критерии приёмки

  • Команда поднимает оба процесса и печатает адрес, по которому открывать приложение. Оракул: прогон с тестовым конфигом — сервис и заглушка слушают свои порты.
  • Ctrl+C гасит обоих и не оставляет висящих процессов. Оракул: pgrep по обоим именам после остановки — пусто.
  • После запуска в базе есть учётная запись с переданной почтой. Оракул: запрос к коллекции пользователей во временной базе.
  • Каталог данных лежит во временном месте, а data/ не тронут. Оракул: путь базы из журнала подъёма и git status после прогона.
  • task gate остаётся зелёным, скрипт проходит shellcheck. Оракул: прогон гейта целиком.

Рамки

Шаг локальный: наружу не ходит, боевых ключей не требует и в образ не попадает. Распознавание при выдуманных ключах не работает — это остаётся как есть, шаг его не подменяет.