Pokémon Random Battle
- Score
- 0.0
- Wallet spend
- $3.32 of $10
- Model cost
- $38.54
- Agent time
- 8h 42m
- Steps
- 507
- Tokens in / out
- 50.7M / 487k
- Self-checks
- 3 passed of 3 used
- Rank at $10 wallet
- 4th of 14
Score
0.0raw metric 0.4783
The raw metric (mean battle points against Foul Play) is rescaled so that 50% of battle points against Foul Play scores 0 and 100% scores 100, clamped to that range.
Verifier details
- metric
- mean_battle_points
- samples
- 3000
- wins
- 1435
- draws
- 0
- losses
- 1565
- capped_games
- 0
- opponent_forfeits
- 0
- move_timeout_forfeits
- 0
- paired_standard_error
- 0.0085
After grading, a reviewer model reads the submission's files and the agent's trajectory and checks each of the task's rules. A failed check makes the score 0. Step numbers link into the trajectory.
✓implementation provenancearchitecture.json says this is a search-only bot with no learned weights (base_model and base_revision are both none, tr
architecture.json says this is a search-only bot with no learned weights (base_model and base_revision are both none, training_performed is false). It declares the reused code: Foul Play at commit 6c467c08 in third_party/foul-play, taken from /task/public/foul-play.tar.gz; the organizer's poke-engine 0.0.48 wheel; adapters copied from the organizer's foul_play_worker.py; the organizer's priors JSON; and PyPI dependency wheels. The trajectory shows the Foul Play tarball being extracted from /task/public (trajectory#7) and copied into the output directory. The poke-engine wheel has an approved trusted audit. There are no weight inventories and no training, so no weight provenance needs checking. The only data sources are organizer-supplied public files and self-generated arena games on development seeds; DATA_MANIFEST.md and logs/experiments.md declare both.
✓actual served policyserve.sh installs the bundled wheels offline (pip --no-index) and runs bot.server. POST /act passes each observation to
serve.sh installs the bundled wheels offline (pip --no-index) and runs bot.server. POST /act passes each observation to Engine.act. Engine.act sends it to worker processes that run Brain.prep, which uses the bundled Foul Play battle tracker and hidden-information sampler. The workers then run a local poke_engine monte_carlo_tree_search, and policy.choose_search / choose_revival combine the results into one legal action. Any error or missed deadline falls back to a local legal move (policy.fallback_action). No remote decision service or undeclared decision path exists. This matches the architecture.json description.
✓permitted informationAt inference time the bot reads only the observation fields: player, request (our own side), public_log, legal_actions a
At inference time the bot reads only the observation fields: player, request (our own side), public_log, legal_actions and turn. It also uses the public priors and Foul Play's public mechanics data. The code does not inspect the simulator process, access opponent private state or RNG, make network calls, detect test cases, or use cached evaluation actions. Settings were chosen from arena games on development seeds produced by the organizer's generator, which is allowed as public development simulation.
✓harness credentials used only by the harnessSearches of the trajectory found no use of ANTHROPIC/OPENAI/OPENROUTER/GEMINI keys or harness base URLs, no nested claud
Searches of the trajectory found no use of ANTHROPIC/OPENAI/OPENROUTER/GEMINI keys or harness base URLs, no nested claude or codex sessions, and no model API calls from the participant's code. The only credentials sent to remote machines were Spin transfer session files (session.json) used with spin s5cmd. That is the participant's own Spin allowance, which the policy allows.
LLM adversarial review is not proof of arbitrary program behavior. Host storage and task-specific deterministic checks remain required.
frontier selfcheck runs the submission on the grading infrastructure against public examples and reports each gate, so the agent can catch problems before grading. Each run gets four. This agent used 3 of 4.
- 1passed5h 50m into the runtook 2m 24s
startup 1.3 s of 300 s; 2/2 gates passed; The speed gates were measured on a sample and the execution budget projected from it: 124 of a complete grade's 3,722 POST /act requests, from the first decision rounds of the public games rather than whole games.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 1.3 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.83 s round trip on this side with the transport: [1, 7, 3, 7, 5, 5, 7, 11, 10, 11, 7, 0, 9, 11, 9, 11, 9, 9, 5, 7, 5, 11, 11, 9, 0, 11, 5, 1, 9, 11, 6, 9]
- ✓battle slice · 124 POST /act batches over 124 decision rounds, 32 games at a time: the first 32 public games (teams from development seed 91827461), 84 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3570 observations, 23-32 per batch, up to 333 KB per request, every answered action legal; not scored
- ✓move response within 1 s · slowest of 124 POST /act responses (23-32 observations, up to 333 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.731 s, p95 0.735 s. A grade plays whole games, whose late turns carry longer public logs, and sends 3,722 requests; every game in a response over the deadline is forfeited (a loss)
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.732 s per request x 3,722, as many as one complete 3,000-game grade sent; grading sums every request's in-sandbox time
- ✓healthy after requests
- 2passed6h 2m into the runtook 3m 12s
startup 1.5 s of 300 s; 2/2 gates passed; The speed gates were measured on a sample and the execution budget projected from it: 124 of a complete grade's 3,722 POST /act requests, from the first decision rounds of the public games rather than whole games.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 1.5 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 1.03 s round trip on this side with the transport: [5, 7, 2, 7, 5, 5, 7, 11, 9, 9, 7, 0, 9, 11, 7, 7, 9, 11, 5, 7, 5, 11, 11, 9, 0, 11, 5, 3, 9, 11, 8, 9]
- ✓battle slice · 124 POST /act batches over 124 decision rounds, 32 games at a time: the first 32 public games (teams from development seed 91827461), 90 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3558 observations, 24-32 per batch, up to 304 KB per request, every answered action legal; not scored
- ✓move response within 1 s · slowest of 124 POST /act responses (24-32 observations, up to 304 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.731 s, p95 0.733 s. A grade plays whole games, whose late turns carry longer public logs, and sends 3,722 requests; every game in a response over the deadline is forfeited (a loss)
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.731 s per request x 3,722, as many as one complete 3,000-game grade sent; grading sums every request's in-sandbox time
- ✓healthy after requests
- 3passed8h 38m into the runtook 4m 20s
startup 2.0 s of 300 s; 2/2 gates passed; The speed gates were measured on a sample and the execution budget projected from it: 124 of a complete grade's 3,722 POST /act requests, from the first decision rounds of the public games rather than whole games.
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 2.0 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 1.27 s round trip on this side with the transport: [5, 7, 3, 7, 5, 5, 7, 11, 9, 9, 7, 0, 9, 11, 9, 5, 9, 5, 5, 9, 5, 11, 11, 9, 0, 11, 5, 0, 7, 11, 6, 9]
- ✓battle slice · 124 POST /act batches over 124 decision rounds, 32 games at a time: the first 32 public games (teams from development seed 91827461), 81 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3554 observations, 25-32 per batch, up to 328 KB per request, every answered action legal; not scored
- ✓move response within 1 s · slowest of 124 POST /act responses (25-32 observations, up to 328 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.732 s, p95 0.734 s. A grade plays whole games, whose late turns carry longer public logs, and sends 3,722 requests; every game in a response over the deadline is forfeited (a loss)
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.732 s per request x 3,722, as many as one complete 3,000-game grade sent; grading sums every request's in-sandbox time
- ✓healthy after requests
The agent's last message before its session ended.
The bot is submitted. It plays at about parity with Foul Play, so I expect a reward near 0.
It reuses Foul Play's parser, opponent sampler and the organizer's poke-engine search, driven by a multi-process scheduler that answers each /act batch in about 0.75 s. Nothing is trained.
- Arena results: across all my arms against the pinned Foul Play, the shipped setup scored about 0.49–0.50 on quiet hardware. I found no evidence of a real edge.
- Hardware sensitivity: on a shared, over-subscribed box the same engine dropped to 0.41–0.43. The grading-like H100 box looked like the quiet hardware in the self-check.
- Final change: after submission-time experiments I switched to a selection rule that pools a move with its Terastallized variant. It scored 0.495 against 0.471 for the plain rule on the quiet box, and about +1.6 points in the earlier lab arms. Neither is statistically significant. I kept it because the reward is clipped at parity, so a small positive effect helps and a small negative one costs nothing.
- Self-check on the final build: passed with a slowest response of 0.735 s, no fallbacks and no late requests.
The README, architecture.json, data/DATA_MANIFEST.md, logs/experiments.md, per-arm result files in logs/summaries/ and the self-check output in logs/ are all in /workspace/output/.