Pokémon Random Battle
- Score
- 0.0
- Wallet spend
- $0.32 of $10
- Model cost
- $15.80
- Agent time
- 5h 9m
- Steps
- 235
- Tokens in / out
- 49.0M / 188k
- Self-checks
- 4 passed of 4 used
- Rank at $10 wallet
- 4th of 14
Score
0.0raw metric 0.492
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
- 1476
- draws
- 0
- losses
- 1524
- capped_games
- 0
- opponent_forfeits
- 1
- move_timeout_forfeits
- 0
- paired_standard_error
- 0.0082
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 with no learned weights. architecture.json sets base_model and base_revision to "none" and tra
This is a search-only bot with no learned weights. architecture.json sets base_model and base_revision to "none" and training.performed to false. It declares the reused code separately: Foul Play at revision 6c467c081e862fb321adb405355beb41aba8e226 (GPL-3.0, license file shipped), the organizer-built poke-engine 0.0.48 wheel and the task-supplied foul-play-priors.json. The trajectory backs this up. Step 27 copies fp/ from the task-supplied Foul Play source, the license, the task priors and the organizer's engine wheel into the output directory, and no edit_file call ever touches the shipped fp/ files. The poke-engine wheel has an approved trusted binary audit. warmup_state.txt is a serialized engine state captured from a development battle (trajectory#209 copies it into the output). It is used only to warm up the search and never to make a decision. No training took place, so there is no training data whose provenance needs checking.
✓actual served policyserve.sh installs the vendored wheels offline and runs server.py. POST /act shards each observation by a game fingerprin
serve.sh installs the vendored wheels offline and runs server.py. POST /act shards each observation by a game fingerprint to local worker processes. Each worker rebuilds or advances a Foul Play Battle from public_log and the player's own request, then picks an action through one of three paths: a forced single legal action, a Revival Blessing comparison using local poke-engine MCTS, or MCTS over hidden states sampled from the shipped priors with deterministic argmax selection. If anything fails, a local heuristic scores the supplied action_features. These paths match what README.md and architecture.json describe. No remote decision service is involved: RandomBattleMode is built with priors loaded from the local file, and the datasets' remote initialize() download path is never called.
✓permitted informationInference uses only the observation's request (the player's own side), public_log, legal_actions and action_features, pl
Inference uses only the observation's request (the player's own side), public_log, legal_actions and action_features, plus public mechanics data and the priors. The fingerprint is built from the player's own team and the opening log lines, and it is only used to cache per-game parser state. It does not detect test cases or look up stored answers. The serving path contains no simulator process inspection, no access to the opponent's private state or RNG, and no network calls. During development the participant ran games on the dev schedule (schedule(128,'dev')) through /task/validate.py, which is allowed. The /proc scans in the trajectory only located and killed the participant's own server process during development.
✓harness credentials used only by the harnessSearching the trajectory found no command that reads, echoes, copies or uses harness API keys or base URLs. The only API
Searching the trajectory found no command that reads, echoes, copies or uses harness API keys or base URLs. The only API_KEY or BASE_URL hits are the spin documentation text and Foul Play source constants. There is no direct model-API call from the participant's code and no extra claude, codex or similar CLI session. Spin was used only for compute machines that ran validation, and only bot code was uploaded to them (e.g. trajectory#185).
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.
- 1passed4h 53m into the runtook 2m 30s
startup 1.9 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 342 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.750 s, p95 0.776 s. Grading forfeits every game in a l
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 1.9 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.86 s round trip on this side with the transport: [1, 7, 3, 7, 5, 5, 7, 11, 10, 11, 7, 0, 7, 11, 9, 5, 9, 9, 0, 7, 5, 11, 11, 9, 0, 11, 5, 0, 9, 11, 8, 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), 104 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3533 observations, 24-32 per batch, up to 342 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 342 KB; the first a cold batch of 32) took longer than 1 s on the trusted in-sandbox move timer; median 0.750 s, p95 0.776 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.755 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
- 2passed4h 57m into the runtook 3m 19s
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.06 s round trip on this side with the transport: [1, 7, 3, 7, 0, 5, 7, 11, 10, 11, 7, 0, 9, 11, 1, 5, 9, 9, 5, 7, 5, 11, 11, 9, 0, 11, 5, 0, 9, 11, 8, 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), 86 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3533 observations, 24-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 (24-32 observations, up to 333 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.751 s, p95 0.789 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.756 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
- 3passed5h 3m into the runtook 2m 30s
startup 1.7 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.7 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.89 s round trip on this side with the transport: [1, 7, 3, 7, 5, 5, 7, 11, 10, 11, 7, 0, 7, 11, 1, 5, 9, 9, 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), 86 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3553 observations, 23-32 per batch, up to 334 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 334 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.801 s, p95 0.845 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.806 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
- 4passed5h 6m into the runtook 2m 17s
startup 1.8 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.8 s
- ✓POST /act, round 1 · 32 opening decisions answered with legal actions, 0.84 s round trip on this side with the transport: [1, 7, 3, 7, 5, 5, 7, 11, 10, 11, 7, 0, 9, 11, 9, 5, 9, 11, 0, 7, 5, 11, 11, 9, 0, 11, 5, 0, 9, 11, 8, 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), 82 finished games replaced by further development-seed matchups, against the pinned Foul Play: 3538 observations, 24-32 per batch, up to 322 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 322 KB; the first a cold batch of 32) on the trusted in-sandbox move timer; median 0.772 s, p95 0.804 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.776 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. The bot in /workspace/output/ is a search-based Gen 9 Random Battle player built on the pinned Foul Play code with three changes: deterministic MCTS argmax instead of upstream's randomized near-best pick, inline search in 8 game-affinity worker processes with cached incremental battle tracking, and a deadline-aware budget (learned per-worker overhead, planning reserve, superseded-turn sync) so batches of 32 answer inside 1 second.
Verified results: exact-mirror control scored 64/128 (confirming no pipeline bias); the final design at ~210 ms search scored 277/512 (54.1%, paired SE ≈2 pts) in development battles; the production configuration answered 4,448/4,451 decisions in-deadline on a slow shared host. All 4 frontier selfcheck runs passed on H100 (final tree: startup 1.8 s, median response 0.772 s, p95 0.804 s, projected execution 2,890 s of 18,000 s). A regression test for the cache-key bug found during development is included in tests/test_fingerprint.py, with provenance in architecture.json and README.md.