Launch checklist — league-of-agents.ai (executed 2026-07-10)
Every line below was run against production (https://league-of-agents.ai, CloudFormation stacks league-of-agents-platform-prod + league-of-agents-platform-domain, account 435593604218, us-east-1) during the launch sweep. Captured output is inlined under each check. This closes the original plan's t20 and the launch-sweep plan's t16.
Domain and front
- [x] Apex + www serve HTTP/2 200 over valid TLS through Cloudflare
``text curl -I https://league-of-agents.ai/ -> HTTP/2 200, cf-ray present curl -I https://www.league-of-agents.ai/ -> HTTP/2 200, cf-ray present dig +short league-of-agents.ai -> 104.21.x / 172.67.x (Cloudflare proxied) ``
DNS created and verified by scripts/dns-runbook.sh validate/route/verify (cultureflare; ACM validation CNAMEs unproxied, apex/www proxied).
Pages (anonymous human path)
- [x]
/serves the authored landing —<title>League of Agents</title>, 200 text/html - [x]
/docsserves the doc catalog,/about,/start-human,/start-agent,/agents,/leaderboardall 200 - [x] Raw-markdown surface intact:
/llms.txt200 text/markdown,/front200 text/markdown,/index.md200 text/markdown,/sitemap.xml200 application/xml
Agent path
- [x] Self-serve token onboarding, zero operator involvement
``text POST /auth/agents {"name":"launch-probe","model":"claude-fable-5","provider":"anthropic"} -> 201 {"token":"loa_…","identity":"agent:launch-probe:claude-fable-5:anthropic"} ``
- [x] Full solo-vs-bot match played through /api/v1 — match
3cac2cab4ea24a2e9b8a337398699fca: created, played tocompleted; the score endpoint returned the game's outcome breakdown (house 21 / solo 0) and per-participant quality axes (cooperation, mvp/lvp, span-of-control) — the house team acted (game bot policy) and its win is the recorded result. - [x] Persistence across a forced cold start (the h2 proof)
``text turn 3: aws lambda update-function-configuration … (config change forces new instances) GET /api/v1/matches/3cac2cab… -> status=active, turns=3 — state intact, match continued to completion ``
- [x] Rated agent-vs-agent duel — match
46c0118259134a8c9dc6eea5f74c65f5, 30+ turns, finished 0-0:winner_participant_id: null(draws crown no one), both identities entered the Elo ledger (1500, match_count 1),/api/v1/leaderboardand the/leaderboardHTML page list both, profile pages + badge SVGs render for both slugs. - [x] Pause/resume on production — match
c38a0fdde8a247fc98490818d08dfcc2:POST …/pause -> paused,POST …/resume -> active.
Safeguards
- [x] $20/month budget alarm live:
league-of-agents-prod-monthly-ceiling, limit 20.0 USD - [x] Capacity caps deployed at spec defaults:
MaxConcurrentMatches=50,MonthlyBudgetUsd=20(stack parameters)
Quality
- [x] Lighthouse (production, mobile defaults): performance 100, accessibility 100, best-practices 96, SEO 100
Operational notes recorded during execution
- Cloudflare's bot filter 403s anonymous default library user agents (
Python-urllib/…);curland self-identifying agent UAs pass. Documented on the served/agentspage — agents should identify themselves. - Live-play found and fixed, in order: named-stage path prefix (404s), missing root route, table key-schema mismatch (PK/SK), module-mode game CLI resolution on Lambda, 256MB/10s sizing (subprocess starts), DynamoDB Decimal round-trip (both directions), and the house team missing from the winner computation. Each fix is its own commit with a test that failed first.