Командная строка
Интерфейс — обёртка над теми же стадиями конвейера. Из терминала удобнее прогонять практику целиком и запускать проверки в CI.
gen — сторона автора
студия
uv run gen studio --pack packs/my-course --mock --port 8765
материализация всей практики без интерфейса
TESTCONTAINERS_RYUK_DISABLED=true uv run gen materialize --pack packs/my-course --mock
gen materialize проходит шаг 3 по всем заданиям пака: консенсус решений, спека данных, варианты, проверки, гейт инвариантов, отчёт. По каждому заданию печатается строка результата, в конце — accepted: 7/8. Код возврата ненулевой, если принято не всё, поэтому команду можно ставить в пайплайн подготовки практики.
| Флаг | Значение |
|---|---|
--pack | каталог пака (обязателен) |
--mock | ответы LLM из <пак>/mock_llm/ вместо API |
--port | только у studio, по умолчанию 8765 |
runner — сторона студента и CI
сервер практики
uv run runner serve --pack packs/my-course --solutions solutions --port 8766
проверка сданных решений
uv run runner ci --pack packs/my-course --solutions solutions
| Флаг | Значение |
|---|---|
--pack | каталог пака |
--solutions | папка с решениями, она же источник правды о сдаче |
--pg-dsn | строка подключения; пусто — поднимается локальный контейнер |
--host | адрес привязки, в Docker 0.0.0.0 |
--port | порт, по умолчанию 8766 |
runner ci читает solutions/<задание>.sql, гоняет каждое решение по всем вариантам данных и завершается ненулевым кодом, если хоть одно не сошлось. Это та же самая проверка, что и в браузере студента, — общий код, а не похожая логика.
Окружение
| Переменная | Зачем |
|---|---|
OPENROUTER_API_KEY | живые вызовы LLM; берётся из .env |
TESTCONTAINERS_RYUK_DISABLED | true для Docker Desktop на macOS |
PG_DSN | база практики для раннера |
CHECK_DSN | отдельная чистая база под проверки |