coder-eval 0.12.5__tar.gz → 0.12.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (830) hide show
  1. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/agents.md +6 -8
  2. {coder_eval-0.12.5 → coder_eval-0.12.6}/CHANGELOG.md +63 -0
  3. {coder_eval-0.12.5 → coder_eval-0.12.6}/PKG-INFO +1 -1
  4. {coder_eval-0.12.5 → coder_eval-0.12.6}/action.yml +1 -1
  5. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DIALOG_MODE.md +5 -3
  6. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/TASK_DEFINITION_GUIDE.md +6 -6
  7. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/ANTIGRAVITY.md +3 -2
  8. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/CODEX.md +1 -1
  9. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/HARNESS_PARITY.md +51 -53
  10. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  11. {coder_eval-0.12.5 → coder_eval-0.12.6}/pyproject.toml +1 -1
  12. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/__init__.py +1 -1
  13. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/antigravity_agent.py +20 -11
  14. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/claude_code_agent.py +31 -11
  15. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/codex_agent.py +31 -14
  16. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate_agent.py +27 -4
  17. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/limits.py +9 -7
  18. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/results.py +4 -3
  19. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestrator.py +1 -1
  20. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/pricing.py +17 -11
  21. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/html.py +2 -1
  22. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/termination.py +1 -0
  23. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/collector.py +0 -16
  24. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -1
  25. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -1
  26. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent.py +111 -1
  27. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_antigravity_agent.py +63 -27
  28. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent.py +34 -11
  29. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent.py +74 -3
  30. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_orchestrator.py +44 -0
  31. {coder_eval-0.12.5 → coder_eval-0.12.6}/uv.lock +1 -1
  32. coder_eval-0.12.5/tests/test_visible_turn_cap.py +0 -68
  33. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review-full.md +0 -0
  34. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  35. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review.md +0 -0
  36. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-create-plan.md +0 -0
  37. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-implement-plan.md +0 -0
  38. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-review.md +0 -0
  39. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/harness-candidates.md +0 -0
  40. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/README.md +0 -0
  41. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/contracts.md +0 -0
  42. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/isolation.md +0 -0
  43. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/lint-rules.md +0 -0
  44. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/orchestration.md +0 -0
  45. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/permissions.md +0 -0
  46. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/persistence.md +0 -0
  47. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/reporting.md +0 -0
  48. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/timing.md +0 -0
  49. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/axes.md +0 -0
  50. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/multi-model-review.md +0 -0
  51. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/review-rubric.md +0 -0
  52. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/run-layout.md +0 -0
  53. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/workflows/cr-axis.js +0 -0
  54. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/workflows/cr-parent.js +0 -0
  55. {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude-plugin/marketplace.json +0 -0
  56. {coder_eval-0.12.5 → coder_eval-0.12.6}/.env.example +0 -0
  57. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/CODEOWNERS +0 -0
  58. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  59. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  60. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  61. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/actionlint.yaml +0 -0
  62. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/code_review.md +0 -0
  63. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/dependabot.yml +0 -0
  64. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/pages-stub/index.html +0 -0
  65. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  66. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/harbor_e2e.py +0 -0
  67. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/release_notes.py +0 -0
  68. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/claude-pr-review.yml +0 -0
  69. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/codeql.yml +0 -0
  70. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/conventional-commits.yml +0 -0
  71. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/docker-publish.yml +0 -0
  72. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/docs.yml +0 -0
  73. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/harbor-e2e.yml +0 -0
  74. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/pr-checks.yml +0 -0
  75. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/publish-testpypi.yml +0 -0
  76. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/release.yml +0 -0
  77. {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/verify-published-action.yml +0 -0
  78. {coder_eval-0.12.5 → coder_eval-0.12.6}/.gitignore +0 -0
  79. {coder_eval-0.12.5 → coder_eval-0.12.6}/.pre-commit-config.yaml +0 -0
  80. {coder_eval-0.12.5 → coder_eval-0.12.6}/.python-version +0 -0
  81. {coder_eval-0.12.5 → coder_eval-0.12.6}/ADOPTERS.md +0 -0
  82. {coder_eval-0.12.5 → coder_eval-0.12.6}/CLAUDE.md +0 -0
  83. {coder_eval-0.12.5 → coder_eval-0.12.6}/CODE_OF_CONDUCT.md +0 -0
  84. {coder_eval-0.12.5 → coder_eval-0.12.6}/CONTRIBUTING.md +0 -0
  85. {coder_eval-0.12.5 → coder_eval-0.12.6}/LICENSE +0 -0
  86. {coder_eval-0.12.5 → coder_eval-0.12.6}/Makefile +0 -0
  87. {coder_eval-0.12.5 → coder_eval-0.12.6}/NOTICE +0 -0
  88. {coder_eval-0.12.5 → coder_eval-0.12.6}/README.md +0 -0
  89. {coder_eval-0.12.5 → coder_eval-0.12.6}/SECURITY.md +0 -0
  90. {coder_eval-0.12.5 → coder_eval-0.12.6}/comparison.md +0 -0
  91. {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/Dockerfile +0 -0
  92. {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/Dockerfile.runtime +0 -0
  93. {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/coder_eval_entrypoint.sh +0 -0
  94. {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  95. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/AB_EXPERIMENTS.md +0 -0
  96. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/CI_GATE.md +0 -0
  97. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DATASETS.md +0 -0
  98. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DOCKER_ISOLATION.md +0 -0
  99. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/EXTENDING.md +0 -0
  100. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/PLUGIN.md +0 -0
  101. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/REPORT_SCHEMA.md +0 -0
  102. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/USER_GUIDE.md +0 -0
  103. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/CLAUDE_CODE.md +0 -0
  104. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/DELEGATE.md +0 -0
  105. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/OPENCODE.md +0 -0
  106. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/PI.md +0 -0
  107. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/assets/hero.gif +0 -0
  108. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/comparison.md +0 -0
  109. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/index.md +0 -0
  110. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/llms.txt +0 -0
  111. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/01-first-evaluation.md +0 -0
  112. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/02-ci-pipeline.md +0 -0
  113. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/03-evalboard-local.md +0 -0
  114. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/04-writing-a-task.md +0 -0
  115. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/05-comparing-models.md +0 -0
  116. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/06-use-docker-isolation.md +0 -0
  117. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  118. {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/README.md +0 -0
  119. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/.gitignore +0 -0
  120. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/README.md +0 -0
  121. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  122. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  123. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  124. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  125. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/col-help.tsx +0 -0
  126. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  127. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/harness-badge.tsx +0 -0
  128. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/harness-selector.tsx +0 -0
  129. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/scroll-table.tsx +0 -0
  130. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/search-box.tsx +0 -0
  131. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/skeleton.tsx +0 -0
  132. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/unit-toggle.tsx +0 -0
  133. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/version-list.tsx +0 -0
  134. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  135. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_lib/source-param.ts +0 -0
  136. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  137. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  138. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  139. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/daily-chart.tsx +0 -0
  140. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  141. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/harness-legend.tsx +0 -0
  142. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/harness-series.ts +0 -0
  143. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/tag-rail.tsx +0 -0
  144. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  145. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  146. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/window-summary.tsx +0 -0
  147. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/download/route.ts +0 -0
  148. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/file/route.ts +0 -0
  149. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  150. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/refresh/route.ts +0 -0
  151. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/error.tsx +0 -0
  152. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/globals.css +0 -0
  153. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/icon.png +0 -0
  154. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/layout.tsx +0 -0
  155. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/loading.tsx +0 -0
  156. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/page.tsx +0 -0
  157. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  158. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/page.tsx +0 -0
  159. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  160. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/scribe/page.tsx +0 -0
  161. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/scribe/run-table.tsx +0 -0
  162. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  163. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/actions.ts +0 -0
  164. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/page.tsx +0 -0
  165. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/trends-view.tsx +0 -0
  166. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  167. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/page.tsx +0 -0
  168. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  169. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/next-env.d.ts +0 -0
  170. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/next.config.mjs +0 -0
  171. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/package.json +0 -0
  172. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/pnpm-lock.yaml +0 -0
  173. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/postcss.config.mjs +0 -0
  174. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/antigravity.png +0 -0
  175. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/claude-code.png +0 -0
  176. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/codex.png +0 -0
  177. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/pi.png +0 -0
  178. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/uipath.png +0 -0
  179. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/tailwind.config.ts +0 -0
  180. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/tsconfig.json +0 -0
  181. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/vitest.config.ts +0 -0
  182. {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/vitest.setup.ts +0 -0
  183. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/default.yaml +0 -0
  184. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/early-stop-ab.yaml +0 -0
  185. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/model-comparison.yaml +0 -0
  186. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/permissions-smoke.yaml +0 -0
  187. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/plugin-comparison.yaml +0 -0
  188. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/prompt-mutations-example.yaml +0 -0
  189. {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/smoke_variants.yaml +0 -0
  190. {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/README.md +0 -0
  191. {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/cost_logger.py +0 -0
  192. {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/litellm-config.yaml +0 -0
  193. {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/start-litellm.sh +0 -0
  194. {coder_eval-0.12.5 → coder_eval-0.12.6}/mkdocs.yml +0 -0
  195. {coder_eval-0.12.5 → coder_eval-0.12.6}/osv-scanner.toml +0 -0
  196. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/README.md +0 -0
  197. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/cli-setup.md +0 -0
  198. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/criteria.md +0 -0
  199. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/repo-layout.md +0 -0
  200. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/run-layout.md +0 -0
  201. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/task-rubric.md +0 -0
  202. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  203. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  204. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  205. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  206. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  207. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  208. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  209. {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  210. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/check_commit_msg.sh +0 -0
  211. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/README.md +0 -0
  212. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/antigravity.json +0 -0
  213. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/claude-code.json +0 -0
  214. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/codex.json +0 -0
  215. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/opencode.json +0 -0
  216. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/pi.json +0 -0
  217. {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/decompose_run.py +0 -0
  218. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/.gitattributes +0 -0
  219. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agent.py +0 -0
  220. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/__init__.py +0 -0
  221. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/_logging.py +0 -0
  222. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/_skills.py +0 -0
  223. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/.gitignore +0 -0
  224. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/delegate_host.mjs +0 -0
  225. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/package.json +0 -0
  226. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/noop_agent.py +0 -0
  227. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/opencode_agent.py +0 -0
  228. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/pi_agent.py +0 -0
  229. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/registry.py +0 -0
  230. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/watchdog.py +0 -0
  231. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/analysis.py +0 -0
  232. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/argv_match.py +0 -0
  233. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/__init__.py +0 -0
  234. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/console.py +0 -0
  235. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/evaluate_command.py +0 -0
  236. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/evaluate_target.py +0 -0
  237. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/execute_command.py +0 -0
  238. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/export_command.py +0 -0
  239. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/harbor_command.py +0 -0
  240. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/plan_command.py +0 -0
  241. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/report_command.py +0 -0
  242. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_command.py +0 -0
  243. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_helpers.py +0 -0
  244. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  245. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/utils.py +0 -0
  246. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/config.py +0 -0
  247. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/__init__.py +0 -0
  248. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  249. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/agent_judge.py +0 -0
  250. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/base.py +0 -0
  251. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/classification_match.py +0 -0
  252. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/cli_called.py +0 -0
  253. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/command_executed.py +0 -0
  254. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  255. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_check.py +0 -0
  256. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_contains.py +0 -0
  257. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_exists.py +0 -0
  258. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  259. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/json_check.py +0 -0
  260. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/llm_judge.py +0 -0
  261. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/reference_comparison.py +0 -0
  262. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/run_command.py +0 -0
  263. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/skill_triggered.py +0 -0
  264. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/system_one_judge.py +0 -0
  265. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/uipath_eval.py +0 -0
  266. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/durations.py +0 -0
  267. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/__init__.py +0 -0
  268. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/agent.py +0 -0
  269. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/budget.py +0 -0
  270. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/categories.py +0 -0
  271. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/categorization.py +0 -0
  272. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/checker_misuse.py +0 -0
  273. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/executor.py +0 -0
  274. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/judge.py +0 -0
  275. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/reference.py +0 -0
  276. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/retry.py +0 -0
  277. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/timeout.py +0 -0
  278. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/__init__.py +0 -0
  279. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/checker.py +0 -0
  280. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  281. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  282. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_context.py +0 -0
  283. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  284. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_models.py +0 -0
  285. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  286. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  287. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_usage.py +0 -0
  288. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/sub_agent.py +0 -0
  289. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/summaries.py +0 -0
  290. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  291. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  292. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/formatting.py +0 -0
  293. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/fs_permissions.py +0 -0
  294. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/__init__.py +0 -0
  295. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/agent.py +0 -0
  296. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/agent_paths.py +0 -0
  297. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_emit.py +0 -0
  298. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  299. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_models.py +0 -0
  300. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/experiment_packager.py +0 -0
  301. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/packager.py +0 -0
  302. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/portability.py +0 -0
  303. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/reward.py +0 -0
  304. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/invocation_log.py +0 -0
  305. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/isolation/__init__.py +0 -0
  306. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/isolation/docker_runner.py +0 -0
  307. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/litellm_cost.py +0 -0
  308. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/logging_config.py +0 -0
  309. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/__init__.py +0 -0
  310. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/agent_config.py +0 -0
  311. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/cli_match.py +0 -0
  312. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/container_context.py +0 -0
  313. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/container_paths.py +0 -0
  314. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/criteria.py +0 -0
  315. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/enums.py +0 -0
  316. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/experiment.py +0 -0
  317. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/judge.py +0 -0
  318. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/judge_defaults.py +0 -0
  319. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/merge_strategy.py +0 -0
  320. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/mutations.py +0 -0
  321. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/routing.py +0 -0
  322. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/sandbox.py +0 -0
  323. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/system_one.py +0 -0
  324. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/tasks.py +0 -0
  325. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/telemetry.py +0 -0
  326. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/templates.py +0 -0
  327. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/__init__.py +0 -0
  328. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/batch.py +0 -0
  329. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/config.py +0 -0
  330. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/config_merge.py +0 -0
  331. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/early_stop.py +0 -0
  332. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/evaluation.py +0 -0
  333. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/experiment.py +0 -0
  334. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/overrides.py +0 -0
  335. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/regrade.py +0 -0
  336. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/run_limits.py +0 -0
  337. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  338. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/task_loader.py +0 -0
  339. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/path_utils.py +0 -0
  340. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/plugins.py +0 -0
  341. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/py.typed +0 -0
  342. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/__init__.py +0 -0
  343. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/experiment.py +0 -0
  344. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/helpers.py +0 -0
  345. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/junit.py +0 -0
  346. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/markdown.py +0 -0
  347. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/__init__.py +0 -0
  348. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  349. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/tags.yaml +0 -0
  350. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/result_metrics.py +0 -0
  351. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/run_record.py +0 -0
  352. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/sandbox.py +0 -0
  353. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/__init__.py +0 -0
  354. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/ast_similarity.py +0 -0
  355. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/complexity.py +0 -0
  356. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/quality.py +0 -0
  357. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/signature_similarity.py +0 -0
  358. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/similarity.py +0 -0
  359. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/token_similarity.py +0 -0
  360. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/__init__.py +0 -0
  361. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/user_simulator.py +0 -0
  362. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/stats.py +0 -0
  363. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/__init__.py +0 -0
  364. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/callbacks.py +0 -0
  365. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/events.py +0 -0
  366. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/renderers.py +0 -0
  367. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/wire.py +0 -0
  368. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/telemetry.py +0 -0
  369. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/timing.py +0 -0
  370. {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/utils.py +0 -0
  371. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/README.md +0 -0
  372. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agentless_smoke_test.yaml +0 -0
  373. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/antigravity_hello_world.yaml +0 -0
  374. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  375. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_hello_world.yaml +0 -0
  376. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  377. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  378. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_subagent_test.yaml +0 -0
  379. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  380. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_hello_world.yaml +0 -0
  381. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_parallel_commands.yaml +0 -0
  382. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  383. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_skills_test.yaml +0 -0
  384. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_string_utils.yaml +0 -0
  385. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_subagent_test.yaml +0 -0
  386. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  387. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/subagent_merge_sort.yaml +0 -0
  388. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  389. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  390. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/byod_smoke_test.yaml +0 -0
  391. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dataset_example.yaml +0 -0
  392. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/datasets/sentiment.jsonl +0 -0
  393. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  394. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/delegate/hello_date_delegate.yaml +0 -0
  395. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  396. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  397. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  398. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  399. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  400. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  401. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  402. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  403. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  404. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/fibonacci_with_template.yaml +0 -0
  405. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/hello_date.yaml +0 -0
  406. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/inline_starter_example.yaml +0 -0
  407. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/internal/session_resumption.yaml +0 -0
  408. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_smoke.yaml +0 -0
  409. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  410. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  411. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  412. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  413. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  414. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/opencode_smoke_test.yaml +0 -0
  415. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/pi_smoke_test.yaml +0 -0
  416. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  417. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/record_cli_responses.yaml +0 -0
  418. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/run_limits/max_turns_cap.yaml +0 -0
  419. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/run_limits/turn_timeout.yaml +0 -0
  420. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  421. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  422. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  423. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  424. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  425. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  426. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/README.md +0 -0
  427. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  428. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  429. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  430. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  431. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  432. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  433. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  434. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  435. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  436. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  437. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/sentiment_classification.yaml +0 -0
  438. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_agent_judge.yaml +0 -0
  439. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_budget_exceeded.yaml +0 -0
  440. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  441. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_llm_judge.yaml +0 -0
  442. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_negative_path.yaml +0 -0
  443. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_system_one_judge.yaml +0 -0
  444. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_task_timeout.yaml +0 -0
  445. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_variants.yaml +0 -0
  446. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/test_sandbox.yaml +0 -0
  447. {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/token_check.yaml +0 -0
  448. {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/byod_smoke_test/Dockerfile +0 -0
  449. {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/README.md +0 -0
  450. {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/src/main.py +0 -0
  451. {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/tests/test_main.py +0 -0
  452. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/__init__.py +0 -0
  453. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_bracket_clock.py +0 -0
  454. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_container_contract.py +0 -0
  455. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/__init__.py +0 -0
  456. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/__init__.py +0 -0
  457. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  458. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  459. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  460. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  461. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
  462. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
  463. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
  464. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
  465. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
  466. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  467. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  468. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  469. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  470. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  471. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  472. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  473. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  474. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  475. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  476. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  477. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  478. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  479. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  480. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  481. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  482. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
  483. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
  484. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
  485. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
  486. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
  487. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
  488. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
  489. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
  490. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
  491. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
  492. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
  493. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  494. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  495. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  496. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  497. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  498. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  499. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  500. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  501. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  502. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  503. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  504. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  505. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  506. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/live_criteria.py +0 -0
  507. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  508. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  509. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  510. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  511. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  512. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  513. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  514. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/timing_union_cases.json +0 -0
  515. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_path_helpers.py +0 -0
  516. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/conftest.py +0 -0
  517. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/__init__.py +0 -0
  518. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  519. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  520. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  521. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/mock_agent.py +0 -0
  522. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  523. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  524. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  525. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  526. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/text_stub_agent.py +0 -0
  527. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  528. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  529. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  530. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  531. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/__init__.py +0 -0
  532. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/action_docs.py +0 -0
  533. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/agent_roster_parity.py +0 -0
  534. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/dead_config_fields.py +0 -0
  535. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_env_parity.py +0 -0
  536. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_examples.py +0 -0
  537. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_indexes.py +0 -0
  538. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_schema_parity.py +0 -0
  539. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/generated.py +0 -0
  540. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/live_verdict_contract.py +0 -0
  541. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/plugin_manifest_parity.py +0 -0
  542. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/plugin_reference.py +0 -0
  543. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/pricing_mirror.py +0 -0
  544. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/prose_budget.py +0 -0
  545. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/pyright_config.py +0 -0
  546. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/__init__.py +0 -0
  547. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/_layers.py +0 -0
  548. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/_model_ctor.py +0 -0
  549. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/base.py +0 -0
  550. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  551. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  552. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  553. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  554. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  555. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  556. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  557. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  558. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  559. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  560. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  561. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  562. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  563. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  564. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  565. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  566. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  567. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  568. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  569. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  570. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  571. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  572. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  573. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  574. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  575. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  576. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  577. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  578. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  579. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  580. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  581. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  582. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_agent_timing_access.py +0 -0
  583. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  584. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  585. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_silent_except.py +0 -0
  586. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  587. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  588. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  589. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  590. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/open_explicit_encoding.py +0 -0
  591. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  592. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/register_criterion_required.py +0 -0
  593. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  594. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  595. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/runner.py +0 -0
  596. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/violation.py +0 -0
  597. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/workflow_outputs.py +0 -0
  598. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_action_inputs.py +0 -0
  599. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_action_version_pin.py +0 -0
  600. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_no_timing_fields.py +0 -0
  601. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_optional_type.py +0 -0
  602. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_registry_dispatch.py +0 -0
  603. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_sdk_decoupling.py +0 -0
  604. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_golden_master.py +0 -0
  605. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_judge_criterion.py +0 -0
  606. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_telemetry.py +0 -0
  607. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_telemetry_advanced.py +0 -0
  608. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_timeout.py +0 -0
  609. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agentless.py +0 -0
  610. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_emit.py +0 -0
  611. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_hydrate.py +0 -0
  612. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_models.py +0 -0
  613. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byoa_plugin.py +0 -0
  614. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byoa_plugin_live.py +0 -0
  615. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byod_feature.py +0 -0
  616. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_check_all_async.py +0 -0
  617. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_checker_logging.py +0 -0
  618. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_classification_match.py +0 -0
  619. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_claude_settings_enforcement_live.py +0 -0
  620. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cleanup_preservation_guard.py +0 -0
  621. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_backend_flag.py +0 -0
  622. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_called_criterion.py +0 -0
  623. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_empty_glob.py +0 -0
  624. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_match_parity.py +0 -0
  625. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_sdk_options.py +0 -0
  626. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_set_overrides.py +0 -0
  627. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_telemetry.py +0 -0
  628. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_type_flag.py +0 -0
  629. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_code_review_bugs.py +0 -0
  630. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent_live.py +0 -0
  631. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent_unit.py +0 -0
  632. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_token_mapping.py +0 -0
  633. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_executed.py +0 -0
  634. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_statistics.py +0 -0
  635. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_telemetry_result_data.py +0 -0
  636. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_commands_efficiency.py +0 -0
  637. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_lineage.py +0 -0
  638. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_merge_engine.py +0 -0
  639. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_precedence.py +0 -0
  640. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_container_context.py +0 -0
  641. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_continuous_scoring.py +0 -0
  642. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cost_accounting_paths.py +0 -0
  643. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_criterion_result_round_trip.py +0 -0
  644. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_custom_lint.py +0 -0
  645. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_dataset_expansion.py +0 -0
  646. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_debug_logging.py +0 -0
  647. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_config.py +0 -0
  648. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_live.py +0 -0
  649. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_registration.py +0 -0
  650. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_detached_grading_boundaries.py +0 -0
  651. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_detached_grading_guards.py +0 -0
  652. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_build_failure.py +0 -0
  653. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_litellm_env.py +0 -0
  654. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_container_death.py +0 -0
  655. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_mounts.py +0 -0
  656. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_stream_limit.py +0 -0
  657. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_wildcard_env.py +0 -0
  658. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_workdir_live.py +0 -0
  659. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_driver_resolver.py +0 -0
  660. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_durations.py +0 -0
  661. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_early_stop.py +0 -0
  662. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_error_handling.py +0 -0
  663. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_command.py +0 -0
  664. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_format_harbor.py +0 -0
  665. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_target.py +0 -0
  666. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluator.py +0 -0
  667. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_event_collector.py +0 -0
  668. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_command.py +0 -0
  669. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_evaluate_loop.py +0 -0
  670. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_format_harbor.py +0 -0
  671. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_cli.py +0 -0
  672. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_loader.py +0 -0
  673. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_models.py +0 -0
  674. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_reports.py +0 -0
  675. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_resolver.py +0 -0
  676. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_runner.py +0 -0
  677. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_file_check.py +0 -0
  678. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_file_contains_scoring.py +0 -0
  679. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_formatting.py +0 -0
  680. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_git_clone_failure.py +0 -0
  681. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_glob_paths_in_file_criteria.py +0 -0
  682. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_agent.py +0 -0
  683. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_e2e_fixtures.py +0 -0
  684. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_experiment_packager.py +0 -0
  685. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_export_golden.py +0 -0
  686. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_packager.py +0 -0
  687. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_portability.py +0 -0
  688. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_reward.py +0 -0
  689. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_heartbeat_watchdog.py +0 -0
  690. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_ignore_patterns_negation.py +0 -0
  691. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_image_from_dockerfiles.py +0 -0
  692. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_image_skew_refusal.py +0 -0
  693. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_integration.py +0 -0
  694. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_json_check.py +0 -0
  695. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_anthropic.py +0 -0
  696. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_bedrock.py +0 -0
  697. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_burn_in_live.py +0 -0
  698. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_context_builder.py +0 -0
  699. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_litellm.py +0 -0
  700. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_models.py +0 -0
  701. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_persistence.py +0 -0
  702. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_system_one.py +0 -0
  703. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_lint_no_top_level_run_limits.py +0 -0
  704. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_lint_runner.py +0 -0
  705. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_config.py +0 -0
  706. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_cost.py +0 -0
  707. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_cost_logger.py +0 -0
  708. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_judge_live.py +0 -0
  709. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_route.py +0 -0
  710. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_llm_judge_criterion.py +0 -0
  711. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_log_tail_buffer.py +0 -0
  712. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_logging.py +0 -0
  713. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_logging_isolation.py +0 -0
  714. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_characterization.py +0 -0
  715. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_strategy_annotations.py +0 -0
  716. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_unification.py +0 -0
  717. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_models.py +0 -0
  718. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_mutations.py +0 -0
  719. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_new_criteria.py +0 -0
  720. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_node_env_config.py +0 -0
  721. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_opencode_agent.py +0 -0
  722. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_optional_dependencies.py +0 -0
  723. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator.py +0 -0
  724. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator_error_log_tail.py +0 -0
  725. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator_telemetry.py +0 -0
  726. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_overrides_engine.py +0 -0
  727. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_parallel.py +0 -0
  728. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_path_utils.py +0 -0
  729. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_agent.py +0 -0
  730. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_agent_config.py +0 -0
  731. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_smoke_task.py +0 -0
  732. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plan_command.py +0 -0
  733. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plugin_processing.py +0 -0
  734. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plugins.py +0 -0
  735. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_post_run.py +0 -0
  736. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pr_review_workflow.py +0 -0
  737. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pre_run.py +0 -0
  738. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_preservation_mode.py +0 -0
  739. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pricing_mirror.py +0 -0
  740. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pricing_registry.py +0 -0
  741. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_prose_budget.py +0 -0
  742. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_prose_budget_commands.py +0 -0
  743. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_comparison_scoring.py +0 -0
  744. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_evaluator.py +0 -0
  745. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_missing_file.py +0 -0
  746. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_models.py +0 -0
  747. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_permissions.py +0 -0
  748. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_registry.py +0 -0
  749. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_regrade.py +0 -0
  750. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_release_notes.py +0 -0
  751. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_replicate_stats.py +0 -0
  752. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_report_command.py +0 -0
  753. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports.py +0 -0
  754. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_html.py +0 -0
  755. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_junit.py +0 -0
  756. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_package.py +0 -0
  757. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_resolve_task_files.py +0 -0
  758. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_result_metrics.py +0 -0
  759. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_resume.py +0 -0
  760. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_retry_logic_comprehensive.py +0 -0
  761. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_route_seam_exhaustiveness.py +0 -0
  762. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_routing.py +0 -0
  763. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_command_junit.py +0 -0
  764. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_command_stdout.py +0 -0
  765. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_helpers.py +0 -0
  766. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_models.py +0 -0
  767. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_resolver.py +0 -0
  768. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_metrics.py +0 -0
  769. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_record.py +0 -0
  770. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_summary_rebuild.py +0 -0
  771. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_runtime_tool_versions.py +0 -0
  772. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox.py +0 -0
  773. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_adopt.py +0 -0
  774. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_layer_builder.py +0 -0
  775. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_optional.py +0 -0
  776. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_record_cli.py +0 -0
  777. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_security.py +0 -0
  778. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_symlink_preservation.py +0 -0
  779. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_templates.py +0 -0
  780. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_venv_live.py +0 -0
  781. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_scorers.py +0 -0
  782. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_scoring_quality.py +0 -0
  783. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sdk_option_classification.py +0 -0
  784. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_seed_from_prior_result.py +0 -0
  785. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_config.py +0 -0
  786. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_integration.py +0 -0
  787. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_termination.py +0 -0
  788. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_trials.py +0 -0
  789. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_skill_triggered.py +0 -0
  790. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_stats.py +0 -0
  791. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_stats_nonfinite.py +0 -0
  792. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_agent_integration.py +0 -0
  793. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_batch.py +0 -0
  794. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_callbacks.py +0 -0
  795. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_cli.py +0 -0
  796. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_events.py +0 -0
  797. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_orchestrator.py +0 -0
  798. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_renderers.py +0 -0
  799. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_wire.py +0 -0
  800. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sub_agent_runner.py +0 -0
  801. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_success_criterion_union.py +0 -0
  802. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_suite_rollup.py +0 -0
  803. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_summaries.py +0 -0
  804. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_system_one_judge.py +0 -0
  805. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_system_one_judge_live.py +0 -0
  806. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_tags.py +0 -0
  807. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_task_definition_unknown_fields.py +0 -0
  808. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_teardown_interrupt.py +0 -0
  809. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_telemetry.py +0 -0
  810. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_template_env_expansion.py +0 -0
  811. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_threshold_enforcement.py +0 -0
  812. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_batch.py +0 -0
  813. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_categorization.py +0 -0
  814. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_exceptions.py +0 -0
  815. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_models.py +0 -0
  816. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_orchestrator.py +0 -0
  817. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_close_window.py +0 -0
  818. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_identity_contract.py +0 -0
  819. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_union_parity.py +0 -0
  820. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_token_usage.py +0 -0
  821. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_uipath_eval.py +0 -0
  822. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_ungraded_reporting.py +0 -0
  823. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_user_simulator.py +0 -0
  824. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_utils.py +0 -0
  825. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_utterance_extraction.py +0 -0
  826. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_variant_prompt_file.py +0 -0
  827. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_verdict_tool.py +0 -0
  828. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_verify_published_workflow.py +0 -0
  829. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_watchdog.py +0 -0
  830. {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_yaml_migration.py +0 -0
@@ -61,14 +61,12 @@ intentionally brief and out of scope; trimming for DISPLAY belongs in the render
61
61
 
62
62
  - **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same
63
63
  thing on every backend, so a divergence is either fixed or documented — never silent.
64
- **`run_limits.max_turns` on Codex/Antigravity counts VISIBLE turns** (resolved tool
65
- calls, read live off the shared `EventCollector.visible_turn_count`, the same list
66
- `TurnRecord.commands` holds) because one `communicate()` is a single SDK turn on both,
67
- so a native counter would clamp at 1; claude-code keeps its native SDK cap, whose unit
68
- (an agent-loop turn) absorbs arbitrarily many parallel calls — the same number is NOT
69
- the same budget across harnesses. OpenCode and Pi each keep a native unit too, because
70
- their CLIs stream a real multi-step loop per `communicate()`
71
- (`step_start`/`step_finish`, `turn_start`/`turn_end`). The cap is enforced on the same
64
+ **`run_limits.max_turns` counts main-thread model API calls on every harness**, per
65
+ iteration (each retry and dialog exchange starts at zero). Codex and Antigravity run one
66
+ SDK turn per `communicate()`, so each counts calls from its own stream (Codex
67
+ `thread/tokenUsage/updated`, Antigravity MODEL steps). claude-code keeps the CLI's
68
+ `--max-turns` plus a backstop that counts main-thread `message_id`s. OpenCode and Pi
69
+ stream one `step_start` / `turn_start` per call. The cap is enforced on the same
72
70
  loop boundary as the cooperative early stop and finalizes cleanly as
73
71
  `max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in
74
72
  `_drain()`, so the background-work poll loop honors it too.
@@ -2,6 +2,69 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.6 (2026-09-23)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **claude-code**: End a turn the CLI did not cap at max_turns
10
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
11
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
12
+
13
+ - **claude-code**: Kill the CLI on a cooperative stop
14
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
15
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
16
+
17
+ - **claude-code**: Kill the CLI on a max_turns backstop stop without a turn timeout
18
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
19
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
20
+
21
+ - **codex**: End a capped turn before the next call can run a tool
22
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
23
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
24
+
25
+ - **delegate**: Count a tool-only reply as a model call
26
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
27
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
28
+
29
+ - **delegate**: Keep counting model calls when a tool never returns
30
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
31
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
32
+
33
+ - **evalboard**: Compare visible turns, not SDK num_turns, against expected_turns
34
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
35
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
36
+
37
+ - **pricing**: Add Opus 5.5 and GPT-6, correct rates that moved publicly
38
+ ([#195](https://github.com/UiPath/coder_eval/pull/195),
39
+ [`11b902f`](https://github.com/UiPath/coder_eval/commit/11b902fa9bc0d307bcab22801dc56523fcc1d92a))
40
+
41
+ - **run-limits**: Count max_turns as model API calls on every harness
42
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
43
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
44
+
45
+ - **run-limits**: Count max_turns as model API calls on every harness and enforce it on claude-code
46
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
47
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
48
+
49
+ - **run-limits**: Stop a turn mid-flight once a token or USD budget is crossed
50
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
51
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
52
+
53
+ - **simulation**: End a dialog with agent_max_turns when the agent hits its own cap
54
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
55
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
56
+
57
+ ### Documentation
58
+
59
+ - **parity**: Record the claude-code max_turns backstop
60
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
61
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
62
+
63
+ - **run-limits**: Say max_turns restarts per iteration and expected_turns counts tool calls
64
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
65
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
66
+
67
+
5
68
  ## v0.12.5 (2026-09-22)
6
69
 
7
70
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.12.5
3
+ Version: 0.12.6
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites.
5
5
  Project-URL: Homepage, https://coder-eval.com
6
6
  Project-URL: Repository, https://github.com/UiPath/coder_eval
@@ -25,7 +25,7 @@ inputs:
25
25
  version:
26
26
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
27
27
  required: false
28
- default: "0.12.5" # <-- kept in sync with releases by release.yml
28
+ default: "0.12.6" # <-- kept in sync with releases by release.yml
29
29
  extras:
30
30
  description: >-
31
31
  Comma-separated coder-eval extras (`codex`, `antigravity,litellm`), composed
@@ -121,13 +121,15 @@ After each exchange the driver evaluates the stop conditions **in this order**,
121
121
  2. **`stop_on_criteria_pass`** (`criteria_passed`) — every success criterion passes. Requires
122
122
  per-turn checking (`check_criteria: every_turn` or `both`); pairing it with the default
123
123
  `end_of_dialog` is rejected at load time, since there would be nothing to check against.
124
- 3. **`max_turns`** (`max_turns`) — the hard cap on exchanges. The agent exhausting its *own* inner
125
- `max_turns` mid-exchange ends the dialog with the same reason.
124
+ 3. **`max_turns`** (`max_turns`) — the hard cap on exchanges.
126
125
  4. **`max_total_tokens`** (`budget`) — the dialog-wide budget across simulator **and** agent. The
127
126
  dialog ends and the task is **still scored** — unlike
128
127
  [`run_limits.max_total_tokens`](TASK_DEFINITION_GUIDE.md#run-limits), which covers the subject
129
128
  agent only and aborts.
130
- 5. **`stop_token`** (`stop_token`) — only if none of the above fired is the simulator asked for
129
+ 5. **`run_limits.max_turns`** (`agent_max_turns`): the agent used up its own model-call cap inside
130
+ one exchange. That cap restarts on every exchange, so this reason means one exchange ran long, not
131
+ that the dialog ran out of exchanges.
132
+ 6. **`stop_token`** (`stop_token`) — only if none of the above fired is the simulator asked for
131
133
  another message; the sentinel token in *that fresh utterance* ends the dialog. This is the
132
134
  workhorse in practice — the simulator decides, in character, that it got what it wanted — but it
133
135
  is evaluated **last**, so a turn that trips `max_turns` or the budget never gets the chance to
@@ -240,7 +240,7 @@ valid and an empty block is legal — every field defaults to "no limit".
240
240
  ```yaml
241
241
  run_limits:
242
242
  # Structural caps
243
- max_turns: 20 # hard cap on agent inner-loop turns per iteration
243
+ max_turns: 20 # hard cap on model API calls per iteration
244
244
  expected_turns: 8 # SOFT efficiency budget (visible turns) — never aborts
245
245
  task_timeout: 300 # wall-clock cap for the full run envelope, seconds
246
246
  turn_timeout: 300 # per-communicate() timeout, seconds
@@ -255,8 +255,8 @@ run_limits:
255
255
 
256
256
  | Field | Default | Constraint | Description |
257
257
  |-------|---------|------------|-------------|
258
- | `max_turns` | *unset* | `> 0` | Hard cap on agent inner-loop turns per iteration. Unset uses the SDK default. |
259
- | `expected_turns` | *unset* | `>= 1` | **Soft** target for cumulative visible turns. Exceeding it warns and badges the report; it never aborts. See [`expected_turns`](#expected_turns-soft-efficiency-budget). |
258
+ | `max_turns` | *unset* | `> 0` | Hard cap on main-thread model API calls per iteration, Claude Code's turn, counted the same on every harness. The tools the last allowed call asks for still run; the turn ends when the next call begins. Each retry and each dialog exchange starts a fresh count. Unset uses the SDK default. See [HARNESS_PARITY.md](agents/HARNESS_PARITY.md). |
259
+ | `expected_turns` | *unset* | `>= 1` | **Soft** target for visible turns (tool calls plus the final reply) summed over the whole task, a different unit from `max_turns`. Exceeding it warns and badges the report; it never aborts. See [`expected_turns`](#expected_turns-soft-efficiency-budget). |
260
260
  | `task_timeout` | *unset* | `>= 30` | Max seconds for the full run envelope, including agent work, grading, and post-run work. |
261
261
  | `turn_timeout` | *unset* | `>= 10` | Max seconds for the agent's single `communicate()` iteration. |
262
262
  | `max_input_tokens` | *unset* | `>= 1` | Max cumulative input (prompt) tokens. |
@@ -327,8 +327,8 @@ that did: a budgeted task that failed counts as over budget, while tasks with no
327
327
  `expected_turns` budget are excluded entirely (success or fail).
328
328
 
329
329
  The count compared against the budget is **visible turns** — one per tool call
330
- plus one for the agent's final reply — *not* the SDK's `total_turns` (which
331
- counts assistant messages and can bundle several tool calls into one).
330
+ plus one for the agent's final reply. It is *not* `total_turns`, which counts
331
+ model API calls (the `max_turns` unit), and one call can batch several tool calls.
332
332
 
333
333
  Set it to the number of turns a competent agent should need for the task. Pick
334
334
  budgets consistently across a suite — the headline % is only comparable when
@@ -1721,7 +1721,7 @@ The simulator runs as a tools-disabled Claude Code agent on its own resolved `Ap
1721
1721
  **Semantics:**
1722
1722
 
1723
1723
  - The task's `initial_prompt` is the user's *opening* message; the simulator picks up from turn 2.
1724
- - `max_turns` is the intra-dialog cap (the worst-case agent call budget per trial). Use `n_trials` for variance sampling.
1724
+ - `max_turns` caps exchanges. Each exchange also gets a fresh `run_limits.max_turns` of model API calls, so the worst case per trial is the product of the two. Use `n_trials` for variance sampling.
1725
1725
  - The `reference` solution, if present, is hidden from the simulator (same security posture as for the coding agent).
1726
1726
  - When `n_trials > 1`, each trial becomes its own `ResolvedTask` with its own zero-padded replicate directory (`runs/<ts>/<variant_id>/<task_id>/<NN>/`) and its own `task.json` — the same fan-out mechanism as experiment `repeats`, which `n_trials` takes precedence over when simulation is enabled. Trial-level metadata appears under `simulation.replicate_index` / `simulation.n_trials` on the `EvaluationResult`.
1727
1727
 
@@ -190,8 +190,9 @@ as every other agent.
190
190
  5. **`allowed_tools` / `disallowed_tools` are not read.** The harness runs with its
191
191
  full builtin tool set, so an Antigravity run has tools (web search, subagents,
192
192
  URL fetch) that the same task file denies on Claude Code and Codex.
193
- 6. **`max_turns` counts visible turns.** One `communicate()` is a single SDK turn here,
194
- so the cap counts resolved tool calls instead, enforced on the step loop. See
193
+ 6. **`max_turns` is counted by the harness.** One `communicate()` is a single SDK turn
194
+ here, so the harness counts model API calls itself (a MODEL step at a new
195
+ `step_index` opens one) and enforces the cap on the step loop. See
195
196
  [Run-Limit Parity](HARNESS_PARITY.md).
196
197
  7. **Shell commands over ~10s are moved to the background.** The localharness has a
197
198
  10-second maximum synchronous wait; past it the command becomes a background task
@@ -217,7 +217,7 @@ The Codex SDK is synchronous. The agent uses `_run_async()` helper to detect and
217
217
  | **Session Resume** | `--resume {session_id}` | Via thread ID |
218
218
  | **Permissions** | `permission_mode` + `allowed_tools` | `permission_mode` → sandbox/approval + `allowed_tools`/`disallowed_tools` → thread config |
219
219
  | **Tool Enforcement** | Not enforced by Coder Eval wrapper | `enabled_tools` honored; `disabled_tools` NOT enforced by the SDK |
220
- | **`max_turns`** | Native SDK turn cap (assistant messages) | Visible-turn cap (tool calls), enforced on the notification pump |
220
+ | **`max_turns`** | Model API calls: the CLI's `--max-turns`, plus a harness backstop | Model API calls, counted per `thread/tokenUsage/updated` and enforced on the notification pump |
221
221
  | **Early stop** | Supported (cooperative `should_stop`, polled between messages) | Supported — polled after each streamed notification; the in-flight turn is interrupted best-effort |
222
222
 
223
223
  Run-limit semantics per harness: [Run-Limit Parity](HARNESS_PARITY.md).
@@ -12,7 +12,7 @@ This page is the contract for what each run limit means per harness, plus the sh
12
12
 
13
13
  | Limit | claude-code | codex | antigravity | opencode | pi | delegate |
14
14
  |---|---|---|---|---|---|---|
15
- | `run_limits.max_turns` | native SDK cap (agent-loop turns) | visible-turn cap (resolved tool calls) | visible-turn cap (resolved tool calls) | native step cap (the CLI's own agent-loop steps) | native turn cap (the CLI's own `turn_start` agent-loop steps) | message-event cap (forwarded `message`-type SDK events, NOT tool calls or backend round-trips — the host exposes no round-trip boundary) |
15
+ | `run_limits.max_turns` (main-thread model API calls on every harness, see below) | native CLI cap, plus a harness backstop when call N+1 begins | a call runs from its first item to its `thread/tokenUsage/updated`, and one that ran tools opens the next call there | a call runs from its first new MODEL step to the step carrying its usage | one `step_start` step | one `turn_start` turn | a call opens when the previous call's tools have all returned |
16
16
  | `run_limits.turn_timeout` | watchdog, SIGKILL on the CLI subprocess | watchdog + cooperative interrupt | watchdog, plus an earlier internal poll deadline at 80% of it (see below) | deadline enforced in-loop and on the final reap; SIGTERM→SIGKILL on the CLI's whole process group | deadline enforced in-loop and on the final reap; SIGTERM→SIGKILL on the CLI's whole process group | deadline checked both between reads and while blocked inside one (`asyncio.wait_for`); force-kills the host subprocess and drops the handle so the next turn respawns |
17
17
  | `run_limits.task_timeout` | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic |
18
18
  | `run_limits.stop_early` | cooperative `should_stop` | cooperative `should_stop` | cooperative `should_stop` | cooperative `should_stop` (event granularity) | cooperative `should_stop` (event granularity — Pi streams incrementally) | cooperative `should_stop`, polled per forwarded SDK event; the host is abandoned (no interrupt command exists) and a fresh one spawns for the next turn |
@@ -531,8 +531,7 @@ needed to drive it.
531
531
  when a generation begins. Nothing in the timing accounting reads it — the
532
532
  head and tail are measured from the first and last `AssistantMessage`
533
533
  instead, which is uniform across all five — so this is recorded rather than
534
- fixed. It is NOT a `max_turns` hazard: `EventCollector.visible_turn_count` is
535
- `len(self._commands)`, derived from `ToolEndEvent`, and `_turn_starts` feeds
534
+ fixed. It is NOT a `max_turns` hazard: no cap reads it, and `_turn_starts` feeds
536
535
  only `assistant_turn_count` on the no-`AgentEndEvent` fallback path. The real
537
536
  cost of normalizing it is that the event drives the live renderers, so moving
538
537
  it changes the turn boundaries users watch during a run.
@@ -540,50 +539,49 @@ needed to drive it.
540
539
  All three are deliberately deferred; see `c/time-bugs-audit.md` for the
541
540
  measurements.
542
541
 
543
- ## `max_turns` counts visible turns on Codex and Antigravity
544
-
545
- A "visible turn" is one entry in the run's timeline: one resolved tool call. It is
546
- the unit `result_metrics.visible_turn_count` reports and the unit that lands in
547
- `TurnRecord.commands`. Both backends count it live off the shared
548
- `EventCollector.visible_turn_count`, so one `max_turns` value means one thing on
549
- both.
550
-
551
- They need their own counter because a native one would be meaningless: Codex and
552
- Antigravity each deliver exactly **one SDK turn per `communicate()` call**, so an
553
- SDK-level cap would clamp at 1 no matter what the task asked for.
554
-
555
- The cap is enforced on the same loop boundary as the cooperative early stop: the
556
- step or notification that reaches the cap is processed whole, and the next one is
557
- never pulled. The in-flight turn is then cancelled server-side (best effort) so
558
- the cap actually stops spend. A run cut this way finalizes cleanly as
559
- `max_turns_exhausted` — it is not a crash, and it is not retried.
560
-
561
- **claude-code keeps its native SDK cap.** That is a real, honored cap, so it is
562
- left alone rather than reimplemented in a different unit. Its unit is the SDK's own
563
- agent-loop turn, which absorbs an arbitrary number of *parallel* tool calls, so the
564
- same number bounds very different amounts of work: under a prompt that encourages
565
- batching, a cap of N here permits many more than N tool calls, where it buys exactly
566
- N on the other two.
567
-
568
- **OpenCode also keeps a native unit — its stream's own steps.** Unlike Codex and
569
- Antigravity, `opencode run` executes a real multi-step agent loop per invocation
570
- and streams it (`step_start` / `step_finish`), so the natural agent-loop unit
571
- exists and is honored: `max_turns: N` allows N complete steps and cuts the run
572
- when step N+1 begins, with the completed steps' tokens intact. A step is one
573
- assistant generation and may carry several tool calls — so, as with claude-code,
574
- the same number is a looser tool-call budget than on the visible-turn backends.
575
-
576
- **Pi keeps a native unit too — its `turn_start` agent-loop steps.** Like OpenCode,
577
- `pi -p --mode json` runs a real multi-step agent loop per invocation and streams it
578
- (`turn_start` / `turn_end`), so `max_turns: N` allows N complete turns and cuts the
579
- run when turn N+1 begins, with the completed turns' tokens intact. Pi streams
580
- incrementally, so the cut genuinely stops spend mid-run. A Pi turn is one assistant
581
- generation and may carry several tool calls — the same looser budget as claude-code
582
- and OpenCode.
583
-
584
- **So holding `max_turns` constant across harnesses does not hold the budget
585
- constant.** If you are A/B-ing across backends and the cap is close to binding, that
586
- is the number to distrust.
542
+ ## `max_turns` counts model API calls on every harness
543
+
544
+ One turn is one main-thread model API call, the unit Claude Code's `--max-turns`
545
+ counts. `max_turns: N` lets the agent make N calls and still runs the tools the Nth
546
+ call asked for. The turn ends when call N+1 begins, so a reply that finishes within
547
+ N calls completes normally. Sub-agent calls do not count. `TurnRecord.num_turns`
548
+ reports the same count, and a turn the cap ended reads N+1, as the Claude Code CLI
549
+ reports it.
550
+
551
+ Each harness finds the call boundary in its own stream (the table above):
552
+
553
+ - **claude-code** applies the cap in the CLI, and the harness reads the CLI's
554
+ `error_max_turns` stop. The CLI does not apply it on every route, so the harness
555
+ also counts distinct main-thread `message_id`s and ends the turn itself when call
556
+ N+1 begins.
557
+ - **Codex** sends `thread/tokenUsage/updated` once per call, after that call's
558
+ tools finish. An item starts as its tool runs, so waiting for the next call's
559
+ first item would let one tool of call N+1 act. A call that ran tools therefore
560
+ opens the next call at its `tokenUsage`, since the results always go back to the
561
+ model, and the cap fires before call N+1 can run anything.
562
+ - **Antigravity** attaches `usage_metadata` to one step per call, and the next call
563
+ opens with a MODEL step at a new `step_index`.
564
+ - **OpenCode** and **Pi** stream one `step_start` or `turn_start` per call.
565
+ - **Delegate**'s SDK has no round-trip marker, and a tool-only reply streams only
566
+ its tool call, with no text before it. So the next call opens when every tool the
567
+ previous call announced has returned, since those results go back to the model,
568
+ and the cap fires before call N+1 can run anything. A reply that announces
569
+ several tools before their results counts once. If a tool never returns, the
570
+ next call opens at the model's next text or new tool call instead.
571
+
572
+ Every harness enforces the cap on the same loop boundary as the
573
+ cooperative early stop, then kills or cancels the in-flight turn so the cap stops
574
+ spend. A run cut this way finalizes cleanly as `max_turns_exhausted`. It is not a
575
+ crash, and it is not retried.
576
+
577
+ One call can carry several parallel tool calls, so `max_turns` bounds model calls,
578
+ not tool calls. A model that batches does more work per turn, on every harness
579
+ alike.
580
+
581
+ The count is per iteration: each retry and each dialog exchange starts at zero. A
582
+ dialog whose agent hits the cap inside an exchange ends with `stop_reason:
583
+ agent_max_turns`. That is distinct from `max_turns`, the simulator's cap on
584
+ exchanges.
587
585
 
588
586
  ### What a capped run looks like
589
587
 
@@ -595,12 +593,12 @@ The signals a capped run leaves behind, on every backend:
595
593
  `MAX_TURNS_EXHAUSTED` (reporting category `failed`, icon `M`). Never `ERROR`,
596
594
  and never retried.
597
595
  - `max_turns_exhausted: true` on the task record.
598
- - On Codex and Antigravity, the count of *resolved* tool calls the model itself
599
- issued equals the cap. Two things can add a further *recorded* command, and
600
- neither means the cap leaked:
601
- - A tool call already in flight when the cap fires is force-closed and recorded
602
- with `result_status: unknown` rather than dropped, so the trajectory shows what
603
- was interrupted.
596
+ - `num_turns` is the cap plus one.
597
+ - The calls under the cap are recorded whole. Two things can add a further
598
+ *recorded* command, and neither means the cap leaked:
599
+ - A tool call from call N+1 that the harness saw before it stopped is
600
+ force-closed and recorded with `result_status: unknown` rather than dropped,
601
+ so the trajectory shows what was interrupted.
604
602
  - On Codex, a sub-agent's inner tool calls are recovered from its rollout after
605
603
  the pump stops, so the child's work and its tokens still reach the record. The
606
604
  cap bounds what the model was allowed to do, not what the record may explain.
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "coder-eval",
4
4
  "displayName": "Coder Eval",
5
- "version": "0.12.5",
5
+ "version": "0.12.6",
6
6
  "description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
7
7
  "author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
8
8
  "homepage": "https://coder-eval.com",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.12.5"
3
+ version = "0.12.6"
4
4
  description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """coder_eval - A framework for evaluating AI coding agents."""
2
2
 
3
- __version__ = "0.12.5"
3
+ __version__ = "0.12.6"
@@ -408,7 +408,7 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
408
408
  if state.max_turns_reached():
409
409
  state.max_turns_hit = True
410
410
  self._log.debug(
411
- "max_turns (%s visible turns) reached; ending step loop",
411
+ "max_turns (%s API calls) reached; ending step loop",
412
412
  state.max_turns,
413
413
  )
414
414
  break
@@ -438,9 +438,8 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
438
438
  conversation is cancelled (best-effort) and the turn finalizes cleanly as
439
439
  ``STOPPED_EARLY`` (``crashed=False``).
440
440
 
441
- ``max_turns`` caps VISIBLE turns — resolved tool calls — enforced in-stream
442
- on the same boundary as the cooperative stop: one ``communicate()`` here is
443
- a single SDK turn, so a native counter would cap at 1 and mean nothing.
441
+ ``max_turns`` caps main-thread model API calls, Claude Code's unit,
442
+ enforced in-stream on the same boundary as the cooperative stop.
444
443
  See docs/agents/HARNESS_PARITY.md.
445
444
 
446
445
  Drives one logical turn: ``conversation.send(prompt)`` then iterate
@@ -723,6 +722,10 @@ class _AntigravityTurnState:
723
722
  self.commands: list[CommandTelemetry] = []
724
723
  self._output_parts: list[str] = []
725
724
  self._assistant_turns = 0
725
+ # Main-thread API calls begun; one spans its first new MODEL step to its usage.
726
+ self.api_calls = 0
727
+ self._in_api_call = False
728
+ self._seen_steps: set[tuple[str, Any]] = set()
726
729
 
727
730
  # ToolStart on first sight of an id; ToolEnd at DONE.
728
731
  self._next_seq = 0
@@ -754,14 +757,12 @@ class _AntigravityTurnState:
754
757
  return self.stopped_early_hit or self.max_turns_hit
755
758
 
756
759
  def max_turns_reached(self) -> bool:
757
- """True once this turn has produced ``max_turns`` visible turns.
760
+ """True once the model begins API call ``max_turns + 1``, the unit Claude Code's ``--max-turns`` caps.
758
761
 
759
- Delegates to ``EventCollector.visible_turn_count``, the single
760
- agent-agnostic capture path, so one ``max_turns`` means the same thing here
761
- and on Codex. It counts RESOLVED tool calls, so the call that reaches the
762
- cap keeps its result instead of being force-closed as unresolved.
762
+ The next call opens only after the previous call's tools finish, so every
763
+ call under the cap keeps its tool results.
763
764
  """
764
- return self.max_turns is not None and self.collector.visible_turn_count >= self.max_turns
765
+ return self.max_turns is not None and self.api_calls > self.max_turns
765
766
 
766
767
  def _seed_first_generation_window(self, source: Any) -> None:
767
768
  """Move the first window's mark to the first observed MODEL output.
@@ -789,6 +790,11 @@ class _AntigravityTurnState:
789
790
  sstatus = _enum_value(step.status)
790
791
  ssource = _enum_value(step.source)
791
792
  self._seed_first_generation_window(ssource)
793
+ step_key = (getattr(step, "trajectory_id", "") or "", step.step_index)
794
+ if ssource == _SOURCE_MODEL and step_key not in self._seen_steps and not self._in_api_call:
795
+ self._in_api_call = True
796
+ self.api_calls += 1
797
+ self._seen_steps.add(step_key)
792
798
  starget = _enum_value(step.target)
793
799
  done = sstatus in (_STATUS_DONE, _STATUS_ERROR)
794
800
 
@@ -810,6 +816,9 @@ class _AntigravityTurnState:
810
816
 
811
817
  # Per-generation usage: fold into the turn total and cut an AssistantMessage.
812
818
  if step.usage_metadata is not None:
819
+ if not self._in_api_call:
820
+ self.api_calls += 1
821
+ self._in_api_call = False
813
822
  gen = _to_token_usage(step.usage_metadata, self.model)
814
823
  self.total_usage = self.total_usage + gen
815
824
  self._flush_generation(gen, getattr(step.usage_metadata, "thoughts_token_count", 0) or 0)
@@ -1013,7 +1022,7 @@ class _AntigravityTurnState:
1013
1022
  model_used=self.model,
1014
1023
  assistant_turn_count=self._assistant_turns,
1015
1024
  messages=self.messages,
1016
- num_turns=self._assistant_turns,
1025
+ num_turns=self.api_calls,
1017
1026
  crashed=crashed,
1018
1027
  crash_reason=crash_reason,
1019
1028
  max_turns_exhausted=status is AgentEndStatus.MAX_TURNS_EXHAUSTED,
@@ -223,6 +223,8 @@ class _ClaudeTurnState:
223
223
  # Set True by the in-loop cooperative-stop break (early-stop-on-criterion).
224
224
  # Distinct from timeout_hit: a clean, non-crash stop that must NOT raise.
225
225
  self.stopped_early_hit = False
226
+ self.max_turns_hit = False
227
+ self.main_turn_ids: set[str] = set()
226
228
  # Resolved by _build_claude_query, set on the state before any finalize
227
229
  # path. Stays None if we crash before setup (finalize reads it for cost
228
230
  # backfill).
@@ -410,6 +412,8 @@ class _ClaudeTurnState:
410
412
  if isinstance(message_id, str):
411
413
  self.seen_message_ids.add(message_id)
412
414
  self.last_message_had_id = True
415
+ if not isinstance(parent_tool_use_id, str):
416
+ self.main_turn_ids.add(message_id)
413
417
  else:
414
418
  self.last_message_had_id = False
415
419
 
@@ -635,6 +639,7 @@ class _ClaudeTurnState:
635
639
  max_turns_exhausted = not crashed and (
636
640
  self._agent._is_max_turns_result(self.sdk_result_summary)
637
641
  or (self.max_turns is not None and self.num_turns is not None and self.num_turns > self.max_turns)
642
+ or self.max_turns_hit
638
643
  )
639
644
  if max_turns_exhausted and status == AgentEndStatus.COMPLETED:
640
645
  status = AgentEndStatus.MAX_TURNS_EXHAUSTED
@@ -982,7 +987,7 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
982
987
 
983
988
  try:
984
989
  options, transport, effective_model = self._build_claude_query(
985
- user_input, timeout, max_turns, capture_stderr
990
+ user_input, timeout, max_turns, capture_stderr, can_stop=should_stop is not None
986
991
  )
987
992
  # Set on the state BEFORE the AgentStart emit and any finalize path
988
993
  # (finalize reads it for cost backfill); stays None if setup crashed.
@@ -1116,12 +1121,13 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
1116
1121
  ruff's statement cap. ``query`` is still resolved as a module global at
1117
1122
  call time, so ``patch("...claude_code_agent.query", ...)`` mocks work.
1118
1123
 
1119
- Two break conditions, and the ORDER MATTERS:
1124
+ Three break conditions, and the ORDER MATTERS:
1120
1125
 
1121
1126
  - The wall-clock guard runs at the TOP, so an over-deadline message is
1122
1127
  DISCARDED — no append, no events. Do NOT move it to a post-loop check.
1123
- - The cooperative stop runs AFTER ``state.dispatch(message)``, so a watcher
1124
- can flip its flag on THIS message and the next is never pulled.
1128
+ - The max_turns backstop and the cooperative stop run AFTER
1129
+ ``state.dispatch(message)``, so the message that trips them is recorded
1130
+ and the next is never pulled.
1125
1131
  """
1126
1132
  async for message in query(**query_kwargs):
1127
1133
  if deadline is not None and time.monotonic() > deadline:
@@ -1129,9 +1135,19 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
1129
1135
  self._log.warning("Turn timeout reached mid-stream; breaking out of message loop")
1130
1136
  break
1131
1137
  state.dispatch(message)
1138
+ # The CLI stops after max_turns main-thread API calls; one more means it ignored the cap.
1139
+ if state.max_turns is not None and len(state.main_turn_ids) > state.max_turns:
1140
+ state.max_turns_hit = True
1141
+ state.num_turns = len(state.main_turn_ids)
1142
+ self._log.warning(
1143
+ "CLI began API call %d past max_turns=%d; ending the turn", state.num_turns, state.max_turns
1144
+ )
1145
+ self._kill_transport(self._active_transport)
1146
+ break
1132
1147
  if should_stop is not None and should_stop():
1133
1148
  state.stopped_early_hit = True
1134
1149
  self._log.debug("Cooperative stop requested; ending message loop at this boundary")
1150
+ self._kill_transport(self._active_transport)
1135
1151
  break
1136
1152
 
1137
1153
  def _build_claude_query(
@@ -1140,11 +1156,14 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
1140
1156
  timeout: float | None,
1141
1157
  max_turns: int | None,
1142
1158
  stderr_callback: Callable[[str], None],
1159
+ *,
1160
+ can_stop: bool = False,
1143
1161
  ) -> tuple[ClaudeAgentOptions, SubprocessCLITransport | None, str | None]:
1144
- """Build the SDK options (+ a timeout-only transport) for one turn.
1162
+ """Build the SDK options (+ a killable transport) for one turn.
1145
1163
 
1146
- ``transport`` is None unless a ``timeout`` is set: it is pre-constructed
1147
- only so the watchdog can hard-kill the subprocess. ``effective_model`` may
1164
+ ``transport`` is None unless a timeout, a turn cap or a cooperative stop
1165
+ (``can_stop``) can end the turn: it is pre-constructed only so the harness
1166
+ can hard-kill the subprocess. ``effective_model`` may
1148
1167
  be None on a DirectRoute with no configured model. ``stderr_callback`` is
1149
1168
  wired in here but owned by ``communicate``.
1150
1169
  """
@@ -1211,11 +1230,12 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
1211
1230
  # For later inspection: captures every field, defaults included.
1212
1231
  self._sdk_options_dump = dump_dataclass(options)
1213
1232
 
1214
- # Pre-constructed only under a timeout, to retain the subprocess handle
1215
- # for hard-kill. None otherwise, so the SDK uses its own default and tests
1216
- # can mock query() without a real CLI.
1233
+ # Pre-constructed only when the harness may end the turn, to retain the
1234
+ # subprocess handle for hard-kill. None otherwise, so the SDK uses its own default and
1235
+ # tests can mock query() without a real CLI. Closing the SDK's query()
1236
+ # stream does not end the CLI: it never closes the generator it wraps.
1217
1237
  transport: SubprocessCLITransport | None = None
1218
- if timeout is not None:
1238
+ if timeout is not None or max_turns is not None or can_stop:
1219
1239
  transport = SubprocessCLITransport(prompt=user_input, options=options)
1220
1240
 
1221
1241
  return options, transport, effective_model