Adds bots/economist/bot.py and Dockerfile implementing a new strategy:
deliberately contest energy nodes that enemies are approaching to
destroy the contested energy, denying enemy income while harvesting
uncontested nodes for own economy.
Strategy priorities:
1. Maintain existing contest assignments (stay put)
2. Contest threatened nodes (intercept approaching enemies)
3. Reserve 1-2 bots to guard cores
4. Collect uncontested energy
5. Remaining bots explore toward map center
Pure collection mode when score lead ≥3 and turn > 200.
Co-Authored-By: Claude <noreply@anthropic.com>
The ZoneDriver bot was fully implemented and committed in cdbc4c0.
This note documents the implementation and verifies acceptance criteria.
Co-Authored-By: Claude <noreply@anthropic.com>
ZoneDriver weaponizes the shrinking zone to force enemy eliminations:
- Computes zone boundary and identifies "kill band" (zone edge-2 to edge)
- Positions units to block enemy escape routes inward
- Herds enemies toward zone edge for passive eliminations
- Prioritizes survival for own bots near zone boundary
Novel approach: turns zone from map feature into active weapon.
Co-Authored-By: Claude <noreply@anthropic.com>
- Add SiegeBot to engine/bot_strategies.go with spawn denial logic
- Implement standalone siege bot in bots/siege/ with main.go, strategy.go, Dockerfile
- Register siege bot in acb-local for arena testing
- Add test-siege-arena.sh script for validation
Strategy: Surround enemy cores to block spawning phase. Bot assigns
units to lockout rings (8 neighbors) around cores, greedily by distance.
Unassigned units collect energy or rush fully-sieged cores.
Tested: 3/10 wins vs rusher+gatherer, 1/10 wins vs rusher+gatherer+guardian
- Delete scripts/setup-r2.sh (Cloudflare R2 is not the storage provider)
- Create scripts/setup-b2.sh that documents B2 CDN setup:
- Prints B2 bucket endpoint (us-west-002)
- Prints CNAME target for b2.aicodebattle.com
- Verifies B2 credentials when env vars are set
- Informational/verification-only (no destructive operations)
- Update scripts/cloudflare-setup.sh:
- Remove R2 bucket creation steps
- Add note that B2 setup is separate (see setup-b2.sh)
Acceptance criteria met:
- scripts/setup-r2.sh does not exist
- scripts/setup-b2.sh exists, is executable, and runs without error
- No references to setup-r2 remain in scripts/
Update B2 bucket details table to consistently show region as VERIFIED.
The region was already verified via garage-to-b2-sync.yml but the table
incorrectly showed it as 'unconfirmed'.
Co-Authored-By: Claude <noreply@anthropic.com>
Verified B2 endpoint region via declarative-config garage-to-b2-sync.yml:
- Confirmed region: us-west-002
- Confirmed CNAME target: acb-data.s3.us-west-002.backblazeb2.com
- Updated implementation status table
Acceptance criteria met:
- notes/b2-cdn-setup.md exists with exact CNAME target ✅
- Region verified from production config (declarative-config) ✅
- Document clearly states verification status and blockers ✅
Note: B2 API auth could not be tested due to read-only proxy limitations.
Public access status requires Backblaze console access.
- Add current status summary identifying blockers
- Document region inconsistency (us-west-002 vs us-west-004 vs us-east-005)
- Note that aicodebattle.com domain zone does not exist yet
- Add B2 API authentication test section (skipped due to permissions)
- Update implementation status table with verification results
- Clarify that secret access requires direct kubeconfig, not read-only proxy
- Add detailed next steps with prerequisites section
Co-Authored-By: Claude <noreply@anthropic.com>
- Corrected date from 2025 to 2026
- Confirmed b2.aicodebattle.com CNAME does NOT exist (NXDOMAIN verified)
- Added bucket name verification from enrichment deployment config
- Updated implementation status to reflect current CNAME status
- Added verification details for DNS resolution check
- Confirmed all 7 original strategy bot deployment manifests exist
- Verified each follows required pattern: image=ronaldraygun/acb-strategy-{name}:latest, BOT_PORT=8080, BOT_SECRET from acb-bot-secrets key={name}-secret, Service ClusterIP:8080
- Verified acb-bot-secrets.yml.template contains all 7 bot secret keys
- Original work completed in commit 909f38f on 2026-06-16
Co-Authored-By: Claude <noreply@anthropic.com>
Task completed in prior commit 909f38f. All 7 bot deployment manifests
and acb-bot-secrets.yml.template already present in declarative-config.
Verified pattern compliance: image ronaldraygun/acb-strategy-{name}:latest,
BOT_PORT=8080, BOT_SECRET from acb-bot-secrets key={name}-secret,
ClusterIP Service on port 8080.
- Confirmed feature exists in commit c1acd83 (2026-06-16)
- KillScore config field with default value of 1
- Score awarded in executeCombat() loop
- No code changes needed
- Add KillScore config field (default: 1 point per kill)
- Increment killer's score in executeCombat() when tracking CombatDeaths
- Makes killing enemy bots worth real score, not just foraging
- Keeps kill_score configurable for balance tuning
Co-Authored-By: Claude <noreply@anthropic.com>
All acceptance criteria met:
- No /r2/ paths in source code
- Build succeeds
- No r2.aicodebattle.com references in dist
Work was completed in commit 76369b5 on 2026-06-16.
- Update R2_COMMENTARY_BASE constant from '/r2' to '/b2'
- Storage migrated from Cloudflare R2 to Backblaze B2
- All data-fetch URLs now use b2.aicodebattle.com subdomain
Co-Authored-By: Claude <noreply@anthropic.com>
- Update docs-api.ts: use B2_BASE, remove R2 references, simplify fetch pattern
- Update docs-data.ts: replace R2 constant with B2
- Update docs-replay-format.ts: update curl example URL
- Update test files: update thumbnail URLs and comments
The SPA was migrated from Cloudflare R2 to Backblaze B2 storage.
All data-fetch URLs now point to b2.aicodebattle.com.
Cloudflare R2 was never the intended storage layer — plan.md correctly
specifies Backblaze B2 via Cloudflare Bandwidth Alliance. Remove the
Cloudflare R2 Setup section from the phase6 checklist, replace all
r2.aicodebattle.com URLs with b2.aicodebattle.com, fix the data flow
diagram to show K8s cluster as write-only compute (battles + replay
building) with no inbound user traffic, and update spa-route-test-results
to reference /b2/ paths consistently.
Verified the acb-enrichment deployment state:
- Deployment file is ENABLED (not .disabled)
- Image SHA is REAL (sha-97b4b0f, not placeholder)
- Task description premises were incorrect
Infrastructure blocker confirmed:
- Forgejo registry down (503 Service Unavailable)
- Pods stuck in Pending due to cluster CPU exhaustion
- 20+ pods Pending for 40+ days across cluster
Code requirements fully met - deployment requires infrastructure intervention.
All code requirements met:
- Source code at cmd/acb-enrichment/ (405 lines)
- Dockerfile valid (multi-stage build with golang:1.25-alpine)
- Deployment manifest has real SHA (sha-97b4b0f), not placeholder
- Deployment IS enabled (replicas: 1)
- WorkflowTemplate exists in declarative-config
Infrastructure blockers (outside scope):
- Forgejo registry down (CPU exhaustion on apexalgo-iad)
- No iad-ci kubeconfig to trigger builds
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Verified code requirements: source, Dockerfile, manifest all complete
- Found deployment manifest has real SHA (sha-97b4b0f), not placeholder
- Identified 2 blockers: no iad-ci kubeconfig access, Forgejo registry down
- Old ReplicaSets have placeholder SHAs but current spec is correct
- Documented manual trigger command for when infra is fixed
Code requirements verified complete:
- Enrichment source exists at cmd/acb-enrichment/
- Dockerfile valid (golang:1.25-alpine)
- Deployment already enabled with real SHA sha-97b4b0f
Infrastructure blocker:
- Forgejo registry down (503/no available server)
- Forgejo pods Pending due to insufficient CPU on apexalgo-iad
- Cannot build/pull images until registry is restored
Task description conditions already resolved:
- No placeholder SHA (has real SHA)
- No .disabled file (deployment already enabled)
- Webhook triggered but will fail due to registry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update .trigger-build timestamp to trigger acb-images-build workflow
and build fresh acb-enrichment image for deployment.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Verified code requirements are complete
- Deployment manifest has real SHA (sha-97b4b0f), not placeholder
- No .disabled file exists - deployment already enabled
- Manifests synced between ai-code-battle and declarative-config
- Infrastructure blocker: Forgejo registry down on apexalgo-iad
- Cannot trigger CI: no iad-ci kubeconfig access
Task blocked on multiple infrastructure issues:
1. Missing forgejo-container-registry secret in ai-code-battle namespace
2. iad-ci CI cluster timeout issues preventing builds
3. apexalgo-iad cluster CPU exhaustion
Manifests are correctly configured but deployment cannot proceed
until infrastructure is fixed.
Update acb-enrichment-deployment.yml to use SHA 97b4b0f which is the
commit that triggered the acb-images-build workflow for the enrichment
image. This aligns with declarative-config.
The enrichment Dockerfile was verified as valid. The acb-enrichment
build is now included in acb-images-build workflow (added via
declarative-config commit ce48ad2).
Align deployment with CI/CD pattern:
- Image: forgejo.ardenone.com/ai-code-battle/acb-enrichment:sha-8f1dcc4
- Pull secret: forgejo-container-registry
- ArgoCD annotations configured for Forgejo registry
The acb-images-build workflowtemplate in iad-ci builds this image
and pushes to the Forgejo container registry.