Интерактивная игра для доклада: зал встраивает AI во все восемь этапов SDLC и следит, выдерживает ли процесс последствия решений. В каждом ходу участники сначала выбирают этап, а затем конкретное действие внутри него. Событие зависит от выбранного действия и предыдущих решений. Игра продолжается, пока все этапы не позеленеют или одна из метрик не станет критической.
Сейчас сценарий — технический черновик. Он нужен, чтобы проверить два голосования, повторное изменение одного этапа, расчёт и восстановление игры. Тексты действий, событий и баланс эффектов будут доработаны отдельно.
Контент и баланс вынесены в
content/scenarios/technical-mvp.json.
Инструкция по полям и добавлению сценария лежит рядом в
content/README.md.
Действия описываются один раз в общем каталоге. Условия событий смотрят на выбранное действие,
состояние этапов, свойства процесса и историю. Поэтому не нужно заранее выписывать отдельную
ветку для каждой комбинации решений.
pnpm scenario:validate content/scenarios/technical-mvp.jsonНужен Node.js 24. В среде Codex используйте bundled runtime:
export PATH="/Users/vinatorul/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:/Users/vinatorul/.cache/codex-runtimes/codex-primary-runtime/dependencies/bin/fallback:$PATH"
pnpm install
pnpm devПосле запуска:
- фронтенд:
http://127.0.0.1:5173; - API:
http://127.0.0.1:8787; - healthcheck:
http://127.0.0.1:8787/health.
Переменные окружения описаны в apps/web/.env.example и apps/api/.env.example.
pnpm format
pnpm lint
pnpm typecheck
pnpm test
pnpm buildТесты движка и API проверяют основной сценарий и отдельный пример с другими этапами и метриками. Для проверок API используется временная SQLite.
docker build -f apps/api/Dockerfile -t ai-sdlc-api .
docker run --rm -p 8787:8787 \
-e CORS_ORIGINS=http://127.0.0.1:5173 \
-v ai-sdlc-data:/data ai-sdlc-apiКонтейнер запускает один процесс API. Файл базы лежит в /data, поэтому этому каталогу нужен постоянный диск.
Другой сценарий можно подключить без пересборки образа через SCENARIO_PATH и read-only volume;
точная команда приведена в инструкции по сценариям.
Резервную копию можно сделать из собранного образа, подключив постоянный том и отдельный каталог на виртуалке:
mkdir -p /var/backups/ai-sdlc-game
docker run --rm --init --user 0:0 --network none \
-v ai-sdlc-data:/data \
-v /var/backups/ai-sdlc-game:/backup \
ai-sdlc-api node dist/backup.js /data/game.sqlite /backup/game.sqliteCaddy принимает HTTP и HTTPS, сам получает и обновляет сертификат и передаёт запросы фронтенду. API доступен только внутри Docker-сети, SQLite хранится в постоянном томе.
Перед первым запуском направьте A-запись домена на виртуалку и откройте входящие TCP-порты 80 и
443. После git pull передайте домен скрипту:
DOMAIN='game.example.com'
./scripts/update-vm.sh "$DOMAIN"Для временного HTTP-доступа скрипт по-прежнему принимает IPv4-адрес. Полная инструкция: docs/deploy-single-vm.md.
Workflow .github/workflows/pages.yml собирает только статический фронтенд и публикует его после push в main. Его также можно запустить вручную.
Опубликованный фронтенд: kuvaev.me/AI-SDLC-Game.
В настройках репозитория нужно задать переменную VITE_API_BASE_URL с HTTPS-адресом API. Без неё
страница откроется, но создать игру или проголосовать через опубликованный фронтенд не получится.
При обновлении виртуалки разрешите origin опубликованного фронтенда так:
DOMAIN='game.example.com'
EXTRA_CORS_ORIGINS='https://kuvaev.me' ./scripts/update-vm.sh "$DOMAIN"