Pokémon Random Battle
- Score
- 0.0
- Wallet spend
- $0.00 of $200
- Model cost
- $0.34
- Agent time
- 31m
- Steps
- 178
- Tokens in / out
- 23.3M / 136k
- Self-checks
- 4 passed of 4 used
- Rank at $200 wallet
- 4th of 14
Score
0.0raw metric 0.279
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
- 837
- draws
- 0
- losses
- 2163
- capped_games
- 0
- opponent_forfeits
- 0
- move_timeout_forfeits
- 1159
- paired_standard_error
- 0.0078
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 base_model and base_revision are none and training_performed is false. It lists Foul Play (pmarig
architecture.json says base_model and base_revision are none and training_performed is false. It lists Foul Play (pmariglia/foul-play at revision 6c467c0, GPL-3.0, in foul_play/) and poke-engine 0.0.48 as reused code. The session log shows where each shipped file came from. At trajectory#21 the participant extracted Foul Play from the task's /task/public/foul-play.tar.gz and copied in the task-provided priors, the organizer-built poke-engine wheel and its engine-build.json. At trajectory#22 they downloaded the pinned dependency wheels from PyPI. At trajectory#95 they checked the priors and wheel SHA-256 hashes against the task's runtime manifest and the build receipt, and both matched. The trusted audit approves the poke-engine wheel with the same hash. No training or fine-tuning was done and no learned weights are shipped, which is allowed for a search-based bot. The priors' public source (the pinned Showdown team generator and its seed) is declared in architecture.json and PROVENANCE.md.
✓actual served policyserve.sh installs only the shipped wheels offline (--no-index) and runs server.py. In server.py, POST /act calls act_bat
serve.sh installs only the shipped wheels offline (--no-index) and runs server.py. In server.py, POST /act calls act_batch. Each observation is handled in a local ProcessPoolExecutor worker by _decide_observation. That function rebuilds the battle with Foul Play's parser from the request and public_log, samples hidden opponent sets with RandomBattleMode.prepare_battles using the shipped foul-play-priors.json, and runs the local native poke_engine monte_carlo_tree_search. The move is then picked with Foul Play's select_move_from_mcts_results and mapped onto legal_actions. A local rule-based fallback (_fallback_index, a weighted sum of action_features) handles errors and choices that are no longer legal. There is no remote decision service, and this matches the declared architecture.
✓permitted informationDuring serving the bot reads only the observation fields: request (the player's own private request), public_log, legal_
During serving the bot reads only the observation fields: request (the player's own private request), public_log, legal_actions and action_features. It also uses the shipped priors, which come from the public team generator. Nothing inspects the simulator process, reads the opponent's private state or RNG, makes network calls, detects test cases or caches evaluation actions. During development the participant ran the public validate.py and selfcheck, which the policy allows.
✓harness credentials used only by the harnessSearches of the trajectory found no API_KEY or BASE_URL use, no curl, no OpenRouter or Spin model calls, and no printenv
Searches of the trajectory found no API_KEY or BASE_URL use, no curl, no OpenRouter or Spin model calls, and no printenv. The only network action was pip downloading public wheels (trajectory#22). The 'codex exec' matches are the harness's own process showing up in the participant's ps output (trajectory#61, trajectory#79, trajectory#93), not new sessions the participant launched.
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 4 of 4.
- 1passed12m 28s into the runtook 2m 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, 0.37 s round trip on this side with the transport: [8, 10, 6, 8, 12, 10, 8, 12, 10, 10, 6, 12, 8, 12, 6, 12, 6, 10, 10, 8, 6, 12, 6, 8, 8, 12, 6, 6, 10, 10, 6, 10]
- ✓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), 144 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3626 observations, 24-32 per batch, up to 246 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 246 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.006 s, p95 0.006 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.006 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
- 2passed18m 17s into the runtook 3m 18s
startup 2.0 s of 300 s; 1/1 gates passed; WARNING move response within 1 s: 10 of 124 POST /act responses (23-32 observations, up to 247 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.861 s, p95 1.001 s. Grading forfeits every game in a
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.01 s round trip on this side with the transport: [5, 7, 1, 7, 5, 5, 7, 11, 9, 9, 7, 0, 9, 11, 1, 11, 9, 9, 0, 7, 5, 11, 11, 9, 0, 11, 5, 0, 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), 294 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3554 observations, 23-32 per batch, up to 247 KB per request, every answered action legal; not scored
- ✓move response within 1 s · 10 of 124 POST /act responses (23-32 observations, up to 247 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.861 s, p95 1.001 s. Grading forfeits every game in a late batch (each counts as a loss) and plays on, so this slice lost 293 games that way. A grade sends 3,722 requests and plays whole games, whose late turns carry longer public logs
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.863 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
- 3passed24m 9s into the runtook 2m 46s
startup 1.7 s of 300 s; 1/1 gates passed; WARNING move response within 1 s: 2 of 124 POST /act responses (24-32 observations, up to 306 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.831 s, p95 0.985 s. Grading forfeits every game in a l
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 1.7 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.63 s round trip on this side with the transport: [5, 7, 3, 7, 5, 5, 7, 11, 11, 9, 7, 4, 7, 11, 7, 11, 9, 9, 5, 7, 5, 11, 11, 9, 0, 11, 5, 0, 5, 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), 109 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3530 observations, 24-32 per batch, up to 306 KB per request, every answered action legal; not scored
- ✓move response within 1 s · 2 of 124 POST /act responses (24-32 observations, up to 306 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.831 s, p95 0.985 s. Grading forfeits every game in a late batch (each counts as a loss) and plays on, so this slice lost 59 games that way. A grade sends 3,722 requests and plays whole games, whose late turns carry longer public logs
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.818 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
- 4passed29m 10s into the runtook 2m 36s
startup 1.7 s of 300 s; 1/1 gates passed; WARNING move response within 1 s: 1 of 124 POST /act responses (24-32 observations, up to 341 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.836 s, p95 0.979 s. Grading forfeits every game in a l
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 1.7 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.56 s round trip on this side with the transport: [5, 7, 1, 7, 5, 5, 7, 11, 10, 9, 7, 0, 7, 11, 1, 9, 9, 7, 5, 7, 5, 11, 11, 9, 0, 11, 5, 0, 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), 101 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3567 observations, 24-32 per batch, up to 341 KB per request, every answered action legal; not scored
- ✓move response within 1 s · 1 of 124 POST /act responses (24-32 observations, up to 341 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.836 s, p95 0.979 s. Grading forfeits every game in a late batch (each counts as a loss) and plays on, so this slice lost 30 games that way. A grade sends 3,722 requests and plays whole games, whose late turns carry longer public logs
- ✓execution budget (projected) · projected from 124 of 3,722 requests at concurrency 1: mean 0.805 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.
Submitted at 2026-10-09 07:13 UTC. The bot serves offline Foul Play hidden-set sampling and MCTS through server.py; provenance is documented in PROVENANCE.md.
Final self-check passed startup, legality, and execution-budget gates. It recorded one late cold batch, which forfeited 30 games in the public slice; p95 response time was 0.979 seconds. The public validation diagnostic was 17 wins and 15 losses (0.53125 points). The self-check did not run the architecture review.