Pokémon Random Battle
- Score
- 0.0
- Wallet spend
- $0.00 of $10
- Model cost
- $20.05
- Agent time
- 1h 26m
- Steps
- 235
- Tokens in / out
- 30.0M / 75k
- Self-checks
- 2 passed of 2 used
- Rank at $10 wallet
- 4th of 14
Score
0.0raw metric 0.121
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
- 363
- draws
- 0
- losses
- 2637
- capped_games
- 0
- opponent_forfeits
- 0
- move_timeout_forfeits
- 118
- paired_standard_error
- 0.0058
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 provenanceThis is a search-only bot. It ships no checkpoint and does no training. architecture.json gives base_model and base_revi
This is a search-only bot. It ships no checkpoint and does no training. architecture.json gives base_model and base_revision as none. It declares reused Foul Play (GPL-3.0, commit 6c467c08…) and poke-engine 0.0.48 separately, and declares priors.json as coming from /task/public/foul-play-priors.json. PROVENANCE.md says the same. The trajectory agrees: Foul Play was unpacked from the task-supplied /task/public/foul-play.tar.gz into /tmp/fp. At trajectory#200 the participant copied that tree, the downloaded wheels and the task priors file into the output directory. At trajectory#195 the dependency wheels were downloaded from PyPI with pip. Trusted audits approve the poke-engine wheel (organizer-built) and the PyPI wheels (e.g. requests), matched by digest. No training data or weights are involved.
✓actual served policyserve.sh installs the vendored wheels offline and then runs server.py. server.py starts worker.py as a subprocess and se
serve.sh installs the vendored wheels offline and then runs server.py. server.py starts worker.py as a subprocess and sends each POST /act batch to it. worker.py runs a pool of processes. Each process uses Foul Play's parser to rebuild the battle from the observation's own request and public_log, and Foul Play's random-battle sampler (fed with priors.json) to sample the hidden opponent state. It then runs a local poke-engine search: MCTS by default, or iterative-deepening expectiminimax if SEARCH_MODE=id. The move comes from visit share and mean score, with a margin required before using Terastallization. If time runs out or something fails, a local linear heuristic over action_features picks the move, and index 0 is the final fallback. Every action path is local, declared and shipped. There are no remote calls, and no learned-model claims to check against the code.
✓permitted informationAt inference the code reads only the observation fields obs.request (the player's own request), public_log, legal_action
At inference the code reads only the observation fields obs.request (the player's own request), public_log, legal_actions, action_features, player and turn, plus the public set priors and Foul Play's public mechanics data. The per-battle cache is keyed on the player's own team and the opening public log. It only speeds up replaying the log and stores no evaluation answers. There is no network use, no inspection of the simulator process, no access to the opponent's private state or RNG, and no detection of test cases. In development the participant played local simulated games against Foul Play and read a few lines of public validation.jsonl, both of which are allowed.
✓harness credentials used only by the harnessThe harness was grok-build. Searching the trajectory for API_KEY, BASE_URL, printenv, curl and grok invocations found no
The harness was grok-build. Searching the trajectory for API_KEY, BASE_URL, printenv, curl and grok invocations found no participant command that reads, echoes or copies harness credentials, or calls a model API. Every curl call targets the local 127.0.0.1:8000/health endpoint. The only 'grok' command line appears inside ps output of the harness's own process. The participant only ran 'spin --help' and launched no extra agent sessions.
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 2 of 4.
- 1passed1h 13m into the runtook 2m 45s
startup 2.9 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.9 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 1.00 s round trip on this side with the transport: [1, 7, 1, 7, 5, 5, 7, 11, 10, 9, 7, 0, 7, 11, 1, 7, 9, 11, 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), 99 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3566 observations, 25-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 (25-32 observations, up to 304 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.759 s, p95 0.917 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.762 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
- 2passed1h 18m into the runtook 2m 10s
startup 3.2 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 3.2 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.68 s round trip on this side with the transport: [5, 7, 1, 7, 0, 0, 7, 11, 10, 9, 7, 0, 9, 11, 1, 5, 9, 11, 5, 7, 5, 11, 11, 9, 0, 11, 5, 0, 5, 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), 97 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3607 observations, 25-32 per batch, up to 321 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 321 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.669 s, p95 0.700 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.661 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 Gen 9 Random Battle bot is submitted. It serves decisions through POST /act and searches with the pinned poke-engine, using Foul Play only to parse the visible battle and sample hidden sets.
Each battle stays on one parser so the public log is applied incrementally and the previous choice is available for speed inference. A desynchronized cache is rebuilt from the full log before search. Move choice is the visit-weighted result of a fixed-iteration Monte Carlo search, with Terastallization taken only when it is clearly ahead. The search budget is split across the batch so a full request of 32 stays inside the one-second limit.
On the H100 self-check, startup was 3.2 seconds, the slowest batch was 0.71 seconds against a 1.0 second limit, and the projected execution time was about 2,460 seconds of the 18,000-second budget. Local two-core games are not a fair read of the eight-core grader, where each decision gets several times more search.