Architecture conformance fix per plan §12 Phase 4:
- Plan specifies Matchmaker Deployment as internal service with no external exposure
- Extracted tickers.go from acb-api to new cmd/acb-matchmaker/
- Tickers: bot pairing (1 min), health checking (15 min), stale job reaping (5 min)
- Alerting webhooks moved from acb-api to acb-matchmaker
- Created Dockerfile for acb-matchmaker container
- Created K8s deployment manifest (no service needed - internal only)
- Fixed syntax error in cmd/acb-api/db.go (prematurely closed schemaSQL string)
This separates concerns per the plan:
- acb-api: HTTP endpoints for bot registration, job coordination, bot status
- acb-matchmaker: Internal tickers for matchmaking, health checks, reaping
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Architecture conformance fix per plan §9.3, §9.7, §12 Phase 6:
- K8s manifests must be in cluster-configuration/apexalgo-iad/ai-code-battle/
for ArgoCD Application to sync from the correct path
- Flat directory structure (no subdirectories) per cluster norms
- Naming convention: {name}-{kind}.yml
Changes:
- Moved all manifests from deploy/k8s/ to cluster-configuration/apexalgo-iad/ai-code-battle/
- Updated ArgoCD Application to point to new path with recurse: false
- Renamed files to follow flat naming convention:
- deployments/acb-api.yaml -> acb-api-deployment.yml
- services/acb-api.yaml -> acb-api-service.yml
- sealed-secrets/api-key.yaml -> acb-api-key-sealedsecret.yml
- etc.
- Removed deploy/k8s/ directory
- Updated PROGRESS.md with migration details
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- arena/arena.go: 10-match mini-tournament running candidate as a local
subprocess against diverse live opponents sampled across the rating
distribution; AES-GCM secret decryption for opponent auth
- arena/psro.go: Nash equilibrium computation for the 1×K meta-game;
FictitiousPlayNash included for future K×K support
- arena/winrate.go: Wilson-score 95% CI for win-rate calculation; draws
counted as 0.5 wins
- arena/gate.go: two-part promotion gate — Nash value ≥ threshold AND
MAP-Elites niche fill or improvement; detailed reason strings
- promoter/promoter.go: full promotion pipeline — bot source + Dockerfile
+ K8s Secret/Deployment/Service manifests, docker build, git commit/push
(ArgoCD sync), kubectl readiness poll, bots-table INSERT, programs-table
update; RetireBot and EnforcePolicy (rating threshold + population cap 50)
- db/db.go: add bot_name / bot_secret migration columns
- db/programs.go: ListPromoted, SetBotNameAndSecret, UnsetPromoted,
GetByBotID, PromotedCount helpers for promotion/retirement lifecycle
- main.go: evaluate and retire subcommands wiring arena + gate + promoter;
remove unused island flag from evaluate
- arena/arena_test.go: 21 unit tests covering Nash, Wilson CI, Gate logic,
and selectDiverse opponent sampling
- promoter/promoter_test.go: tests for Dockerfiles, bot-ID/secret generation,
AES-GCM helpers, and K8s manifest templates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- selector: tournament selection for parent sampling from island populations
- prompt: assembles evolution prompts from parent code, replay analysis, and meta description
- llm: OpenAI-compatible client routing to ZAI proxy with fast (GLM-5-Turbo) and strong (GLM-5) tiers, plus code block extraction from model responses
- Tests for prompt assembly, code extraction, and tournament selection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update r2_data URL from data.aicodebattle.com to r2.aicodebattle.com
to match the planned R2 bucket custom domain in the project plan.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the monitoring alerting deliverable from Phase 6. The Alerter
module sends color-coded notifications to Discord and/or Slack webhooks
for operational events: bot health transitions, stale job re-enqueues,
and match errors. Includes per-key rate limiting to prevent alert storms.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements the K8s-native Go API service per the plan architecture:
- HTTP server with graceful shutdown and env-var configuration
- PostgreSQL schema (bots, matches, match_participants, jobs, rating_history)
- Health/ready endpoints checking PostgreSQL and Valkey connectivity
- Bot registration with health check, HMAC secret gen, AES-256-GCM encryption
- Key rotation and bot status endpoints
- Job claim via Valkey BRPOP, result submission with Glicko-2 rating update
- Glicko-2 rating system: multi-player pairwise, Illinois volatility algorithm
- Background tickers: matchmaker (1m), health checker (15m), stale job reaper (5m)
- Worker API key authentication (Bearer/X-API-Key)
- Dockerfile, K8s Deployment (2 replicas), ClusterIP Service
- 30 unit tests covering Glicko-2, crypto, config, and handlers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace broken Taylor series sin/cos approximations with math.Sin/math.Cos
in both engine/match.go and cmd/acb-mapgen. The Taylor series produced
incorrect results for angles > π, causing wrong positions in 3+ player maps.
Upgrade map generator wall placement from random scatter to cellular
automata (B5/S4 rule, 4 iterations) with rotational symmetry enforcement
and connectivity validation. Add comprehensive mapgen tests and dominance
win condition tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create deploy/k8s/ directory with complete K8s manifests for the
ai-code-battle namespace on apexalgo-iad cluster:
- Namespace and ArgoCD Application (auto-sync, prune, self-heal)
- Match worker Deployment (2 replicas, metrics on :9090)
- Index builder Deployment (Recreate strategy)
- 6 strategy bot Deployments (random, gatherer, rusher, guardian, swarm, hunter)
- ClusterIP Services for all bots (cluster DNS resolution)
- SealedSecret templates (API key, R2 creds, bot secrets, Cloudflare token)
- All containers from forgejo.ardenone.com/ai-code-battle/ registry
- Health/readiness probes and resource limits on all deployments
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds a metrics HTTP server to acb-worker exposing Prometheus text format
at /metrics, plus /health and /ready K8s probe endpoints. Tracks counters
(matches, errors, jobs, replays, polls, heartbeats) and histograms
(match duration, replay upload duration, replay size). Instruments the
full worker execution flow. Fixes .gitignore binary patterns to use
root-anchored paths so cmd/ subdirectories aren't incorrectly excluded.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Corrected the full-K8s migration — the static site belongs on Cloudflare
Pages, not Nginx in K8s. The architecture is now:
- Cloudflare Pages: SPA + pre-computed JSON indexes (deployed by K8s
index builder via wrangler every ~90 min)
- Cloudflare R2: replays, per-match metadata, evolution live.json,
thumbnails, bot cards (uploaded by K8s workers via S3 API)
- apexalgo-iad K8s: Go API (Traefik ingress), PostgreSQL (CNPG),
Valkey (job queue), match workers, strategy bots, evolver,
index builder
Browser loads SPA from Pages, replays from R2, calls Go API on K8s.
No Nginx pod, no PersistentVolume for web data. R2 is the data bus
between K8s agents and the Cloudflare-served website.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All periodic workloads now run as Deployments with internal sleep loops
that exit after a configurable lifetime (default 4h) for K8s to restart.
No CronJobs or Jobs used.
- Index builder: 15-min sleep loop, writes JSON to PV, exits after 4h
- Replay pruning: folded into index builder (weekly cycle check),
acb-replay-pruner container removed
- Evolver: already used this pattern (4h exit)
- Match workers: standard long-running Deployment (no periodic exit needed)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
- Runs Go engine tests with race detector on every push/PR
- Runs TypeScript tests for worker-api and indexer
- Builds web app and uploads artifacts
- Builds all Go CLI tools (acb-local, acb-mapgen, acb-worker)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add comprehensive README with project structure, quick start, and deployment info
- Document all 6 strategy bots with their languages and strategies
- Include testing and architecture overview
- Update PROGRESS.md to reflect this change
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add comprehensive .gitignore for binaries, node_modules, and build outputs
- Add package-lock.json for cmd/acb-indexer and worker-api
- Ensures reproducible builds with exact dependency versions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add /health (liveness) and /ready (readiness) endpoints to worker-api
- /ready checks database connectivity and returns 503 if unavailable
- Update DEPLOYMENT.md with health endpoint documentation
- Update PROGRESS.md to reflect monitoring setup complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Dockerfile for acb-worker match execution container
- Add docker-compose.bots.yml for orchestrating all 6 strategy bots
- Add docker-compose.workers.yml for worker and indexer deployment
- Add .env.example documenting all required environment variables
- Add DEPLOYMENT.md with deployment guide and troubleshooting
- Update PROGRESS.md with Phase 6 progress
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add web/pages.json documenting Pages project settings and data paths
- Add web/public/_headers for cache control on static assets
- Add web/public/robots.txt for SEO
- Add web/public/data/ placeholder structure for index files
- leaderboard.json
- bots/index.json
- matches/index.json
- Update PROGRESS.md marking Phase 5 complete
Phase 5 is now complete. Ready for Phase 6 (Deployment & Production).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create app.html as SPA shell with navigation header and dark theme
- Add hash-based router (router.ts) for client-side navigation
- Implement page components:
- Home page with hero section and feature overview
- Leaderboard with ranking table and status indicators
- Match history with match cards and participant info
- Bot directory with bot cards sorted by rating
- Bot profile with stats, rating sparkline chart, and recent matches
- Registration form with API key display
- Replay viewer (integrated from Phase 3)
- Docs/Getting Started page with protocol overview
- Add API client (api-types.ts) for fetching data from Worker API
- Update vite.config.ts for multi-page build (index.html + app.html)
- Update PROGRESS.md with Phase 5 status and exit criteria
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add /api/data/export endpoint to worker-api for data export
- Create cmd/acb-indexer/ TypeScript container:
- API client for fetching data from Worker API
- Index generator for leaderboard, bot profiles, match index
- File writer for outputting JSON files
- Optional Cloudflare Pages deploy support
- Unit tests (6 tests)
- Update PROGRESS.md to mark Phase 4 complete
Phase 4 is now complete. All exit criteria met:
- Matchmaker cron creates jobs in D1
- Workers claim and execute matches
- Replays land in R2
- Results flow into D1
- Ratings update via Glicko-2
- Leaderboard.json rebuilds automatically
- Stale job reaper recovers from worker disappearance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Worker polls Cloudflare Worker API for pending match jobs
- Claims jobs and executes matches using the game engine
- Uploads replays to R2 via S3-compatible API
- Sends heartbeats during match execution
- Submits results back to Worker API
- Includes retry logic with exponential backoff
- API client tests for job coordination endpoints
Also fixes glicko2.ts: export g() and E() functions for testing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add web/ directory with TypeScript + Vite build tooling
- Implement ReplayViewer class with Canvas-based grid rendering
- Add play/pause, scrub, and speed controls with keyboard shortcuts
- Implement fog of war perspective toggle per player
- Add score overlay with player names, scores, and energy
- Support loading replays from local file or URL
- Add match info panel and event log display
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add connectivity.go: BFS-based map connectivity validation with retry
- Update mapgen to use connectivity checking by default
- Add determinism_test.go: property-based tests for reproducibility
- Same seed produces identical replays
- Turn execution is deterministic
- Grid operations are deterministic
- Combat resolution is deterministic
- Full 500-turn match validation
- All 32 tests pass
- Update PROGRESS.md: Phase 1 complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add engine package with toroidal grid, game state, turn execution
- Implement focus-fire combat resolution with simultaneous deaths
- Add fog of war visibility filtering for bot state
- Implement energy collection (contested resources denied)
- Add bot spawning at active cores
- Implement win conditions: elimination, draw, dominance, turns
- Add replay JSON writer for match recording
- Add match runner with concurrent bot communication
- Add CLI tools: acb-local (match runner), acb-mapgen (map generator)
- Add comprehensive unit tests (26 tests passing)
Exit criteria met: can run complete 500-turn matches and produce valid replays
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- R2 Class A writes corrected from 44K to 101K/month (60 matches/hr
× 2 writes × 720h + 14.4K evolution live.json). Still 90% headroom.
- R2 Class B reads reconciled to 50K/month (was 30K in one place,
20K in another)
- Fixed §12 evolution meta reference → §10.2 MAP-Elites behavior grid
- Added community_hints.json to documented data paths in §14.2
- Normalized all SS notation to § throughout document (5 occurrences)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
secret storage, evolution throughput, predictions, enrichment, fairness,
lineage, crash ratings, cron model, core capture, replay pruning
Critical fixes:
- R2 write budget: replaced Worker cron index rebuilder (was ~1.6M
writes/mo, over 1M limit) with Rackspace index builder that deploys
to Pages every ~90 min (500 builds/mo). R2 now only for replays,
match metadata, and evolution live status (~44K writes/mo).
- D1 schema consolidated: all 13 tables in one place (§8.3), including
predictions, map_votes, replay_feedback, series, series_games, seasons
- Protocol schema examples updated with notes about future additive
fields (season_id, terrain, debug) per backward compatibility rules
High fixes:
- Shared secret storage: removed self-contradicting draft note, clean
statement of AES-256-GCM approach
- Predictions: changed predicted_winner INTEGER to predicted_bot_id TEXT
(tied to bot identity, not random player slot)
Medium fixes:
- Evolution throughput: configurable ladder/evolution ratio (70/30
default), container exits after 4h for Kubernetes redeploy
- Test harnesses added: game engine, bot protocol, evolution validation
- Enrichment: coding agent on Rackspace generates markdown play-by-play
- Map fairness: sample increased from 20 to 80 matches (~2% false
positive vs ~15%)
- Bot lineage: parent_ids TEXT column added to bots table
- Crash/timeout matches explicitly affect Glicko-2 ratings
- "Undefended core" defined at Phase CAPTURE
- Replay pruning: age-based 90-day, weekly Rackspace job, exemptions
for playlists/rivalries/series/seasons, acb-replay-pruner container
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
camera, PiP, performance trifecta, progressive disclosure, mobile
swipe playlists, theater mode, ambient awareness
10 UX/UI features in sections 15.9-15.18:
- Replay micro-animations: 60fps interpolation between game ticks,
particle deaths, energy starbursts, combat lines, core shockwaves
- Director Mode: adaptive auto-speed based on action density per turn,
cinematic tempo that slows for combat and speeds through exploration
- View mode morphing: 300ms cross-fade between dots/territory/influence
using dual off-screen Canvas buffers
- Follow Bot camera: viewport lerps to track one player's bounding box,
pairs with fog-of-war for first-person documentary feel
- Picture-in-picture: replay minimizes to 200x200 floating player on
navigation, Canvas reparented (not recreated), GPU-animated transitions
- Performance trifecta: hover preload (100ms delay), layout-matched
skeleton screens with shimmer, 5-page back-nav cache (0ms restore)
- Progressive disclosure: viewer XP tracks engagement, reveals controls
at levels 0/2/5/10/20, golden pulse + tooltip on new features
- Mobile swipe playlists: full-screen cards, auto-play Director Mode,
swipe-up to advance, background preload of next replay
- Theater mode: fullscreen chrome-free canvas, vignette + critical
moment pulse, auto-hiding controls, landscape trigger on mobile
- Ambient awareness: favicon badges, tab title updates, haptic on
critical moments, seasonal background hue shift, live match counter
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New section 15 covers:
- Three audiences (spectator, participant, visitor) with distinct needs
- Information architecture: /watch, /compete, /leaderboard as primary hubs
- Homepage design: auto-playing featured replay, two CTAs, compact
leaderboard + playlists + season status + evolution mini
- Desktop top bar + mobile bottom tab bar navigation
- Responsive breakpoints (phone/tablet/desktop) with mobile-first
spectating, desktop-first building
- Mobile replay viewer: full-width canvas, pinch-to-zoom, tap play/pause,
swipe-to-scrub timeline, slide-up panels
- Sandbox is desktop-only (clear mobile message + "send to desktop" link)
- First-time visitor funnel: see → watch → engage → build
- Performance budget: <2s LCP, <200KB gzipped JS, code-split per route,
lazy WASM loading, stale-while-revalidate data fetching
- Design language: dark theme, minimal chrome, functional animation,
mono+sans-serif typography
- 11 reusable components covering all pages and breakpoints
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pages serves the SPA shell only (~500-1000 files): HTML, JS, CSS, WASM,
docs. Changes only on code deploys. R2 serves all dynamic data via custom
domain: replays (~130K files at 90d retention), leaderboard, bot profiles,
matches, evolution status, blog posts, thumbnails, cards. R2 is also the
data bus for Rackspace agents — same files browsers read are what workers
write. Added detailed file layout for both, data loading pattern with
cache headers, and updated architecture diagram showing the three-way
data flow (Worker materializes D1→R2, Rackspace writes to R2, browser
reads from R2).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
evolution observatory, narrative engine
New section 14 + Phase 10:
- Weekly meta report as auto-generated blog posts on /blog with
LLM-enhanced narrative sections (~$0.05/week)
- Public match data as documented static JSON file paths in R2,
no Worker API needed; versioned replay format spec
- Accessibility suite: Tol color-blind palette, shape-per-player,
keyboard shortcuts, high contrast, reduced motion, screen reader
transcript, focus indicators
- Live evolution observatory: evolver writes live.json to R2 every
cycle (~20 writes/hr), page polls every 10s, renders island status
+ candidate pipeline + activity feed + lineage tree + meta chart
- Narrative engine: weekly story arc detection (rise, fall, rivalry,
upset, evolution, comeback), LLM-generated 200-word chronicles
published as blog posts (~$1.30/month)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
embeds, playlists, predictions, map evolution, series, event timeline,
seasons, bot cards
New section 13 (10 features) + Phase 9:
- Bot debug telemetry: optional structured debug field in move response,
rendered as targets/heatmaps/reasoning in the replay viewer
- Three replay view modes: dots, Voronoi territory, influence gradient
- Embeddable replay widget (~50KB iframe, OG tags, query params)
- Auto-curated playlists: Closest Finishes, Upsets, Comebacks, etc.
- Prediction system for non-coders (within CF free tier: ~864 writes/day)
- Map evolution with breeding, engagement scoring, positional fairness
monitoring, and user voting (upvote/downvote maps)
- Multi-game series (bo3/bo5/bo7) across different maps with spoiler toggle
- Match event timeline with clickable icon ribbon
- Seasonal rotations with backward-compatible rule versioning (additive
changes only: new optional fields, param tuning, new tile types that
old bots can ignore), championship brackets, season archives
- Bot profile cards as shareable PNGs with OG tags
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reworked sandbox to use separate WASM modules per bot instead of JS
function callbacks. Each bot compiles to its own WASM with a standard
init/compute_moves/free_result interface. Supports Go, Rust, TS natively;
PHP/Java bots reimplemented in Go for WASM. Memory budget 30-105MB
depending on player count. Two user modes: TS quick-start in Monaco
or upload pre-compiled .wasm file.
Dropped what-if replay branching — good in theory but the split-pane
counterfactual UI is a power-user feature that would confuse casual
visitors. Not worth the complexity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AI commentary, clip maker, rival detection, community feedback
New section 12 covers seven features with Phase 8 for implementation:
- In-browser WASM sandbox (1 WASM engine + JS bots, ~30-50MB, <2s)
- Win probability graph via Monte Carlo rollout + critical moments
- What-if replay branching (single WASM, state injection, split-pane)
- Selective AI commentary for featured/rivalry/milestone replays
- Clip maker with GIF/MP4 export for Twitter, TikTok, IG, Discord
- Automatic rival detection with template-generated narratives
- Community replay feedback tagged by turn, feeding evolution hints
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Architecture split: Cloudflare Pages (static site), Worker (API + cron
scheduling), D1 (SQLite database), R2 (replays + JSON indexes, zero
egress) — all within the free tier with 95%+ headroom on every quota.
Rackspace Spot handles match workers, bot containers, and the evolution
pipeline — all stateless and interruptible. Includes D1 schema, Worker
cron design (matchmaker, indexer, health checker, reaper), R2 bucket
layout, free tier usage math, and graceful degradation model. Drops
infrastructure cost from ~$65-110/mo to ~$35-70/mo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All platform data is now JSON files on disk served directly by Nginx.
Workers submit results to the scheduler over Tailscale HTTP, scheduler
writes to the data directory. No object store, no S3 API. Scheduler
coordinates jobs via HTTP endpoints backed by SQLite. Data directory
is a persistent volume on the stable instance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Major changes:
- Website is now a static site loading JSON from object store, no app server
- Removed PostgreSQL, Redis, PgBouncer, read replicas — replaced with Minio
(S3-compatible) for all data and SQLite on the scheduler for bookkeeping
- Registration is a minimal 3-endpoint API, no user accounts needed
- Match job coordination via file moves in Minio (no message broker)
- All user-facing data is pre-built JSON fetched client-side
- Single stable instance runs everything except match workers
- Spot workers are fully stateless — site stays up when all are reclaimed
- Added cost model (~$65-110/mo excluding LLM API)
- Simplified monitoring to match the architecture
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New section 10 covers the full evolution pipeline: FunSearch-style island
model for population diversity, LLM ensemble (fast+strong) for candidate
generation, multi-stage validation (syntax, schema, nsjail sandbox),
evaluation arena, Nash equilibrium promotion gate (LLM-PSRO), automated
container build/deploy, retirement policy, and evolution dashboard with
lineage viewer and meta tracker. Phase 7 added to implementation plan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each of the six built-in strategy bots is now implemented in a different
language (Python, Go, Rust, PHP, TypeScript, Java) to demonstrate that
the HTTP protocol is truly language-agnostic. Added per-language container
templates, resource specs, and forkable starter kit repos for participants.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers game mechanics (toroidal grid, focus-fire combat, energy economy,
fog of war), HTTP communication protocol with HMAC authentication, six
built-in strategy bots as containers, Glicko-2 tournament system, compact
JSON replay format with Canvas-based browser viewer, web platform with
bot registration, and Rackspace Spot deployment architecture. Organized
into six implementation phases from core engine through production.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Research covers game mechanics, bot protocol, tournament/ranking,
replay system, infrastructure, and successor platforms. Requirements
document captures the HTTP-based bot communication model, 3-second
timeout, strict schema enforcement, and replay visualization needs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>