- Create maps/ directory with 50 maps per player count (2, 3, 4, 6)
- Each map includes metadata: id, players, dimensions, wall density
- Generate maps using acb-mapgen with rotational symmetry
- Add scripts/generate-map-library.sh for regeneration
- Add Makefile with map-library target
Plan §3.8 specifies: "Pre-generated pool of 50+ maps per player count"
Total: 200 maps (50 each for 2, 3, 4, and 6 players)
Closes: bf-4mlv
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Root cause: The R2 bucket 'acb-data' is empty - no replay files were ever
uploaded. The matches/index.json lists test matches, but the corresponding
replay files return 404 when accessed via the Pages Function at /r2/.
Fix: Add tooling to generate test replays matching index.json entries and
upload them to R2. The viewer already has proper error handling (response.ok
check + user-visible error messages in replay.ts:1397-1402).
Changes:
- scripts/generate-test-replays.sh: Generate all 8 test replays from index.json
with correct match IDs, gzip them, place in test-replays/
- scripts/upload-test-replays.sh: Upload generated replays to R2 via wrangler
- scripts/README.md: Document the R2 setup and replay upload workflow
- .gitignore: Add test-replays/ (generated files, not committed)
Usage:
1. bash scripts/generate-test-replays.sh
2. npm install -g wrangler && wrangler login
3. bash scripts/upload-test-replays.sh
Verified: Generated replays have correct match_id, format_version="1.0",
and valid JSON structure. The viewer error path handles 404 correctly.
Closes: bf-360t
The latest engine changes (commit 26d9190) achieved 100% combat death
rate with 2 cores per player, but the verification script was using
the default 1 core. This fix aligns the verification with the
production configuration.
Verification results with 2 cores:
- 2-player random: 20/20 (100%) combat deaths
- 2-player aggressive: 20/20 (100%) combat deaths
- 6-player mixed: 20/20 (100%) combat deaths
All configurations meet or exceed plan §3.7.1 combat density targets.
Added analyze-combat-deaths.sh script to track combat_death rate
across replay files. Reports percentage of matches with combat_deaths
by player count and average deaths per match.
Usage:
./scripts/analyze-combat-deaths.sh /path/to/replays
For production monitoring, download replays from R2 and analyze:
aws s3 sync s3://acb-replays /tmp/replays
./scripts/analyze-combat-deaths.sh /tmp/replays
Full database integration (persist combat_deaths to DB, dashboard UI)
left for future work as combat_deaths are already tracked in replay files.
Closes: bf-38ts
The previous ZoneMinRadius=5 created a final zone diameter of 10 tiles,
which allowed bots to remain outside the 3.5-tile attack radius even when
both were inside the zone. This resulted in low combat_death rates for
passive bot strategies (~10% for random bots vs the 65-80% target).
With ZoneMinRadius=3, the final zone diameter is 6 tiles, forcing bots
into proximity where focus-fire combat triggers more consistently.
Also adds verify-combat-density.sh script for ongoing metrics tracking.
Closes: bf-4bj9
- POST /api/register: bot registration with URL + shared secret validation
- GET /api/job: worker polls for next pending match job (authenticated)
- POST /api/job/:id/result: worker submits match result (winner, replay JSON)
- GET /api/replay/🆔 serve replay JSON from R2 warm cache (falls back to B2)
- GET /api/bot/🆔 bot profile JSON (rating, elo, record, metadata)
- GET /api/bots: leaderboard snapshot with pagination
- POST /api/ui-feedback: accept Agentation UI feedback
Authentication via Bearer token (worker API key). Shared secrets encrypted
with AES-256-GCM using ACB_ENCRYPTION_KEY.
Add wrangler.toml, deployment script, and documentation for deploying
the AI Code Battle SPA to Cloudflare Pages.
- wrangler.toml: Cloudflare Pages project configuration
- scripts/deploy-pages.sh: Manual deployment script using wrangler CLI
- web/CLOUDFLARE_DEPLOYMENT.md: Deployment guide with GitHub Actions setup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add automated script for creating R2 bucket and configuring custom domain
r2.aicodebattle.com for replay storage.
- Create scripts/setup-r2.sh:
- Creates acb-data R2 bucket if it doesn't exist
- Configures custom domain via Cloudflare API
- Includes verification and usage instructions
- Update DEPLOYMENT.md to reference the new script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add configure-dns.sh for automated DNS record setup:
- aicodebattle.com CNAME to Pages
- r2.aicodebattle.com CNAME to R2
- api.aicodebattle.com A record to Traefik (optional)
Includes manual dashboard instructions as fallback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add helper scripts for Cloudflare Pages and R2 deployment:
- cloudflare-setup.sh: Creates Pages project, deploys dist, creates R2 bucket
- verify-deployment.sh: End-to-end verification of all endpoints
These scripts require wrangler authentication via `wrangler login`.
Note: worker-api deployment removed from scope (legacy code was removed
in commit b06350d).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>