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 |
||
|---|---|---|
| .. | ||
| analyze-combat-deaths.sh | ||
| build-wasm.sh | ||
| cloudflare-setup.sh | ||
| configure-dns.sh | ||
| deploy-pages.sh | ||
| generate-test-replays.sh | ||
| README.md | ||
| setup-r2.sh | ||
| upload-test-replays.sh | ||
| verify-combat-density.sh | ||
| verify-deployment.sh | ||
Scripts
This directory contains utility scripts for the AI Code Battle project.
Test Replay Management
Problem
The web viewer at /watch/replay loads replays from the R2 bucket (acb-data) via the Pages Function at web/functions/r2/[[path]].ts. The matches/index.json file lists test matches, but the corresponding replay files were never uploaded to R2, causing 404 errors.
Solution
Two scripts are provided to generate and upload test replays:
1. generate-test-replays.sh
Generates all test replays that match the entries in web/public/data/matches/index.json:
bash scripts/generate-test-replays.sh
This creates test-replays/*.json.gz files with proper match IDs.
2. upload-test-replays.sh
Uploads the generated replays to the R2 bucket:
# Install wrangler first (one-time)
npm install -g wrangler
wrangler login
# Upload the replays
bash scripts/upload-test-replays.sh
Verification
After uploading, verify the replays are accessible:
curl -I https://r2.aicodebattle.com/replays/m_test_upset_v1.json.gz
Or test directly in the viewer: https://ai-code-battle.pages.dev/#/watch/replay?url=/r2/replays/m_test_upset_v1.json.gz
R2 Bucket Configuration
- Bucket Name:
acb-data - Binding:
ACB_BUCKET(configured inweb/wrangler.toml) - Custom Domain:
r2.aicodebattle.com - Public URL:
https://r2.aicodebattle.com/
Expected R2 Layout
acb-data/
├── replays/ # Match replay JSON files (gzipped)
│ ├── m_test_upset_v1.json.gz
│ ├── m_test_6p_v1.json.gz
│ └── ...
├── matches/ # Per-match metadata
├── thumbnails/ # Match thumbnails
├── cards/ # Bot profile cards
└── evolution/ # Evolution live feed
Error Handling
The replay viewer (web/src/pages/replay.ts) already has proper error handling:
- Checks
response.okbefore parsing JSON - Displays user-visible error messages via
showLoadError()
No additional error handling code is needed.