No description
Major architecture change: everything now deploys to the apexalgo-iad Kubernetes cluster via ArgoCD GitOps. Replaced: - Cloudflare Pages → Nginx container in Web Pod - Cloudflare Workers → Go API container in Web Pod (same pod, shared PVC) - Cloudflare D1 → CNPG PostgreSQL (cnpg-apexalgo cluster) - Cloudflare R2 → SATA (Cinder CSI) PersistentVolume - Rackspace Spot → K8s Deployments in ai-code-battle namespace New infrastructure: - Web Pod: 2-container pod (Nginx + Go API) sharing an RWO SATA PVC - Match workers: K8s Deployment with configurable replicas - Strategy bots: individual Deployments + Services - Job queue: Valkey (Redis-compatible, existing cluster resource) - Cron jobs: K8s CronJobs for index building, replay pruning, health checks - CI/CD: Argo Workflows + Events (GitHub webhook triggers) - Secrets: SealedSecrets encrypted in git - TLS: Traefik IngressRoutes + cert-manager - CDN: Cloudflare free plan as reverse proxy only (no CF services) - D1 SQLite schema → PostgreSQL (proper types, FKs, indexes, JSONB) Storage: SATA Cinder CSI (RWO). Web Pod and Index Builder CronJob share the PVC via node affinity (both scheduled to same node). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| bots | ||
| cmd | ||
| docs | ||
| engine | ||
| web | ||
| worker-api | ||
| .env.example | ||
| .gitignore | ||
| DEPLOYMENT.md | ||
| docker-compose.bots.yml | ||
| docker-compose.workers.yml | ||
| go.mod | ||
| go.sum | ||
| PROGRESS.md | ||
| README.md | ||
AI Code Battle
A competitive bot programming platform where participants write HTTP servers that control units on a grid world.
Overview
AI Code Battle is a game simulation platform where:
- Participants write bots in any language that expose HTTP endpoints
- Bots compete on a toroidal (wrapping) grid world
- Matches are executed offline and presented as completed replays
- A web platform shows leaderboards, match history, and replay viewers
Quick Start
Prerequisites
- Go 1.21+ (for game engine and CLI tools)
- Node.js 18+ (for web and worker components)
- Docker (for containerized deployment)
Running Locally
# Build CLI tools
go build ./cmd/acb-local
go build ./cmd/acb-mapgen
# Run a match between built-in bots
./acb-local -seed 42 -max-turns 100 -output replay.json -verbose
# Start web development server
cd web && npm install && npm run dev
# Open http://localhost:3000/app.html
Viewing Replays
- Open the web app at
http://localhost:3000/app.html - Navigate to "Replay Viewer" in the menu
- Load a replay JSON file or enter a URL
Project Structure
ai-code-battle/
├── engine/ # Go game simulation library
│ ├── types.go # Core data types
│ ├── grid.go # Toroidal grid implementation
│ ├── game.go # Game state management
│ ├── turn.go # Turn execution phases
│ ├── replay.go # Replay recording
│ └── *_test.go # Test files
├── cmd/
│ ├── acb-local/ # CLI match runner
│ ├── acb-mapgen/ # Map generator
│ ├── acb-worker/ # Match execution worker
│ └── acb-indexer/ # Index builder for static files
├── web/ # Cloudflare Pages SPA
│ ├── src/
│ │ ├── pages/ # Page components
│ │ ├── replay-viewer.ts # Canvas replay renderer
│ │ └── app.ts # SPA entry point
│ └── public/ # Static assets
├── worker-api/ # Cloudflare Worker API
│ └── src/
│ ├── index.ts # Router + cron dispatcher
│ ├── jobs.ts # Job coordination
│ ├── bots.ts # Bot management
│ └── glicko2.ts # Rating system
├── bots/ # Strategy bot implementations
│ ├── random/ # Python - RandomBot
│ ├── gatherer/ # Go - GathererBot
│ ├── rusher/ # Rust - RusherBot
│ ├── guardian/ # PHP - GuardianBot
│ ├── swarm/ # TypeScript - SwarmBot
│ └── hunter/ # Java - HunterBot
└── docs/plan/ # Implementation plan
Strategy Bots
| Bot | Language | Strategy |
|---|---|---|
| RandomBot | Python | Random valid moves (baseline) |
| GathererBot | Go | Energy collection, avoid combat |
| RusherBot | Rust | Rush enemy cores aggressively |
| GuardianBot | PHP | Defend cores, cautious expansion |
| SwarmBot | TypeScript | Formation cohesion, group advance |
| HunterBot | Java | Target isolated enemies |
Deployment
See DEPLOYMENT.md for detailed deployment instructions.
Quick Deploy
# Start all strategy bots
docker-compose -f docker-compose.bots.yml up -d
# Start match workers
docker-compose -f docker-compose.workers.yml up -d
Testing
# Go engine tests
go test ./engine/... -v
# Worker API tests
cd worker-api && npm test
# Index builder tests
cd cmd/acb-indexer && npm test
Architecture
The platform uses a split architecture:
- Cloudflare (free tier): Static site, API endpoints, D1 database, R2 storage
- Rackspace Spot: Match workers, bot containers, index builder
See docs/plan/plan.md for the full implementation plan.
License
MIT