coder-eval 0.12.5__tar.gz → 0.12.7__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.7}/.claude/notes/agents.md +6 -8
  2. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/contracts.md +8 -3
  3. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/orchestration.md +17 -0
  4. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/harbor-e2e.yml +2 -0
  5. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/pr-checks.yml +6 -5
  6. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/publish-testpypi.yml +1 -1
  7. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/release.yml +1 -1
  8. {coder_eval-0.12.5 → coder_eval-0.12.7}/CHANGELOG.md +152 -0
  9. {coder_eval-0.12.5 → coder_eval-0.12.7}/PKG-INFO +5 -5
  10. {coder_eval-0.12.5 → coder_eval-0.12.7}/action.yml +1 -1
  11. {coder_eval-0.12.5 → coder_eval-0.12.7}/docker/Dockerfile +7 -7
  12. {coder_eval-0.12.5 → coder_eval-0.12.7}/docker/Dockerfile.runtime +3 -3
  13. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/DIALOG_MODE.md +5 -3
  14. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/REPORT_SCHEMA.md +9 -6
  15. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/TASK_DEFINITION_GUIDE.md +27 -6
  16. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/ANTIGRAVITY.md +4 -3
  17. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/CODEX.md +1 -1
  18. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/HARNESS_PARITY.md +51 -53
  19. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +1 -1
  20. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/efficiency-charts.tsx +3 -3
  21. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/window-summary.tsx +4 -4
  22. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  23. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/criteria.md +1 -0
  24. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/task/SKILL.md +4 -0
  25. {coder_eval-0.12.5 → coder_eval-0.12.7}/pyproject.toml +10 -8
  26. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/__init__.py +1 -1
  27. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/antigravity_agent.py +24 -15
  28. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/claude_code_agent.py +31 -11
  29. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/codex_agent.py +31 -14
  30. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/delegate_agent.py +27 -4
  31. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/pi_agent.py +2 -2
  32. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/command_executed.py +48 -12
  33. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/agent.py +2 -2
  34. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/agent_config.py +1 -1
  35. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/criteria.py +27 -1
  36. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/limits.py +9 -7
  37. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/results.py +4 -3
  38. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestrator.py +19 -10
  39. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/pricing.py +17 -11
  40. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/html.py +2 -1
  41. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/simulation/termination.py +1 -0
  42. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/collector.py +0 -16
  43. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -1
  44. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -1
  45. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -1
  46. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent.py +111 -1
  47. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_antigravity_agent.py +66 -55
  48. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_codex_agent.py +34 -11
  49. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_command_executed.py +97 -11
  50. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_delegate_agent.py +74 -3
  51. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_limits_orchestrator.py +44 -0
  52. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_success_criterion_union.py +25 -0
  53. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timeout_orchestrator.py +83 -0
  54. {coder_eval-0.12.5 → coder_eval-0.12.7}/uv.lock +126 -61
  55. coder_eval-0.12.5/tests/test_visible_turn_cap.py +0 -68
  56. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-code-review-full.md +0 -0
  57. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  58. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-code-review.md +0 -0
  59. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-create-plan.md +0 -0
  60. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-implement-plan.md +0 -0
  61. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/commands/coder-eval-review.md +0 -0
  62. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/harness-candidates.md +0 -0
  63. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/README.md +0 -0
  64. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/isolation.md +0 -0
  65. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/lint-rules.md +0 -0
  66. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/permissions.md +0 -0
  67. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/persistence.md +0 -0
  68. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/reporting.md +0 -0
  69. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/notes/timing.md +0 -0
  70. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/shared/axes.md +0 -0
  71. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/shared/multi-model-review.md +0 -0
  72. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/shared/review-rubric.md +0 -0
  73. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/shared/run-layout.md +0 -0
  74. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/workflows/cr-axis.js +0 -0
  75. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude/workflows/cr-parent.js +0 -0
  76. {coder_eval-0.12.5 → coder_eval-0.12.7}/.claude-plugin/marketplace.json +0 -0
  77. {coder_eval-0.12.5 → coder_eval-0.12.7}/.env.example +0 -0
  78. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/CODEOWNERS +0 -0
  79. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  80. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  81. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  82. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/actionlint.yaml +0 -0
  83. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/code_review.md +0 -0
  84. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/dependabot.yml +0 -0
  85. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/pages-stub/index.html +0 -0
  86. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  87. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/scripts/harbor_e2e.py +0 -0
  88. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/scripts/release_notes.py +0 -0
  89. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/claude-pr-review.yml +0 -0
  90. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/codeql.yml +0 -0
  91. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/conventional-commits.yml +0 -0
  92. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/docker-publish.yml +0 -0
  93. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/docs.yml +0 -0
  94. {coder_eval-0.12.5 → coder_eval-0.12.7}/.github/workflows/verify-published-action.yml +0 -0
  95. {coder_eval-0.12.5 → coder_eval-0.12.7}/.gitignore +0 -0
  96. {coder_eval-0.12.5 → coder_eval-0.12.7}/.pre-commit-config.yaml +0 -0
  97. {coder_eval-0.12.5 → coder_eval-0.12.7}/.python-version +0 -0
  98. {coder_eval-0.12.5 → coder_eval-0.12.7}/ADOPTERS.md +0 -0
  99. {coder_eval-0.12.5 → coder_eval-0.12.7}/CLAUDE.md +0 -0
  100. {coder_eval-0.12.5 → coder_eval-0.12.7}/CODE_OF_CONDUCT.md +0 -0
  101. {coder_eval-0.12.5 → coder_eval-0.12.7}/CONTRIBUTING.md +0 -0
  102. {coder_eval-0.12.5 → coder_eval-0.12.7}/LICENSE +0 -0
  103. {coder_eval-0.12.5 → coder_eval-0.12.7}/Makefile +0 -0
  104. {coder_eval-0.12.5 → coder_eval-0.12.7}/NOTICE +0 -0
  105. {coder_eval-0.12.5 → coder_eval-0.12.7}/README.md +0 -0
  106. {coder_eval-0.12.5 → coder_eval-0.12.7}/SECURITY.md +0 -0
  107. {coder_eval-0.12.5 → coder_eval-0.12.7}/comparison.md +0 -0
  108. {coder_eval-0.12.5 → coder_eval-0.12.7}/docker/coder_eval_entrypoint.sh +0 -0
  109. {coder_eval-0.12.5 → coder_eval-0.12.7}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  110. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/AB_EXPERIMENTS.md +0 -0
  111. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/CI_GATE.md +0 -0
  112. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/DATASETS.md +0 -0
  113. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/DOCKER_ISOLATION.md +0 -0
  114. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/EXTENDING.md +0 -0
  115. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/PLUGIN.md +0 -0
  116. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/USER_GUIDE.md +0 -0
  117. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/CLAUDE_CODE.md +0 -0
  118. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/DELEGATE.md +0 -0
  119. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/OPENCODE.md +0 -0
  120. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/agents/PI.md +0 -0
  121. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/assets/hero.gif +0 -0
  122. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/comparison.md +0 -0
  123. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/index.md +0 -0
  124. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/llms.txt +0 -0
  125. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/01-first-evaluation.md +0 -0
  126. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/02-ci-pipeline.md +0 -0
  127. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/03-evalboard-local.md +0 -0
  128. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/04-writing-a-task.md +0 -0
  129. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/05-comparing-models.md +0 -0
  130. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/06-use-docker-isolation.md +0 -0
  131. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  132. {coder_eval-0.12.5 → coder_eval-0.12.7}/docs/tutorials/README.md +0 -0
  133. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/.gitignore +0 -0
  134. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/README.md +0 -0
  135. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  136. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  137. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  138. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  139. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/col-help.tsx +0 -0
  140. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  141. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/harness-badge.tsx +0 -0
  142. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/harness-selector.tsx +0 -0
  143. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/scroll-table.tsx +0 -0
  144. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/search-box.tsx +0 -0
  145. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/skeleton.tsx +0 -0
  146. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/unit-toggle.tsx +0 -0
  147. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_components/version-list.tsx +0 -0
  148. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  149. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_lib/source-param.ts +0 -0
  150. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  151. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  152. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/daily-chart.tsx +0 -0
  153. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/harness-legend.tsx +0 -0
  154. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/harness-series.ts +0 -0
  155. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/tag-rail.tsx +0 -0
  156. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  157. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  158. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/api/download/route.ts +0 -0
  159. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/api/file/route.ts +0 -0
  160. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  161. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/api/refresh/route.ts +0 -0
  162. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/error.tsx +0 -0
  163. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/globals.css +0 -0
  164. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/icon.png +0 -0
  165. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/layout.tsx +0 -0
  166. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/loading.tsx +0 -0
  167. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/page.tsx +0 -0
  168. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  169. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/path-to-ga/page.tsx +0 -0
  170. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  171. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/scribe/page.tsx +0 -0
  172. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/scribe/run-table.tsx +0 -0
  173. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  174. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/trends/actions.ts +0 -0
  175. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/trends/page.tsx +0 -0
  176. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/trends/trends-view.tsx +0 -0
  177. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  178. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/watchlist/page.tsx +0 -0
  179. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  180. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/next-env.d.ts +0 -0
  181. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/next.config.mjs +0 -0
  182. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/package.json +0 -0
  183. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/pnpm-lock.yaml +0 -0
  184. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/postcss.config.mjs +0 -0
  185. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/public/harness/antigravity.png +0 -0
  186. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/public/harness/claude-code.png +0 -0
  187. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/public/harness/codex.png +0 -0
  188. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/public/harness/pi.png +0 -0
  189. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/public/uipath.png +0 -0
  190. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/tailwind.config.ts +0 -0
  191. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/tsconfig.json +0 -0
  192. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/vitest.config.ts +0 -0
  193. {coder_eval-0.12.5 → coder_eval-0.12.7}/evalboard/vitest.setup.ts +0 -0
  194. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/default.yaml +0 -0
  195. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/early-stop-ab.yaml +0 -0
  196. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/model-comparison.yaml +0 -0
  197. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/permissions-smoke.yaml +0 -0
  198. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/plugin-comparison.yaml +0 -0
  199. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/prompt-mutations-example.yaml +0 -0
  200. {coder_eval-0.12.5 → coder_eval-0.12.7}/experiments/smoke_variants.yaml +0 -0
  201. {coder_eval-0.12.5 → coder_eval-0.12.7}/litellm/README.md +0 -0
  202. {coder_eval-0.12.5 → coder_eval-0.12.7}/litellm/cost_logger.py +0 -0
  203. {coder_eval-0.12.5 → coder_eval-0.12.7}/litellm/litellm-config.yaml +0 -0
  204. {coder_eval-0.12.5 → coder_eval-0.12.7}/litellm/start-litellm.sh +0 -0
  205. {coder_eval-0.12.5 → coder_eval-0.12.7}/mkdocs.yml +0 -0
  206. {coder_eval-0.12.5 → coder_eval-0.12.7}/osv-scanner.toml +0 -0
  207. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/README.md +0 -0
  208. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/cli-setup.md +0 -0
  209. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/repo-layout.md +0 -0
  210. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/run-layout.md +0 -0
  211. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/task-rubric.md +0 -0
  212. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  213. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  214. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  215. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  216. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  217. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  218. {coder_eval-0.12.5 → coder_eval-0.12.7}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  219. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/check_commit_msg.sh +0 -0
  220. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/README.md +0 -0
  221. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/antigravity.json +0 -0
  222. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/claude-code.json +0 -0
  223. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/codex.json +0 -0
  224. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/opencode.json +0 -0
  225. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/corpus/pi.json +0 -0
  226. {coder_eval-0.12.5 → coder_eval-0.12.7}/scripts/timing/decompose_run.py +0 -0
  227. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/.gitattributes +0 -0
  228. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agent.py +0 -0
  229. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/__init__.py +0 -0
  230. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/_logging.py +0 -0
  231. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/_skills.py +0 -0
  232. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/delegate/.gitignore +0 -0
  233. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/delegate/delegate_host.mjs +0 -0
  234. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/delegate/package.json +0 -0
  235. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/noop_agent.py +0 -0
  236. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/opencode_agent.py +0 -0
  237. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/registry.py +0 -0
  238. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/agents/watchdog.py +0 -0
  239. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/analysis.py +0 -0
  240. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/argv_match.py +0 -0
  241. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/__init__.py +0 -0
  242. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/console.py +0 -0
  243. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/evaluate_command.py +0 -0
  244. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/evaluate_target.py +0 -0
  245. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/execute_command.py +0 -0
  246. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/export_command.py +0 -0
  247. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/harbor_command.py +0 -0
  248. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/plan_command.py +0 -0
  249. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/report_command.py +0 -0
  250. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/run_command.py +0 -0
  251. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/run_helpers.py +0 -0
  252. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  253. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/cli/utils.py +0 -0
  254. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/config.py +0 -0
  255. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/__init__.py +0 -0
  256. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  257. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/agent_judge.py +0 -0
  258. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/base.py +0 -0
  259. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/classification_match.py +0 -0
  260. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/cli_called.py +0 -0
  261. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  262. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/file_check.py +0 -0
  263. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/file_contains.py +0 -0
  264. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/file_exists.py +0 -0
  265. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  266. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/json_check.py +0 -0
  267. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/llm_judge.py +0 -0
  268. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/reference_comparison.py +0 -0
  269. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/run_command.py +0 -0
  270. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/skill_triggered.py +0 -0
  271. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/system_one_judge.py +0 -0
  272. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/criteria/uipath_eval.py +0 -0
  273. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/durations.py +0 -0
  274. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/__init__.py +0 -0
  275. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/agent.py +0 -0
  276. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/budget.py +0 -0
  277. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/categories.py +0 -0
  278. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/categorization.py +0 -0
  279. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/checker_misuse.py +0 -0
  280. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/executor.py +0 -0
  281. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/judge.py +0 -0
  282. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/reference.py +0 -0
  283. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/retry.py +0 -0
  284. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/errors/timeout.py +0 -0
  285. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/__init__.py +0 -0
  286. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/checker.py +0 -0
  287. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  288. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  289. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_context.py +0 -0
  290. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  291. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_models.py +0 -0
  292. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  293. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  294. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/judge_usage.py +0 -0
  295. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/sub_agent.py +0 -0
  296. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/summaries.py +0 -0
  297. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  298. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  299. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/formatting.py +0 -0
  300. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/fs_permissions.py +0 -0
  301. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/__init__.py +0 -0
  302. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/agent_paths.py +0 -0
  303. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/atif_emit.py +0 -0
  304. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  305. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/atif_models.py +0 -0
  306. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/experiment_packager.py +0 -0
  307. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/packager.py +0 -0
  308. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/portability.py +0 -0
  309. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/harbor/reward.py +0 -0
  310. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/invocation_log.py +0 -0
  311. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/isolation/__init__.py +0 -0
  312. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/isolation/docker_runner.py +0 -0
  313. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/litellm_cost.py +0 -0
  314. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/logging_config.py +0 -0
  315. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/__init__.py +0 -0
  316. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/cli_match.py +0 -0
  317. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/container_context.py +0 -0
  318. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/container_paths.py +0 -0
  319. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/enums.py +0 -0
  320. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/experiment.py +0 -0
  321. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/judge.py +0 -0
  322. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/judge_defaults.py +0 -0
  323. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/merge_strategy.py +0 -0
  324. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/mutations.py +0 -0
  325. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/routing.py +0 -0
  326. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/sandbox.py +0 -0
  327. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/system_one.py +0 -0
  328. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/tasks.py +0 -0
  329. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/telemetry.py +0 -0
  330. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/models/templates.py +0 -0
  331. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/__init__.py +0 -0
  332. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/batch.py +0 -0
  333. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/config.py +0 -0
  334. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/config_merge.py +0 -0
  335. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/early_stop.py +0 -0
  336. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/evaluation.py +0 -0
  337. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/experiment.py +0 -0
  338. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/overrides.py +0 -0
  339. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/regrade.py +0 -0
  340. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/run_limits.py +0 -0
  341. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  342. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/orchestration/task_loader.py +0 -0
  343. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/path_utils.py +0 -0
  344. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/plugins.py +0 -0
  345. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/py.typed +0 -0
  346. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/__init__.py +0 -0
  347. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/experiment.py +0 -0
  348. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/helpers.py +0 -0
  349. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/junit.py +0 -0
  350. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/reports/markdown.py +0 -0
  351. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/resources/__init__.py +0 -0
  352. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  353. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/resources/tags.yaml +0 -0
  354. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/result_metrics.py +0 -0
  355. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/run_record.py +0 -0
  356. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/sandbox.py +0 -0
  357. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/__init__.py +0 -0
  358. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/ast_similarity.py +0 -0
  359. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/complexity.py +0 -0
  360. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/quality.py +0 -0
  361. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/signature_similarity.py +0 -0
  362. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/similarity.py +0 -0
  363. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/scoring/token_similarity.py +0 -0
  364. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/simulation/__init__.py +0 -0
  365. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/simulation/user_simulator.py +0 -0
  366. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/stats.py +0 -0
  367. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/__init__.py +0 -0
  368. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/callbacks.py +0 -0
  369. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/events.py +0 -0
  370. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/renderers.py +0 -0
  371. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/streaming/wire.py +0 -0
  372. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/telemetry.py +0 -0
  373. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/timing.py +0 -0
  374. {coder_eval-0.12.5 → coder_eval-0.12.7}/src/coder_eval/utils.py +0 -0
  375. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/README.md +0 -0
  376. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agentless_smoke_test.yaml +0 -0
  377. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/antigravity_hello_world.yaml +0 -0
  378. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  379. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/claude_hello_world.yaml +0 -0
  380. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  381. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  382. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/claude_subagent_test.yaml +0 -0
  383. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  384. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_hello_world.yaml +0 -0
  385. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_parallel_commands.yaml +0 -0
  386. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  387. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_skills_test.yaml +0 -0
  388. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_string_utils.yaml +0 -0
  389. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/codex_subagent_test.yaml +0 -0
  390. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  391. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/agents/subagent_merge_sort.yaml +0 -0
  392. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  393. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  394. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/byod_smoke_test.yaml +0 -0
  395. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dataset_example.yaml +0 -0
  396. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/datasets/sentiment.jsonl +0 -0
  397. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  398. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/delegate/hello_date_delegate.yaml +0 -0
  399. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  400. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  401. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  402. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  403. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  404. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  405. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  406. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  407. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  408. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/fibonacci_with_template.yaml +0 -0
  409. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/hello_date.yaml +0 -0
  410. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/inline_starter_example.yaml +0 -0
  411. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/internal/session_resumption.yaml +0 -0
  412. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_smoke.yaml +0 -0
  413. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  414. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  415. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  416. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  417. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  418. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/opencode_smoke_test.yaml +0 -0
  419. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/pi_smoke_test.yaml +0 -0
  420. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  421. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/record_cli_responses.yaml +0 -0
  422. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/run_limits/max_turns_cap.yaml +0 -0
  423. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/run_limits/turn_timeout.yaml +0 -0
  424. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  425. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  426. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  427. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  428. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  429. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  430. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/README.md +0 -0
  431. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  432. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  433. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  434. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  435. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  436. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  437. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  438. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  439. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  440. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  441. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/sentiment_classification.yaml +0 -0
  442. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_agent_judge.yaml +0 -0
  443. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_budget_exceeded.yaml +0 -0
  444. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  445. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_llm_judge.yaml +0 -0
  446. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_negative_path.yaml +0 -0
  447. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_system_one_judge.yaml +0 -0
  448. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_task_timeout.yaml +0 -0
  449. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/smoke_variants.yaml +0 -0
  450. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/test_sandbox.yaml +0 -0
  451. {coder_eval-0.12.5 → coder_eval-0.12.7}/tasks/token_check.yaml +0 -0
  452. {coder_eval-0.12.5 → coder_eval-0.12.7}/templates/byod_smoke_test/Dockerfile +0 -0
  453. {coder_eval-0.12.5 → coder_eval-0.12.7}/templates/fibonacci-starter/README.md +0 -0
  454. {coder_eval-0.12.5 → coder_eval-0.12.7}/templates/fibonacci-starter/src/main.py +0 -0
  455. {coder_eval-0.12.5 → coder_eval-0.12.7}/templates/fibonacci-starter/tests/test_main.py +0 -0
  456. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/__init__.py +0 -0
  457. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_bracket_clock.py +0 -0
  458. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_container_contract.py +0 -0
  459. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/__init__.py +0 -0
  460. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/__init__.py +0 -0
  461. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  462. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  463. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  464. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  465. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
  466. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
  467. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
  468. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
  469. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
  470. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  471. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  472. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  473. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  474. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  475. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  476. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  477. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  478. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  479. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  480. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  481. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  482. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  483. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  484. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  485. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
  486. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
  487. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
  488. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
  489. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
  490. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
  491. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
  492. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
  493. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
  494. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
  495. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
  496. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  497. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  498. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  499. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  500. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  501. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  502. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  503. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  504. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  505. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  506. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  507. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  508. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  509. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/live_criteria.py +0 -0
  510. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  511. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  512. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  513. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  514. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  515. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  516. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  517. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_fixtures/timing_union_cases.json +0 -0
  518. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/_path_helpers.py +0 -0
  519. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/conftest.py +0 -0
  520. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/__init__.py +0 -0
  521. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  522. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  523. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  524. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/mock_agent.py +0 -0
  525. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  526. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  527. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  528. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  529. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/fixtures/text_stub_agent.py +0 -0
  530. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  531. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  532. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  533. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  534. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/__init__.py +0 -0
  535. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/action_docs.py +0 -0
  536. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/agent_roster_parity.py +0 -0
  537. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/dead_config_fields.py +0 -0
  538. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/doc_env_parity.py +0 -0
  539. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/doc_examples.py +0 -0
  540. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/doc_indexes.py +0 -0
  541. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/doc_schema_parity.py +0 -0
  542. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/generated.py +0 -0
  543. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/live_verdict_contract.py +0 -0
  544. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/plugin_manifest_parity.py +0 -0
  545. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/plugin_reference.py +0 -0
  546. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/pricing_mirror.py +0 -0
  547. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/prose_budget.py +0 -0
  548. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/pyright_config.py +0 -0
  549. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/__init__.py +0 -0
  550. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/_layers.py +0 -0
  551. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/_model_ctor.py +0 -0
  552. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/base.py +0 -0
  553. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  554. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  555. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  556. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  557. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  558. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  559. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  560. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  561. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  562. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  563. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  564. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  565. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  566. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  567. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  568. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  569. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  570. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  571. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  572. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  573. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  574. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  575. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  576. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  577. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  578. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  579. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  580. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  581. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  582. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  583. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  584. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  585. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_agent_timing_access.py +0 -0
  586. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  587. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  588. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_silent_except.py +0 -0
  589. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  590. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  591. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  592. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  593. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/open_explicit_encoding.py +0 -0
  594. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  595. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/register_criterion_required.py +0 -0
  596. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  597. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  598. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/runner.py +0 -0
  599. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/violation.py +0 -0
  600. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/lint/workflow_outputs.py +0 -0
  601. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_action_inputs.py +0 -0
  602. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_action_version_pin.py +0 -0
  603. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_config_no_timing_fields.py +0 -0
  604. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_config_optional_type.py +0 -0
  605. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_config_registry_dispatch.py +0 -0
  606. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_config_sdk_decoupling.py +0 -0
  607. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_golden_master.py +0 -0
  608. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_judge_criterion.py +0 -0
  609. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_telemetry.py +0 -0
  610. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_telemetry_advanced.py +0 -0
  611. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agent_timeout.py +0 -0
  612. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_agentless.py +0 -0
  613. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_atif_emit.py +0 -0
  614. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_atif_hydrate.py +0 -0
  615. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_atif_models.py +0 -0
  616. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_byoa_plugin.py +0 -0
  617. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_byoa_plugin_live.py +0 -0
  618. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_byod_feature.py +0 -0
  619. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_check_all_async.py +0 -0
  620. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_checker_logging.py +0 -0
  621. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_classification_match.py +0 -0
  622. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_claude_settings_enforcement_live.py +0 -0
  623. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cleanup_preservation_guard.py +0 -0
  624. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_backend_flag.py +0 -0
  625. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_called_criterion.py +0 -0
  626. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_empty_glob.py +0 -0
  627. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_match_parity.py +0 -0
  628. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_sdk_options.py +0 -0
  629. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_set_overrides.py +0 -0
  630. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_telemetry.py +0 -0
  631. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cli_type_flag.py +0 -0
  632. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_code_review_bugs.py +0 -0
  633. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_codex_agent_live.py +0 -0
  634. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_codex_agent_unit.py +0 -0
  635. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_codex_token_mapping.py +0 -0
  636. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_command_statistics.py +0 -0
  637. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_command_telemetry_result_data.py +0 -0
  638. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_commands_efficiency.py +0 -0
  639. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_config_lineage.py +0 -0
  640. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_config_merge_engine.py +0 -0
  641. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_config_precedence.py +0 -0
  642. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_container_context.py +0 -0
  643. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_continuous_scoring.py +0 -0
  644. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_cost_accounting_paths.py +0 -0
  645. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_criterion_result_round_trip.py +0 -0
  646. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_custom_lint.py +0 -0
  647. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_dataset_expansion.py +0 -0
  648. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_debug_logging.py +0 -0
  649. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_delegate_agent_config.py +0 -0
  650. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_delegate_agent_live.py +0 -0
  651. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_delegate_agent_registration.py +0 -0
  652. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_detached_grading_boundaries.py +0 -0
  653. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_detached_grading_guards.py +0 -0
  654. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_build_failure.py +0 -0
  655. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_litellm_env.py +0 -0
  656. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_runner_container_death.py +0 -0
  657. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_runner_mounts.py +0 -0
  658. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_runner_stream_limit.py +0 -0
  659. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_wildcard_env.py +0 -0
  660. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_docker_workdir_live.py +0 -0
  661. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_driver_resolver.py +0 -0
  662. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_durations.py +0 -0
  663. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_early_stop.py +0 -0
  664. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_error_handling.py +0 -0
  665. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_evaluate_command.py +0 -0
  666. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_evaluate_format_harbor.py +0 -0
  667. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_evaluate_target.py +0 -0
  668. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_evaluator.py +0 -0
  669. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_event_collector.py +0 -0
  670. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_execute_command.py +0 -0
  671. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_execute_evaluate_loop.py +0 -0
  672. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_execute_format_harbor.py +0 -0
  673. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_cli.py +0 -0
  674. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_loader.py +0 -0
  675. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_models.py +0 -0
  676. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_reports.py +0 -0
  677. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_resolver.py +0 -0
  678. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_experiment_runner.py +0 -0
  679. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_file_check.py +0 -0
  680. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_file_contains_scoring.py +0 -0
  681. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_formatting.py +0 -0
  682. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_git_clone_failure.py +0 -0
  683. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_glob_paths_in_file_criteria.py +0 -0
  684. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_agent.py +0 -0
  685. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_e2e_fixtures.py +0 -0
  686. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_experiment_packager.py +0 -0
  687. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_export_golden.py +0 -0
  688. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_packager.py +0 -0
  689. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_portability.py +0 -0
  690. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_harbor_reward.py +0 -0
  691. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_heartbeat_watchdog.py +0 -0
  692. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_ignore_patterns_negation.py +0 -0
  693. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_image_from_dockerfiles.py +0 -0
  694. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_image_skew_refusal.py +0 -0
  695. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_integration.py +0 -0
  696. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_json_check.py +0 -0
  697. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_anthropic.py +0 -0
  698. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_bedrock.py +0 -0
  699. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_burn_in_live.py +0 -0
  700. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_context_builder.py +0 -0
  701. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_litellm.py +0 -0
  702. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_models.py +0 -0
  703. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_persistence.py +0 -0
  704. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_judge_system_one.py +0 -0
  705. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_lint_no_top_level_run_limits.py +0 -0
  706. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_lint_runner.py +0 -0
  707. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_litellm_config.py +0 -0
  708. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_litellm_cost.py +0 -0
  709. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_litellm_cost_logger.py +0 -0
  710. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_litellm_judge_live.py +0 -0
  711. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_litellm_route.py +0 -0
  712. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_llm_judge_criterion.py +0 -0
  713. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_log_tail_buffer.py +0 -0
  714. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_logging.py +0 -0
  715. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_logging_isolation.py +0 -0
  716. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_merge_characterization.py +0 -0
  717. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_merge_strategy_annotations.py +0 -0
  718. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_merge_unification.py +0 -0
  719. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_models.py +0 -0
  720. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_mutations.py +0 -0
  721. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_new_criteria.py +0 -0
  722. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_node_env_config.py +0 -0
  723. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_opencode_agent.py +0 -0
  724. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_optional_dependencies.py +0 -0
  725. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_orchestrator.py +0 -0
  726. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_orchestrator_error_log_tail.py +0 -0
  727. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_orchestrator_telemetry.py +0 -0
  728. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_overrides_engine.py +0 -0
  729. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_parallel.py +0 -0
  730. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_path_utils.py +0 -0
  731. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pi_agent.py +0 -0
  732. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pi_agent_config.py +0 -0
  733. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pi_smoke_task.py +0 -0
  734. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_plan_command.py +0 -0
  735. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_plugin_processing.py +0 -0
  736. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_plugins.py +0 -0
  737. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_post_run.py +0 -0
  738. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pr_review_workflow.py +0 -0
  739. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pre_run.py +0 -0
  740. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_preservation_mode.py +0 -0
  741. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pricing_mirror.py +0 -0
  742. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_pricing_registry.py +0 -0
  743. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_prose_budget.py +0 -0
  744. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_prose_budget_commands.py +0 -0
  745. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reference_comparison_scoring.py +0 -0
  746. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reference_evaluator.py +0 -0
  747. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reference_missing_file.py +0 -0
  748. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reference_models.py +0 -0
  749. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reference_permissions.py +0 -0
  750. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_registry.py +0 -0
  751. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_regrade.py +0 -0
  752. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_release_notes.py +0 -0
  753. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_replicate_stats.py +0 -0
  754. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_report_command.py +0 -0
  755. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reports.py +0 -0
  756. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reports_html.py +0 -0
  757. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reports_junit.py +0 -0
  758. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_reports_package.py +0 -0
  759. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_resolve_task_files.py +0 -0
  760. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_result_metrics.py +0 -0
  761. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_resume.py +0 -0
  762. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_retry_logic_comprehensive.py +0 -0
  763. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_route_seam_exhaustiveness.py +0 -0
  764. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_routing.py +0 -0
  765. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_command_junit.py +0 -0
  766. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_command_stdout.py +0 -0
  767. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_helpers.py +0 -0
  768. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_limits_models.py +0 -0
  769. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_limits_resolver.py +0 -0
  770. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_metrics.py +0 -0
  771. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_record.py +0 -0
  772. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_run_summary_rebuild.py +0 -0
  773. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_runtime_tool_versions.py +0 -0
  774. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox.py +0 -0
  775. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_adopt.py +0 -0
  776. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_layer_builder.py +0 -0
  777. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_optional.py +0 -0
  778. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_record_cli.py +0 -0
  779. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_security.py +0 -0
  780. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_symlink_preservation.py +0 -0
  781. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_templates.py +0 -0
  782. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sandbox_venv_live.py +0 -0
  783. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_scorers.py +0 -0
  784. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_scoring_quality.py +0 -0
  785. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sdk_option_classification.py +0 -0
  786. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_seed_from_prior_result.py +0 -0
  787. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_simulation_config.py +0 -0
  788. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_simulation_integration.py +0 -0
  789. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_simulation_termination.py +0 -0
  790. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_simulation_trials.py +0 -0
  791. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_skill_triggered.py +0 -0
  792. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_stats.py +0 -0
  793. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_stats_nonfinite.py +0 -0
  794. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_agent_integration.py +0 -0
  795. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_batch.py +0 -0
  796. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_callbacks.py +0 -0
  797. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_cli.py +0 -0
  798. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_events.py +0 -0
  799. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_orchestrator.py +0 -0
  800. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_renderers.py +0 -0
  801. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_streaming_wire.py +0 -0
  802. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_sub_agent_runner.py +0 -0
  803. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_suite_rollup.py +0 -0
  804. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_summaries.py +0 -0
  805. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_system_one_judge.py +0 -0
  806. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_system_one_judge_live.py +0 -0
  807. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_tags.py +0 -0
  808. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_task_definition_unknown_fields.py +0 -0
  809. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_teardown_interrupt.py +0 -0
  810. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_telemetry.py +0 -0
  811. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_template_env_expansion.py +0 -0
  812. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_threshold_enforcement.py +0 -0
  813. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timeout_batch.py +0 -0
  814. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timeout_categorization.py +0 -0
  815. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timeout_exceptions.py +0 -0
  816. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timeout_models.py +0 -0
  817. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timing_close_window.py +0 -0
  818. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timing_identity_contract.py +0 -0
  819. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_timing_union_parity.py +0 -0
  820. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_token_usage.py +0 -0
  821. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_uipath_eval.py +0 -0
  822. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_ungraded_reporting.py +0 -0
  823. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_user_simulator.py +0 -0
  824. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_utils.py +0 -0
  825. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_utterance_extraction.py +0 -0
  826. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_variant_prompt_file.py +0 -0
  827. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_verdict_tool.py +0 -0
  828. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_verify_published_workflow.py +0 -0
  829. {coder_eval-0.12.5 → coder_eval-0.12.7}/tests/test_watchdog.py +0 -0
  830. {coder_eval-0.12.5 → coder_eval-0.12.7}/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.
@@ -95,9 +95,14 @@ the raw text alone can stop counting.
95
95
  It is memoized because the early-stop watcher re-scans the whole accumulated trajectory on
96
96
  every tool-call event, normalizing the same command many times per run.
97
97
 
98
- The regex search window is capped to bound ReDoS on a large command string, and
99
- normalization runs over that same truncated window, so `shlex` never sees more than the cap
100
- and needs no separate guard.
98
+ Each regex search is bounded to 2000 characters to limit ReDoS on a large command string,
99
+ but the whole command is searched: the first 2000 characters, then the rest in windows that
100
+ start and end on logical-line boundaries. Agents write long heredoc scripts that end in the
101
+ command a task checks for (`cat > x <<EOF ... EOF` then `uip agent validate`), and a single
102
+ leading window scored those as never run. Normalization runs per window, so `shlex` never
103
+ sees more than the bound and needs no separate guard. Only a Bash command is windowed:
104
+ another tool's params are JSON, and a later window of a Write/Edit body is file content,
105
+ not a command the agent ran, so those keep the single leading window.
101
106
 
102
107
  ## Recording a CLI invocation
103
108
 
@@ -108,6 +108,23 @@ VERDICT, never the facts — the seeding cannot restore a fact the execute phase
108
108
  captured. The budget gate runs AFTER the criteria on the graded path purely for
109
109
  partial-credit visibility, and there is no partial credit under `execute`.
110
110
 
111
+ ### Post-failure evidence is declared, not proven
112
+
113
+ A timed-out run used to score 0.00 on artifacts that every grader accepted, because the
114
+ whole uipath-maestro-flow suite grades through `run_command` and the path ran only file
115
+ checks. `read_only: true` admits a single named command.
116
+
117
+ The gate could not stay a ClassVar: `run_command` is safe or unsafe per criterion, not
118
+ per type, and no analysis decides which — an arbitrary shell command can start a cloud
119
+ job (`uip maestro flow debug` does). So the flag is the AUTHOR's claim, the ClassVar
120
+ stayed the type-level answer, and `evaluable_after_agent_failure` became the per-instance
121
+ one every caller asks. Widening the flag to the base would let a judge declare itself
122
+ deterministic, which is a different and false claim.
123
+
124
+ What keeps it honest: results land in `post_failure_criteria_results`, which
125
+ `calculate_weighted_score` never reads. A timed-out run stays ERROR at 0.0 no matter what
126
+ the diagnostic pass finds — the flag buys evidence, never a verdict.
127
+
111
128
  ### Rates need verdict evidence, not bucket counts
112
129
 
113
130
  A published rate divides by rows that actually carry a verdict, not by a bucket count. The
@@ -29,6 +29,8 @@ env:
29
29
  # Anthropic-credit spend off this path; DirectRoute is exercised elsewhere.
30
30
  API_BACKEND: "bedrock"
31
31
  CLAUDE_CODE_USE_BEDROCK: "1"
32
+ # Same expression as pr-checks.yml (see the comment there).
33
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }},claude-agent-sdk
32
34
 
33
35
  jobs:
34
36
  harbor-e2e:
@@ -38,11 +38,12 @@ env:
38
38
  TELEMETRY_ENABLED: "false"
39
39
  # The `uipath-*` pool enforces a minimum package-age safe-chain check on installs.
40
40
  # Workflow-level so every installing job inherits it; per-job copies are how some
41
- # jobs previously ended up with no exclusions at all. The literal is the operative
42
- # value — no secret of that name exists at repo or org level, so the bare `secrets.`
43
- # reference this replaced resolved to an empty list. (Image builds carry their own
44
- # list in docker/Dockerfile; deliberately not the same set.)
45
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
41
+ # jobs previously ended up with no exclusions at all. A repo secret of this name
42
+ # replaces the literal when set, so claude-agent-sdk sits outside the `||`: its wheel
43
+ # bundles the Claude Code CLI, and new-model support ships there faster than the
44
+ # gate window. (Image builds carry their own list in docker/Dockerfile; deliberately
45
+ # not the same set.)
46
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }},claude-agent-sdk
46
47
 
47
48
  jobs:
48
49
  quality-gate:
@@ -38,7 +38,7 @@ jobs:
38
38
  timeout-minutes: 10
39
39
  env:
40
40
  # `uv build` resolves build deps under the pool's safe-chain gate.
41
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
41
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }},claude-agent-sdk
42
42
  environment:
43
43
  name: testpypi
44
44
  url: https://test.pypi.org/project/coder-eval/
@@ -75,7 +75,7 @@ jobs:
75
75
  # Load-bearing on the release path: the pool enforces a package-age safe-chain
76
76
  # check on uv installs. Same expression as pr-checks.yml (see the comment there),
77
77
  # so a package can't pass PR CI and then fail the release install.
78
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
78
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }},claude-agent-sdk
79
79
 
80
80
  steps:
81
81
  # Only a real release (main) needs the app token: semantic-release pushes the
@@ -2,6 +2,158 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.7 (2026-09-25)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **criteria**: Search past the 2000-char bound only in Bash commands
10
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
11
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
12
+
13
+ - **criteria**: Search the whole command in command_executed and bump harness SDKs for Opus 5.5
14
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
15
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
16
+
17
+ - **criteria**: Search the whole command in command_executed, not just the first 2000 chars
18
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
19
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
20
+
21
+ - **docs**: Drop the budget-breach trigger, cut read_only to its contract
22
+ ([#197](https://github.com/UiPath/coder_eval/pull/197),
23
+ [`28c846e`](https://github.com/UiPath/coder_eval/commit/28c846ea6858fef04d366d245e5f7b679c2b75a1))
24
+
25
+ - **evalboard**: List date-named runs flagged adhoc in the Ad-hoc section
26
+ ([#200](https://github.com/UiPath/coder_eval/pull/200),
27
+ [`5bf4a72`](https://github.com/UiPath/coder_eval/commit/5bf4a72693f007e93da678b58e0ddb84fa1bf63c))
28
+
29
+ - **harbor**: Declare SUPPORTS_ATIF as a ClassVar to match harbor 0.23
30
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
31
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
32
+
33
+ ### Build System
34
+
35
+ - **deps**: Bump harness SDKs and CLIs to latest
36
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
37
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
38
+
39
+ - **deps**: Exempt claude-agent-sdk from the 48h package-age gate and take the latest SDK
40
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
41
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
42
+
43
+ - **deps**: Hold the SDK bump to releases past CI's 48h package-age gate
44
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
45
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
46
+
47
+ ### Continuous Integration
48
+
49
+ - **harbor**: Exempt claude-agent-sdk from the package-age gate in Harbor E2E
50
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
51
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
52
+
53
+ ### Documentation
54
+
55
+ - **agents**: Update Pi and Antigravity references for the harness bump
56
+ ([#196](https://github.com/UiPath/coder_eval/pull/196),
57
+ [`3aa2db3`](https://github.com/UiPath/coder_eval/commit/3aa2db30cdb07e47ca2cce98b47385eedb2de9cd))
58
+
59
+ - **criteria**: Name the budget-breach trigger on the post-failure path
60
+ ([#197](https://github.com/UiPath/coder_eval/pull/197),
61
+ [`28c846e`](https://github.com/UiPath/coder_eval/commit/28c846ea6858fef04d366d245e5f7b679c2b75a1))
62
+
63
+ ### Features
64
+
65
+ - **criteria**: Let a run_command criterion opt in to post-failure grading
66
+ ([#197](https://github.com/UiPath/coder_eval/pull/197),
67
+ [`28c846e`](https://github.com/UiPath/coder_eval/commit/28c846ea6858fef04d366d245e5f7b679c2b75a1))
68
+
69
+ - **evalboard**: Count agent time apart from eval overhead, and filter runs by variant
70
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
71
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
72
+
73
+ - **evalboard**: Headline agent time per passed task, not full task wall clock
74
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
75
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
76
+
77
+ - **evalboard**: Show agent time on the run page and filter it by variant
78
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
79
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
80
+
81
+ - **evalboard**: Show summed agent time in the overview window tile
82
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
83
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
84
+
85
+ - **evalboard**: Simplify the task timing strip into one bar and two groups
86
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
87
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
88
+
89
+ - **evalboard**: Split the task timeline into agent time and eval overhead
90
+ ([#198](https://github.com/UiPath/coder_eval/pull/198),
91
+ [`b04829c`](https://github.com/UiPath/coder_eval/commit/b04829c4dec86772822a28ef1b3fa7316c1f3c8d))
92
+
93
+
94
+ ## v0.12.6 (2026-09-23)
95
+
96
+ ### Bug Fixes
97
+
98
+ - **claude-code**: End a turn the CLI did not cap at max_turns
99
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
100
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
101
+
102
+ - **claude-code**: Kill the CLI on a cooperative stop
103
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
104
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
105
+
106
+ - **claude-code**: Kill the CLI on a max_turns backstop stop without a turn timeout
107
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
108
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
109
+
110
+ - **codex**: End a capped turn before the next call can run a tool
111
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
112
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
113
+
114
+ - **delegate**: Count a tool-only reply as a model call
115
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
116
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
117
+
118
+ - **delegate**: Keep counting model calls when a tool never returns
119
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
120
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
121
+
122
+ - **evalboard**: Compare visible turns, not SDK num_turns, against expected_turns
123
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
124
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
125
+
126
+ - **pricing**: Add Opus 5.5 and GPT-6, correct rates that moved publicly
127
+ ([#195](https://github.com/UiPath/coder_eval/pull/195),
128
+ [`11b902f`](https://github.com/UiPath/coder_eval/commit/11b902fa9bc0d307bcab22801dc56523fcc1d92a))
129
+
130
+ - **run-limits**: Count max_turns as model API calls on every harness
131
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
132
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
133
+
134
+ - **run-limits**: Count max_turns as model API calls on every harness and enforce it on claude-code
135
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
136
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
137
+
138
+ - **run-limits**: Stop a turn mid-flight once a token or USD budget is crossed
139
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
140
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
141
+
142
+ - **simulation**: End a dialog with agent_max_turns when the agent hits its own cap
143
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
144
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
145
+
146
+ ### Documentation
147
+
148
+ - **parity**: Record the claude-code max_turns backstop
149
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
150
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
151
+
152
+ - **run-limits**: Say max_turns restarts per iteration and expected_turns counts tool calls
153
+ ([#194](https://github.com/UiPath/coder_eval/pull/194),
154
+ [`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
155
+
156
+
5
157
  ## v0.12.5 (2026-09-22)
6
158
 
7
159
  ### 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.7
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
@@ -26,7 +26,7 @@ Requires-Python: >=3.13
26
26
  Requires-Dist: anthropic<2.0.0,>=1.0.0
27
27
  Requires-Dist: anyio>=4.14.2
28
28
  Requires-Dist: azure-monitor-opentelemetry-exporter<1.1.0,>=1.0.0b30
29
- Requires-Dist: claude-agent-sdk>=0.2.124
29
+ Requires-Dist: claude-agent-sdk>=0.2.157
30
30
  Requires-Dist: click>=8.3.3
31
31
  Requires-Dist: httpx2<3.0.0,>=2.12.0
32
32
  Requires-Dist: jmespath>=1.1.0
@@ -43,9 +43,9 @@ Requires-Dist: tomli-w>=1.0.0
43
43
  Requires-Dist: tqdm>=4.67.3
44
44
  Requires-Dist: typer>=0.24.1
45
45
  Provides-Extra: antigravity
46
- Requires-Dist: google-antigravity==0.1.8; extra == 'antigravity'
46
+ Requires-Dist: google-antigravity==0.1.18; extra == 'antigravity'
47
47
  Provides-Extra: codex
48
- Requires-Dist: openai-codex>=0.144.4; extra == 'codex'
48
+ Requires-Dist: openai-codex>=0.155.1; extra == 'codex'
49
49
  Provides-Extra: dev
50
50
  Requires-Dist: bandit[toml]>=1.9.4; extra == 'dev'
51
51
  Requires-Dist: defusedxml>=0.7.1; extra == 'dev'
@@ -60,7 +60,7 @@ Requires-Dist: pytest-xdist[psutil]>=3.0.0; extra == 'dev'
60
60
  Requires-Dist: pytest>=9.0.2; extra == 'dev'
61
61
  Requires-Dist: ruff>=0.15.7; extra == 'dev'
62
62
  Provides-Extra: harbor
63
- Requires-Dist: harbor==0.22.0; extra == 'harbor'
63
+ Requires-Dist: harbor==0.23.0; extra == 'harbor'
64
64
  Provides-Extra: litellm
65
65
  Requires-Dist: litellm<2.0.0,>=1.95.0; extra == 'litellm'
66
66
  Provides-Extra: opencode
@@ -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.7" # <-- 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
@@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
30
30
  # tag and is bumped deliberately -- mirrors the codex CLI pin
31
31
  # (`openai-codex-cli-bin==…` in pyproject). Leaving it at `@latest` let Docker
32
32
  # layer caching freeze it nondeterministically across rebuilds.
33
- ARG CLAUDE_CODE_VERSION=2.1.177
33
+ ARG CLAUDE_CODE_VERSION=2.1.281
34
34
  RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
35
35
  && apt-get install -y --no-install-recommends nodejs \
36
36
  && rm -rf /var/lib/apt/lists/* \
@@ -39,7 +39,7 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
39
39
  # Pi Node CLI, pinned — same rationale as the Claude Code pin above (the agent
40
40
  # binary is a dominant non-model driver of results; @latest would freeze
41
41
  # nondeterministically under layer caching). Node 22 + npm are already present.
42
- ARG PI_VERSION=0.84.4
42
+ ARG PI_VERSION=0.87.1
43
43
  RUN npm install -g @earendil-works/pi-coding-agent@${PI_VERSION}
44
44
 
45
45
  # uv: matches host sandbox.py's `uv venv` + `uv pip install` fast path
@@ -84,12 +84,12 @@ COPY experiments/default.yaml ./experiments/default.yaml
84
84
  # pulls the `uipath` SDK from public PyPI (no credentials required).
85
85
  ARG CODER_EVAL_UV_EXTRAS=""
86
86
 
87
- # safe-chain min-age exclusions for the codex cli-bin pin (see pyproject [tool.uv])
88
- # and the pinned Antigravity harness. Codex and Antigravity are always installed,
89
- # so the default excludes their pinned packages from the min-age gate (the
90
- # google-antigravity release tracks the rapidly-moving Gemini harness and may be
87
+ # safe-chain min-age exclusions for the codex cli-bin pin (see pyproject [tool.uv]),
88
+ # the pinned Antigravity harness, and claude-agent-sdk (its wheel bundles the Claude
89
+ # Code CLI). All three are always installed, so the default excludes their pinned
90
+ # packages from the min-age gate (each tracks a rapidly-moving harness and may be
91
91
  # newer than the gate window); callers may override.
92
- ARG SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="openai-codex-cli-bin,openai-codex,google-antigravity"
92
+ ARG SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="openai-codex-cli-bin,openai-codex,google-antigravity,claude-agent-sdk"
93
93
 
94
94
  # All extras (codex, antigravity, litellm, and the opt-in uipath) resolve from
95
95
  # public PyPI per uv.lock, so the build needs no private-index credentials.
@@ -53,7 +53,7 @@ COPY pyproject.toml uv.lock README.md ./
53
53
  COPY src/ ./src/
54
54
  COPY experiments/default.yaml ./experiments/default.yaml
55
55
 
56
- ARG SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="openai-codex-cli-bin,openai-codex"
56
+ ARG SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="openai-codex-cli-bin,openai-codex,claude-agent-sdk"
57
57
  # Install the locked deps, then coder_eval itself NON-editable. An editable/path
58
58
  # install would leave the package source at /src (outside the kit), so the
59
59
  # `COPY --from /opt/coder-eval` overlay would ship a venv that can't import
@@ -66,7 +66,7 @@ RUN export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="${SAFE_CHAIN_MINIMUM_PACKA
66
66
 
67
67
  # --- 3. Node LTS + the Claude Code CLI, under the kit dir. -------------------
68
68
  ARG NODE_VERSION=22.14.0
69
- ARG CLAUDE_CODE_VERSION=2.1.177
69
+ ARG CLAUDE_CODE_VERSION=2.1.281
70
70
  # Download to a file first so a bad URL fails the build loudly (a piped
71
71
  # `curl | tar` would mask a 404 and only surface later as a missing npm), and
72
72
  # verify the tarball against nodejs.org's published SHASUMS256 before extracting
@@ -109,6 +109,6 @@ RUN chmod +x /usr/local/bin/coder_eval_entrypoint.sh
109
109
  # label; labels don't survive `COPY --from`). The claude-code pin mirrors the
110
110
  # framework image — a parity test (tests/test_image_from_dockerfiles.py) enforces it.
111
111
  ARG CODER_EVAL_VERSION=unknown
112
- ARG CLAUDE_CODE_VERSION=2.1.177
112
+ ARG CLAUDE_CODE_VERSION=2.1.281
113
113
  LABEL org.coder-eval.version="${CODER_EVAL_VERSION}"
114
114
  LABEL org.coder-eval.claude-code-version="${CLAUDE_CODE_VERSION}"
@@ -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
@@ -188,14 +188,17 @@ fields so subclass keys round-trip.
188
188
 
189
189
  ### Post-failure criterion evidence
190
190
 
191
- When an agent crashes or its turn times out, coder-eval runs only deterministic,
192
- read-only artifact criteria while the sandbox is still live: `file_exists`,
191
+ When an agent crashes or its turn times out on a graded run, coder-eval runs only
192
+ deterministic, read-only artifact criteria while the sandbox is still live: `file_exists`,
193
193
  `file_contains`, `file_matches_regex`, `file_check`, `json_check`,
194
- `reference_comparison`, and `classification_match`. Judges, trajectory checks,
195
- `run_command`, and `uipath_eval` are recorded with
196
- `evaluation_status="not_evaluated"`; they are not invoked on this recovery path.
194
+ `reference_comparison`, and `classification_match`. A `run_command` criterion joins them
195
+ only when the task author sets [`read_only: true`](TASK_DEFINITION_GUIDE.md#run_command)
196
+ on it. Judges, trajectory checks, plain `run_command`, and `uipath_eval` are recorded
197
+ with `evaluation_status="not_evaluated"`; they are not invoked on this recovery path.
197
198
  The diagnostic list is additive evidence. An `ERROR` run remains `ERROR`, and its
198
- canonical score remains 0.0.
199
+ canonical score remains 0.0. The list stays empty under `coder-eval execute`, and on a
200
+ token/cost budget breach, which fires only after every criterion is already scored in
201
+ `success_criteria_results`.
199
202
 
200
203
  ### TurnRecord
201
204
 
@@ -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
@@ -904,6 +904,12 @@ Runs a command and checks the exit code, with optional stdout matching. **Binary
904
904
  expected_stdout: "Hello, World!" # Optional: check stdout content
905
905
  stdout_match: "exact" # "exact" (default), "contains", or "regex"
906
906
  description: "Script must output the correct text"
907
+
908
+ # Also graded when the turn times out or the agent crashes
909
+ - type: "run_command"
910
+ command: "python graders/check_flow.py"
911
+ read_only: true # declaration, not enforcement -- see below
912
+ description: "Flow must contain the approval node"
907
913
  ```
908
914
 
909
915
  | Field | Default | Description |
@@ -914,6 +920,19 @@ Runs a command and checks the exit code, with optional stdout matching. **Binary
914
920
  | `expected_stdout` | `null` | When set, stdout is also checked |
915
921
  | `stdout_match` | `"exact"` | Match mode: `exact` (stripped), `contains` (substring), `regex` (pattern) |
916
922
  | `score_from_stdout` | `false` | Read a float score (0.0–1.0) from the first stdout line (remaining lines become details); a non-zero exit code or a parse failure scores 0.0. Mutually exclusive with `expected_stdout`. |
923
+ | `read_only` | `false` | Declares the command inspects artifacts only. Its sole effect: a graded run also runs the criterion after a turn timeout or an agent crash — see [Post-failure criterion evidence](REPORT_SCHEMA.md#post-failure-criterion-evidence). |
924
+
925
+ `read_only` is an author declaration, **not** a restriction. coder-eval cannot decide
926
+ whether a shell command is pure, so it verifies nothing and confines nothing: the
927
+ command runs exactly as it always does. Set it only when the command reads artifacts and
928
+ nothing else. Leave it `false` when the command writes state or calls a live service (a
929
+ `uip maestro flow debug` grader starts a real cloud job, so it must stay `false`).
930
+
931
+ Keep a `read_only` criterion's `timeout` short. The diagnostic pass runs after the agent
932
+ is gone, and the commands are not interruptible: a `task_timeout` that expires mid-pass
933
+ cancels the await, not the shell subprocess, so it keeps running while the sandbox is
934
+ torn down. Without a `task_timeout` the pass is bounded only by the sum of these
935
+ timeouts.
917
936
 
918
937
  ### `file_matches_regex`
919
938
 
@@ -978,6 +997,8 @@ Checks whether the agent executed specific tools/commands during evaluation. Ins
978
997
 
979
998
  **Shell normalization.** For a Bash command, both `command_pattern` and `exclude_pattern` are matched against the raw command text **and** its shell-normalized form — the `bash`/`sh`/`zsh -lc "..."` wrapper stripped and shell quoting resolved with `shlex` — and a hit on *either* form counts. So a pattern like `curated_channels` matches whether the agent wrote the argument bare, `'single'`-quoted, `"double"`-quoted, or `\"escaped\"`; you do **not** hand-encode shell quoting. Because the same haystacks also feed `exclude_pattern` and the `max_count` gate, normalization is **not** purely additive: a quote-obfuscated call can now be caught by an exclusion or a `max_count: 0` gate that the raw text alone would have missed — and, conversely, an unedited `exclude_pattern` may now exclude a call it previously let through. Cross-repo suites that hand-encoded quote tolerance in their patterns should re-baseline.
980
999
 
1000
+ **Long commands.** A Bash command is searched in full: the first 2,000 characters, then the rest in windows of at most 2,000 characters that start and end on line boundaries. So a command that follows a long heredoc in the same Bash call still counts. Other tools match only on the first 2,000 characters of their JSON parameters, so a long Write or Edit body is not read as a command. This is not purely additive either: an `exclude_pattern` or a `max_count: 0` gate can now catch a call late in a long script that it did not see before, so suites should re-baseline. A match that crosses a window boundary is not guaranteed, and `^` and `$` can also match at a window edge.
1001
+
981
1002
  **Codex limitation.** Codex agents map `Read`, `Grep`, and `Glob` tools to `shell` commands (they execute via bash), so `tool_name: "Read"` on Codex returns no matches. Use `tool_name: "Bash"` or `tool_name: null` (any tool) for Codex-compatible checks. This criterion works correctly on Claude Code agents, which emit separate `Read`/`Grep`/`Glob` telemetry.
982
1003
 
983
1004
  ### `cli_called`
@@ -1721,7 +1742,7 @@ The simulator runs as a tools-disabled Claude Code agent on its own resolved `Ap
1721
1742
  **Semantics:**
1722
1743
 
1723
1744
  - 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.
1745
+ - `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
1746
  - The `reference` solution, if present, is hidden from the simulator (same security posture as for the coding agent).
1726
1747
  - 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
1748
 
@@ -27,7 +27,7 @@ working directory — both required for an unattended eval.
27
27
  pip install 'coder-eval[antigravity]'
28
28
  ```
29
29
 
30
- This pulls in `google-antigravity` (pinned to `0.1.8`), whose wheel bundles the
30
+ This pulls in `google-antigravity` (pinned to `0.1.18`), whose wheel bundles the
31
31
  platform `localharness` binary. As with the other agents the SDK is imported lazily
32
32
  — a base install without the extra still runs end-to-end; Antigravity tasks fail at
33
33
  dispatch with a clear hint to install the extra.
@@ -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).