Vinatorul/AI-SDLC-Game

★ 0Forks 1TypeScriptGitHub ↗Compare

README

AI SDLC RPG

Интерактивная игра для доклада: зал встраивает 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.

API в Docker

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.sqlite

Одна виртуалка с HTTPS

Caddy принимает 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.

GitHub Pages

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"

Contributors

Vinatorul

Issues