[
  {
    "id": "easy_extract_todos",
    "difficulty": "leicht",
    "user_prompt": "In notes.md stehen Sprint-Notizen. Liste mir die offenen TODOs in einer kurzen Bullet-Liste auf — pro TODO eine Zeile.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 147.03255945804995,
      "tokens": 5999,
      "tps": 45.83906990974453,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "soft_mention",
        "label": "Response mentions 3/4 of the key terms",
        "passed": false,
        "detail": "mentioned: [], missing: ['Caching', 'Logging', 'Stripe', 'Safari']"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 3
  },
  {
    "id": "easy_list_then_read",
    "difficulty": "leicht",
    "user_prompt": "Ich weiß nicht mehr, welche Datei in diesem Projekt die Konfiguration enthält. Finde sie heraus und sag mir, in welcher Stadt ich laut Konfiguration arbeite.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 130.89721808303148,
      "tokens": 5999,
      "tps": 45.907388830605946,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_list_files",
        "label": "Tool 'list_files' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "soft_mention",
        "label": "Response mentions 1/1 of the key terms",
        "passed": false,
        "detail": "mentioned: [], missing: ['München']"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 4
  },
  {
    "id": "medium_fizzbuzz_fix",
    "difficulty": "mittel",
    "user_prompt": "fizzbuzz.py hat einen Bug — die Funktion liefert die Werte 1..n-1 statt 1..n. Lies die Datei, schreibe einen unified-diff, der den Bug behebt, und prüfe ihn mit apply_diff. Antworte am Ende mit einer kurzen Erklärung des Fixes.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 131.22267737495713,
      "tokens": 5999,
      "tps": 45.48129016482383,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "called_apply_diff",
        "label": "Tool 'apply_diff' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "args_apply_diff",
        "label": "Arguments for 'apply_diff'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "diff_validates",
        "label": "Diff for fizzbuzz.py validates structurally",
        "passed": false,
        "detail": "applied=0, calls=0"
      },
      {
        "id": "diff_min_changes",
        "label": "Diff changes ≥2 lines",
        "passed": false,
        "detail": "applied: 0"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 6
  },
  {
    "id": "medium_filter_users",
    "difficulty": "mittel",
    "user_prompt": "users.json enthält eine Liste aller Nutzer. Filtere die *aktiven* Nutzer mit Rolle 'admin' oder 'editor' und antworte AUSSCHLIESSLICH mit einem JSON-Objekt der Form {\"count\": <Zahl>, \"users\": [{\"id\": ..., \"name\": ..., \"role\": ...}, ...]}. Keine Markdown-Fences, kein Vor- oder Nachtext.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 131.3130202909233,
      "tokens": 5999,
      "tps": 45.74060213542701,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "json_format",
        "label": "Response contains valid JSON",
        "passed": false,
        "detail": "no parseable JSON in response"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 3
  },
  {
    "id": "medium_weather_alert",
    "difficulty": "mittel",
    "user_prompt": "Lies config.json und hol das Wetter für die dort eingetragene Stadt. Antworte AUSSCHLIESSLICH mit einem JSON-Objekt {\"city\": ..., \"temp_c\": ..., \"condition\": ..., \"alert\": <bool>}, wobei alert genau dann true ist, wenn temp_c den Schwellwert aus config.json überschreitet.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 132.43371266697068,
      "tokens": 5999,
      "tps": 45.12576591861002,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "called_get_weather",
        "label": "Tool 'get_weather' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "args_get_weather",
        "label": "Arguments for 'get_weather'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "json_format",
        "label": "Response contains valid JSON",
        "passed": false,
        "detail": "no parseable JSON in response"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 5
  },
  {
    "id": "hard_rename_function",
    "difficulty": "schwer",
    "user_prompt": "Die Funktion calculate_total in inventory.py soll konsistent zum Projekt-Stil in compute_total umbenannt werden. Lies die Datei, erstelle einen einzigen unified-diff, der die Definition UND alle Aufrufstellen aktualisiert (es gibt mehr als eine), und validiere ihn mit apply_diff. Achte darauf, keine anderen Identifier-Vorkommen zu verändern. Antworte am Ende kurz, wie viele Stellen du geändert hast.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 131.54620012501255,
      "tokens": 5999,
      "tps": 44.71063975889826,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "called_apply_diff",
        "label": "Tool 'apply_diff' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "args_read_file",
        "label": "Arguments for 'read_file'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "args_apply_diff",
        "label": "Arguments for 'apply_diff'",
        "passed": false,
        "detail": "tool not called"
      },
      {
        "id": "diff_validates",
        "label": "Diff for inventory.py validates structurally",
        "passed": false,
        "detail": "applied=0, calls=0"
      },
      {
        "id": "diff_min_changes",
        "label": "Diff changes ≥8 lines",
        "passed": false,
        "detail": "applied: 0"
      },
      {
        "id": "diff_contains_compute_total",
        "label": "Diff contains 'compute_total'",
        "passed": false,
        "detail": "token not found in diff body"
      },
      {
        "id": "diff_contains_calculate_total",
        "label": "Diff contains 'calculate_total'",
        "passed": false,
        "detail": "token not found in diff body"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 8
  },
  {
    "id": "hard_compose_report",
    "difficulty": "schwer",
    "user_prompt": "Erstelle eine Zusammenfassung aus zwei Quellen. Lies users.json und config.json. Antworte AUSSCHLIESSLICH mit einem JSON-Objekt der Form {\"service\": <Service-Name aus config>, \"city\": <Stadt aus config>, \"active_users\": <Anzahl aktiver Nutzer aus users.json>, \"admin_emails\": [<E-Mails aller aktiven Admins, sortiert>]}. Keine Markdown-Fences.",
    "history": [],
    "final_text": "",
    "metrics": {
      "wall_seconds": 131.8319129999727,
      "tokens": 5999,
      "tps": 45.639740768100154,
      "iterations": 0
    },
    "checks": [
      {
        "id": "called_read_file",
        "label": "Tool 'read_file' aufgerufen",
        "passed": false,
        "detail": "history: —"
      },
      {
        "id": "json_format",
        "label": "Response contains valid JSON",
        "passed": false,
        "detail": "no parseable JSON in response"
      }
    ],
    "score": 0.0,
    "passed": 0,
    "total": 2
  }
]