Skip to content

Claude Sonnet 5.5 (effort default (no --effort flag) · thinking on) on Stress-test a small multiplayer game server, then write a minimal crash reproducer and a fix that holds up under hidden stress tests

AClaude Sonnet 5.5default · thinking on · Claude Code 2.1.299 (headless -p) · cloud · 2026-10-25 · by @bobsiopener

Trust 80%Fully autonomoussuccess · first try
Estimated cost
$0.08
Wall time
17s
Human step-ins
0
Outcome
Pass

Compare with other models on this task →

Summary

Exact prompt

# Stress-test a small multiplayer game server, find the bug that crashes it, write a minimal reproducer and fix it `game/` is a small synthetic multiplayer city-builder server that runs in-process, with no network and no ports; `SPEC.md` says how it must behave. Players report that the server sometimes crashes during busy sessions. Everything is synthetic and offline; don't open any network port. Rules: - You may edit files under `game/` (that is the fix) as well as writing under `out/`; this overrides the general rule below. - Find the crash: a sequence of client messages (several clients may send in the same tick) that makes `Server.process` raise. There is one such bug. - Reproducer: write `out/repro.py`, at most 60 lines, that drives the server through `game.server` or `game.sim` (it is run from the folder root with the folder on PYTHONPATH, as `python3 out/repro.py`). On the code as shipped, it must crash with the server's own uncaught exception, raised inside `game/`. Once the bug is fixed, it must run cleanly and exit 0. - Fix: edit the code under `game/` so that the server never raises and follows SPEC.md, including on your reproducer's input. A rejected request must change nothing, so swallowing exceptions is not a fix if it leaves half-done changes. Keep the public API unchanged. - No regression: behaviour on normal sessions must stay exactly as it was (same replies and the same `world.snapshot()` after every tick). - Write `out/bug.json`: `{"exception": "<exception type raised>", "crash_module": "<path of the game/ file where it is raised, e.g. game/x.py>", "trigger": "<one sentence>"}`. ## How this run works - Work on your own: nobody will answer questions in this task, and writing to `ask/` counts against the run. - Write only under `out/`. Create `out/` if it is missing. Inputs are synthetic; don't fetch anything from the network. - Scoring is partial credit: each listed check is pass/fail, and the score is the share passed. Numbers are compared to within 0.005 unless the task says otherwise.

A small synthetic in-process multiplayer city-builder server (no network) has one seeded crash bug; the bug type and the module it lives in vary by seed. The agent must find a message sequence that crashes it, write a reproducer of at most 60 lines, and fix the code. Scoring runs the reproducer against the shipped and fixed code, replays hidden stress and fuzz sessions against the spec, and replays normal sessions to catch regressions. Swallowing exceptions is not a fix, because a rejected request must change nothing. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).

Success criteria: repro_crashes_original repro_clean_once_fixed fix_survives_stress no_regression bug_report

Setup notes: Batch 37 case ty01-game-server-crash-repro-fix (offline, synthetic inputs, seed 938324377). Autonomous case: no stand-in user and no step-ins expected; any file the solver wrote to ask/ is counted as a measured intervention (0) and blocks a pass. Prompt = TASK.md verbatim. Hidden key kept outside the solver's work dir. Scored with the case's scorer (python3 score.py WORKDIR KEYDIR, absolute paths); pass = every check true and no ask/ files. Tools: Read/Write/Edit/Glob/Grep/Bash, web disabled. Single run, no retries. 1-min load average at scoring 0.45 (8 cores). Time-zone results depend on the system time-zone database: tzdata 2026c-0+deb13u1 (Python zoneinfo). Scored only inside a bwrap sandbox (bubblewrap 0.12.0): no network, read-only system, case dir and key read-only, only a throwaway copy of the workdir writable. Claude Code's own reported cost for claude-sonnet-5.5: $0.075601. Score: 5/5. Cost is an ESTIMATE: measured tokens x pricing.json list price (Claude Pro subscription, nothing billed); input_tokens include cache reads and writes. Single run.

Estimated cost List-price estimate; not actually billed.

Metrics

Estimated cost
$0.08
Wall time
17s
Human step-ins
0
Turns
5
Model usage
ModelInput tokOutput tokCost
AClaude Sonnet 5.5anthropic/claude-sonnet-5.5effort default (no --effort flag) · thinking on111,6911,624$0.08

Reproduce this run

  1. Use the use case prompt on the use case page.
  2. Same setup: Claude Sonnet 5.5 (anthropic/claude-sonnet-5.5, effort default (no --effort flag) · thinking on) via Claude Code 2.1.299 (headless -p), cloud.
  3. It counts as a success only if it meets every success criterion: repro_crashes_original repro_clean_once_fixed fix_survives_stress no_regression bug_report
  4. Log model, tokens, wall time, human step-ins and the evidence log, then submit it as a reproduction. A different model? Submit a head-to-head rerun.

How runs are scored: Methodology.

Was this useful?

⇄ Rerun on another model

Automated checks

Trust 80% comes from these checks (how Trust % works).

Evidence log
[
 {
  "duration_api_ms": 15795,
  "stop_reason": "end_turn",
  "session_id": "[REDACTED]",
  "total_cost_usd": 0.0756009,
  "usage": {
   "input_tokens": 10,
   "cache_creation_input_tokens": 12352,
   "cache_read_input_tokens": 99329,
   "output_tokens": 1624,
   "output_tokens_details": {
    "thinking_tokens": 338
   },
   "server_tool_use": {
    "web_search_requests": 0,
    "web_fetch_requests": 0
   },
   "service_tier": "standard",
   "cache_creation": {
    "ephemeral_1h_input_tokens": 12352,
    "ephemeral_5m_input_tokens": 0
   },
   "inference_geo": "global",
   "iterations": [
    {
     "input_tokens": 2,
     "output_tokens": 370,
     "cache_read_input_tokens": 24725,
     "cache_creation_input_tokens": 166,
     "cache_creation": {
      "ephemeral_5m_input_tokens": 0,
      "ephemeral_1h_input_tokens": 166
     },
     "type": "message"
    }
   ],
   "speed": "standard",
   "fallback_credit": null
  },
  "modelUsage": {
   "claude-sonnet-5-5": {
    "inputTokens": 10,
    "outputTokens": 1624,
    "cacheReadInputTokens": 99329,
    "cacheCreationInputTokens": 12352,
    "webSearchRequests": 0,
    "costUSD": 0.0756009,
    "contextWindow": 1000000,
    "maxOutputTokens": 128000,
    "thinkingTokens": 338,
    "canonicalModel": "claude-sonnet-5-5",
    "provider": "firstParty",
    "costBasis": "list"
   }
  },
  "permission_denials": [],
  "terminal_reason": "completed",
  "fast_mode_state": "off",
  "fast_mode_disabled_reason": "sdk_opt_in_required",
  "subagent_stats": {
   "spawned": 0,
   "requested": {
    "background": 0,
    "foreground": 0,
    "unset": 0
   },
   "started_in_background": 0,
   "max_depth": 0,
   "spawned_by_subagents": 0,
   "completed": 0,
   "failed": 0,
   "killed": {
    "parent": 0,
    "user": 0,
    "system": 0
   },
   "refused": {
    "depth_limit": 0,
    "concurrency_limit": 0,
    "budget": 0
   },
   "by_type": {}
  },
  "safety_stops": 0,
  "is_error": false,
  "num_turns": 5,
  "subtype": "success",
  "api_error_status": null,
  "result": "The crash is an `IndexError` in `game/handlers/social.py`. A joined player who sends `say` with an empty `text` makes `text[0]` raise.\n\nI fixed it and `out/repro.py` now exits 0. I didn't run the repro against the original code, though. It's the same input as the crash, but I haven't seen it crash. I also didn't compare replies or `world.snapshot()` against the old code on normal sessions, so \"no regression\" is unchecked. The server now replies `bad_text` to an empty message and leaves `chat_count` unchanged.\n\nThe `say` handler used to count the message first and undo the count if it turned out to be rejected. It now checks everything first and only then increments.\n\nI also changed `withdraw` and `accept` in `game/handlers/exchange.py` to reject boolean ids. Before, `True` was treated as offer id 1. That's a small extra fix, not part of the crash.\n\nI didn't find a crash behind the other player reports (trade rush, many builds at once, quiet city). Dividends are already guarded against zero population.\n\n`out/bug.json` records the exception, the module and the empty-text trigger.",
  "ttft_ms": 1980,
  "type": "result",
  "duration_ms": 16142,
  "uuid": "[REDACTED]",
  "ttft_stream_ms": 1385,
  "time_to_request_ms": 161,
  "first_content_frame_ms": 1385,
  "queued_turn_count": 0,
  "result_index": 0
 }
]

Get new runs and ranking changes weekly