[
  {
    "id": "claude",
    "name": "Claude Code + Sonnet 4.6",
    "seconds": 254.36268067359924,
    "normal_completion": false,
    "termination": "費用予約枠で停止",
    "passed": 20,
    "tests": 20,
    "calls": 16,
    "input_tokens": 119936,
    "output_tokens": 17761,
    "estimated_yen": 92.05478099999999,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 126.39104100000002,
    "source_bytes": 22971,
    "yen_per_passed_check": 4.602739049999999,
    "full_pass_artifact_yen": 92.05478099999999
  },
  {
    "id": "sente",
    "name": "Sente + Sonnet 4.6",
    "seconds": 236.02482104301453,
    "normal_completion": false,
    "termination": "API生成エラー",
    "passed": 20,
    "tests": 20,
    "calls": 24,
    "input_tokens": 89418,
    "output_tokens": 14826,
    "estimated_yen": 72.124668,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 122.69766600000001,
    "source_bytes": 25898,
    "yen_per_passed_check": 3.6062334,
    "full_pass_artifact_yen": 72.124668
  },
  {
    "id": "opencode",
    "name": "OpenCode + Sonnet 4.6",
    "seconds": 295.25546002388,
    "normal_completion": false,
    "termination": "費用予約枠で停止",
    "passed": 20,
    "tests": 20,
    "calls": 22,
    "input_tokens": 105757,
    "output_tokens": 19513,
    "estimated_yen": 89.665002,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 139.915629,
    "source_bytes": 19085,
    "yen_per_passed_check": 4.4832501,
    "full_pass_artifact_yen": 89.665002
  },
  {
    "id": "glm",
    "name": "Sente + GLM-5.3 Flash",
    "seconds": 196.1184549331665,
    "normal_completion": false,
    "termination": "API生成エラー",
    "passed": 3,
    "tests": 20,
    "calls": 2,
    "input_tokens": 5934,
    "output_tokens": 3010,
    "estimated_yen": 0.15101980950000002,
    "uncertain_requests": 1,
    "historical_all_trials_yen": 0.15101980950000002,
    "source_bytes": 9787,
    "yen_per_passed_check": 0.05033993650000001,
    "full_pass_artifact_yen": null
  },
  {
    "id": "hy4",
    "name": "Sente + HY4 Preview",
    "seconds": 279.56500601768494,
    "normal_completion": true,
    "termination": "正常終了",
    "passed": 20,
    "tests": 20,
    "calls": 23,
    "input_tokens": 83601,
    "output_tokens": 16381,
    "estimated_yen": 16.271740904999998,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 16.271740904999998,
    "source_bytes": 20621,
    "yen_per_passed_check": 0.8135870452499999,
    "full_pass_artifact_yen": 16.271740904999998
  },
  {
    "id": "glm52",
    "name": "Sente + GLM-5.2",
    "seconds": 39.35099411010742,
    "normal_completion": true,
    "termination": "正常終了",
    "passed": 20,
    "tests": 20,
    "calls": 7,
    "input_tokens": 22839,
    "output_tokens": 6756,
    "estimated_yen": 2.1359035169999996,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 2.1359035169999996,
    "source_bytes": 17531,
    "failed_tests": []
  },
  {
    "id": "k3",
    "name": "Sente + Kimi K3",
    "seconds": 41.90900111198425,
    "normal_completion": true,
    "termination": "正常終了",
    "passed": 17,
    "tests": 20,
    "calls": 5,
    "input_tokens": 15543,
    "output_tokens": 5913,
    "estimated_yen": 17.596011485308477,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 17.596011485308477,
    "source_bytes": 15302,
    "failed_tests": [
      {
        "name": "01 loads empty with no runtime error",
        "pass": false,
        "error": "Cannot set properties of null (setting 'textContent'); Cannot set properties of null (setting 'textContent')",
        "ms": 605
      },
      {
        "name": "13 global counts correct",
        "pass": false,
        "error": "total wrong",
        "ms": 149
      },
      {
        "name": "15 invalid saved JSON recoverable",
        "pass": false,
        "error": "runtime exception on invalid JSON",
        "ms": 107
      }
    ]
  },
  {
    "id": "fable",
    "name": "Sente + Fable 5.1",
    "seconds": 126.0208969116211,
    "normal_completion": false,
    "termination": "費用予約枠で停止",
    "passed": 20,
    "tests": 20,
    "calls": 8,
    "input_tokens": 23936,
    "output_tokens": 9961,
    "estimated_yen": 108.39927,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 108.39927,
    "source_bytes": 19912,
    "failed_tests": []
  },
  {
    "id": "haiku",
    "name": "Sente + Haiku 4.5",
    "seconds": 142.35962915420532,
    "normal_completion": true,
    "termination": "正常終了",
    "passed": 3,
    "tests": 20,
    "calls": 23,
    "input_tokens": 114824,
    "output_tokens": 13306,
    "estimated_yen": 26.659038,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 26.659038,
    "source_bytes": 19198,
    "failed_tests": [
      {
        "name": "01 loads empty with no runtime error",
        "pass": false,
        "error": "missing empty state",
        "ms": 1232
      },
      {
        "name": "02 create title/notes/priority/due",
        "pass": false,
        "error": "creation failed",
        "ms": 139
      },
      {
        "name": "04 edit title persists",
        "pass": false,
        "error": "locator.click: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Original' }).getByTestId('task-edit')\u001b[22m\n",
        "ms": 3560
      },
      {
        "name": "05 completion toggle reversible and persisted",
        "pass": false,
        "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Toggle me' }).getByTestId('task-toggle')\u001b[22m\n",
        "ms": 3601
      },
      {
        "name": "06 deletion persists",
        "pass": false,
        "error": "locator.click: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Delete me' }).getByTestId('task-delete')\u001b[22m\n",
        "ms": 3582
      },
      {
        "name": "07 case-insensitive title search",
        "pass": false,
        "error": "title search failed",
        "ms": 172
      },
      {
        "name": "08 case-insensitive notes search",
        "pass": false,
        "error": "notes search failed",
        "ms": 168
      },
      {
        "name": "09 status filter active/completed/all",
        "pass": false,
        "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
        "ms": 3660
      },
      {
        "name": "10 priority filter",
        "pass": false,
        "error": "priority filter failed",
        "ms": 172
      },
      {
        "name": "11 filters and search compose",
        "pass": false,
        "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
        "ms": 3661
      },
      {
        "name": "12 empty search state visible",
        "pass": false,
        "error": "no empty search state",
        "ms": 174
      },
      {
        "name": "13 global counts correct",
        "pass": false,
        "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
        "ms": 3660
      },
      {
        "name": "14 multiple tasks survive reload",
        "pass": false,
        "error": "tasks lost on reload",
        "ms": 175
      },
      {
        "name": "15 invalid saved JSON recoverable",
        "pass": false,
        "error": "no task storage key",
        "ms": 60
      },
      {
        "name": "16 title and notes HTML injection prevented",
        "pass": false,
        "error": "task missing",
        "ms": 219
      },
      {
        "name": "18 mobile no overflow and form usable",
        "pass": false,
        "error": "mobile form not usable",
        "ms": 732
      },
      {
        "name": "19 inputs have accessible labels",
        "pass": false,
        "error": "[\"<input type=\\\"text\\\" placeholder=\\\"Task title\\\" id=\\\"taskTitle\\\" data-testid=\\\"task-title\\\" class=\\\"input input-title\\\" required=\\\"\\\">\",\"<textarea placeholder=\\\"Notes (optional)\\\" id=\\\"taskNotes\\\" data-testid=\\\"task-notes\\\" class=\\\"input input-notes\\\" rows=\\\"2\\\"></textarea>\",\"<select id=\\\"taskPriority\\\" data-testid=\\\"task-priority\\\" class=\\\"input\\\">\\n            <option value=\\\"low\\\">Priority: Low</option>\\n            <opt\",\"<input type=\\\"date\\\" id=\\\"taskDue\\\" data-testid=\\\"task-due\\\" class=\\\"input\\\">\",\"<input type=\\\"text\\\" placeholder=\\\"Search tasks...\\\" id=\\\"searchInput\\\" data-testid=\\\"search\\\" class=\\\"input search-input\\\">\",\"<select id=\\\"statusFilter\\\" data-testid=\\\"status-filter\\\" class=\\\"input\\\">\\n          <option value=\\\"all\\\">All</option>\\n          <option value=\\\"act\",\"<select id=\\\"priorityFilter\\\" data-testid=\\\"priority-filter\\\" class=\\\"input\\\">\\n          <option value=\\\"a",
        "ms": 3
      }
    ]
  },
  {
    "id": "opus",
    "name": "Sente + Opus 5",
    "seconds": 408.3564360141754,
    "normal_completion": true,
    "termination": "正常終了",
    "passed": 20,
    "tests": 20,
    "calls": 17,
    "input_tokens": 56810,
    "output_tokens": 35742,
    "estimated_yen": 173.1072,
    "uncertain_requests": 0,
    "historical_all_trials_yen": 173.1072,
    "source_bytes": 23647,
    "failed_tests": []
  }
]