coder-eval 0.12.0__tar.gz → 0.12.1__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 (764) hide show
  1. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/harness-candidates.md +87 -0
  2. coder_eval-0.12.1/.github/scripts/harbor_e2e.py +163 -0
  3. coder_eval-0.12.1/.github/workflows/harbor-e2e.yml +91 -0
  4. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/pr-checks.yml +15 -8
  5. {coder_eval-0.12.0 → coder_eval-0.12.1}/CHANGELOG.md +131 -0
  6. {coder_eval-0.12.0 → coder_eval-0.12.1}/CLAUDE.md +8 -5
  7. {coder_eval-0.12.0 → coder_eval-0.12.1}/PKG-INFO +4 -1
  8. {coder_eval-0.12.0 → coder_eval-0.12.1}/action.yml +1 -1
  9. {coder_eval-0.12.0 → coder_eval-0.12.1}/docker/Dockerfile +13 -9
  10. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/TASK_DEFINITION_GUIDE.md +39 -1
  11. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/USER_GUIDE.md +45 -8
  12. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/HARNESS_PARITY.md +67 -0
  13. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/page.tsx +44 -8
  14. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  15. {coder_eval-0.12.0 → coder_eval-0.12.1}/pyproject.toml +23 -1
  16. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/__init__.py +1 -1
  17. coder_eval-0.12.1/src/coder_eval/agents/_timing.py +42 -0
  18. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/antigravity_agent.py +85 -5
  19. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/claude_code_agent.py +8 -3
  20. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/codex_agent.py +232 -27
  21. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/opencode_agent.py +51 -2
  22. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/pi_agent.py +27 -1
  23. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/analysis.py +16 -8
  24. coder_eval-0.12.1/src/coder_eval/argv_match.py +267 -0
  25. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/__init__.py +5 -0
  26. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/evaluate_command.py +140 -40
  27. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/execute_command.py +25 -0
  28. coder_eval-0.12.1/src/coder_eval/cli/export_command.py +126 -0
  29. coder_eval-0.12.1/src/coder_eval/cli/harbor_command.py +65 -0
  30. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/run_command.py +134 -17
  31. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/run_task_internal_command.py +123 -1
  32. coder_eval-0.12.1/src/coder_eval/criteria/cli_called.py +218 -0
  33. coder_eval-0.12.1/src/coder_eval/harbor/__init__.py +22 -0
  34. coder_eval-0.12.1/src/coder_eval/harbor/agent.py +160 -0
  35. coder_eval-0.12.1/src/coder_eval/harbor/agent_paths.py +29 -0
  36. coder_eval-0.12.1/src/coder_eval/harbor/atif_emit.py +422 -0
  37. coder_eval-0.12.1/src/coder_eval/harbor/atif_hydrate.py +180 -0
  38. coder_eval-0.12.1/src/coder_eval/harbor/atif_models.py +290 -0
  39. coder_eval-0.12.1/src/coder_eval/harbor/experiment_packager.py +211 -0
  40. coder_eval-0.12.1/src/coder_eval/harbor/packager.py +701 -0
  41. coder_eval-0.12.1/src/coder_eval/harbor/portability.py +149 -0
  42. coder_eval-0.12.1/src/coder_eval/harbor/reward.py +102 -0
  43. coder_eval-0.12.1/src/coder_eval/invocation_log.py +306 -0
  44. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/isolation/docker_runner.py +177 -14
  45. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/__init__.py +17 -1
  46. coder_eval-0.12.1/src/coder_eval/models/cli_match.py +392 -0
  47. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/container_paths.py +23 -0
  48. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/criteria.py +50 -172
  49. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/sandbox.py +181 -6
  50. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/tasks.py +0 -8
  51. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/telemetry.py +13 -2
  52. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/batch.py +14 -0
  53. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/config.py +18 -0
  54. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/evaluation.py +2 -2
  55. coder_eval-0.12.1/src/coder_eval/orchestration/regrade.py +1213 -0
  56. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestrator.py +41 -12
  57. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/path_utils.py +16 -0
  58. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/sandbox.py +60 -15
  59. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/README.md +5 -3
  60. coder_eval-0.12.1/tasks/record_cli_responses.yaml +206 -0
  61. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/__init__.py +2 -1
  62. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/_scrub.py +64 -0
  63. coder_eval-0.12.1/tests/_fixtures/golden_streams/antigravity_fixtures.py +279 -0
  64. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/codex_fixtures.py +50 -12
  65. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +52 -0
  66. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +83 -0
  67. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +92 -0
  68. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +72 -0
  69. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +106 -0
  70. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +1 -1
  71. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +1 -1
  72. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +12 -3
  73. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +2 -2
  74. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +1 -1
  75. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +7 -7
  76. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -1
  77. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +57 -0
  78. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +106 -0
  79. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +47 -0
  80. coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +155 -0
  81. coder_eval-0.12.1/tests/_fixtures/golden_streams/opencode_fixtures.py +227 -0
  82. coder_eval-0.12.1/tests/_fixtures/golden_streams/pi_fixtures.py +207 -0
  83. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +6 -0
  84. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +25 -0
  85. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/instruction.md +9 -0
  86. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/task.toml +73 -0
  87. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +1 -0
  88. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +28 -0
  89. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +17 -0
  90. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +2 -0
  91. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +1 -0
  92. coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/task.yaml +33 -0
  93. coder_eval-0.12.1/tests/_fixtures/timing_union_cases.json +100 -0
  94. coder_eval-0.12.1/tests/fixtures/atif/known_good_trajectory.json +125 -0
  95. coder_eval-0.12.1/tests/harbor_e2e/fixtures/docker_baseline.yaml +35 -0
  96. coder_eval-0.12.1/tests/harbor_e2e/fixtures/llm_judge.yaml +44 -0
  97. coder_eval-0.12.1/tests/harbor_e2e/fixtures/template_sources.yaml +38 -0
  98. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/doc_env_parity.py +23 -0
  99. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/doc_schema_parity.py +16 -3
  100. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +10 -3
  101. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce053_run_record_filename_literal.py +30 -4
  102. coder_eval-0.12.1/tests/lint/rules/ce056_no_container_env_literal.py +83 -0
  103. coder_eval-0.12.1/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +82 -0
  104. coder_eval-0.12.1/tests/lint/rules/ce058_no_timing_literal.py +204 -0
  105. coder_eval-0.12.1/tests/lint/rules/ce059_generation_window_is_two_reads.py +79 -0
  106. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_cli_imports_in_core.py +7 -2
  107. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/runner.py +8 -0
  108. coder_eval-0.12.1/tests/test_agent_golden_master.py +364 -0
  109. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_telemetry.py +8 -1
  110. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_telemetry_advanced.py +3 -1
  111. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_antigravity_agent.py +436 -99
  112. coder_eval-0.12.1/tests/test_atif_emit.py +365 -0
  113. coder_eval-0.12.1/tests/test_atif_hydrate.py +138 -0
  114. coder_eval-0.12.1/tests/test_atif_models.py +181 -0
  115. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_called_criterion.py +235 -41
  116. coder_eval-0.12.1/tests/test_cli_match_parity.py +121 -0
  117. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_codex_agent.py +344 -3
  118. coder_eval-0.12.1/tests/test_codex_agent_unit.py +280 -0
  119. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_command_statistics.py +37 -0
  120. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_custom_lint.py +334 -1
  121. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_detached_grading_boundaries.py +137 -6
  122. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_detached_grading_guards.py +117 -0
  123. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_runner_mounts.py +37 -0
  124. coder_eval-0.12.1/tests/test_evaluate_format_harbor.py +126 -0
  125. coder_eval-0.12.1/tests/test_execute_format_harbor.py +87 -0
  126. coder_eval-0.12.1/tests/test_harbor_agent.py +171 -0
  127. coder_eval-0.12.1/tests/test_harbor_experiment_packager.py +308 -0
  128. coder_eval-0.12.1/tests/test_harbor_export_golden.py +80 -0
  129. coder_eval-0.12.1/tests/test_harbor_packager.py +659 -0
  130. coder_eval-0.12.1/tests/test_harbor_portability.py +135 -0
  131. coder_eval-0.12.1/tests/test_harbor_reward.py +123 -0
  132. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_models.py +56 -0
  133. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_opencode_agent.py +174 -125
  134. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_orchestrator.py +73 -0
  135. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pi_agent.py +111 -119
  136. coder_eval-0.12.1/tests/test_regrade.py +1274 -0
  137. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox.py +56 -1
  138. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_adopt.py +22 -0
  139. coder_eval-0.12.1/tests/test_sandbox_record_cli.py +1182 -0
  140. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_templates.py +11 -6
  141. coder_eval-0.12.1/tests/test_sandbox_venv_live.py +110 -0
  142. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_simulation_integration.py +73 -0
  143. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_tags.py +186 -1
  144. coder_eval-0.12.1/tests/test_timing_union_parity.py +55 -0
  145. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_token_usage.py +12 -0
  146. {coder_eval-0.12.0 → coder_eval-0.12.1}/uv.lock +261 -8
  147. coder_eval-0.12.0/src/coder_eval/criteria/cli_called.py +0 -312
  148. coder_eval-0.12.0/src/coder_eval/invocation_log.py +0 -151
  149. coder_eval-0.12.0/src/coder_eval/orchestration/regrade.py +0 -601
  150. coder_eval-0.12.0/tests/test_agent_golden_master.py +0 -98
  151. coder_eval-0.12.0/tests/test_codex_agent_unit.py +0 -131
  152. coder_eval-0.12.0/tests/test_regrade.py +0 -323
  153. coder_eval-0.12.0/tests/test_sandbox_record_cli.py +0 -506
  154. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review-full.md +0 -0
  155. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  156. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review.md +0 -0
  157. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-create-plan.md +0 -0
  158. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-implement-plan.md +0 -0
  159. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/commands/coder-eval-review.md +0 -0
  160. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/shared/axes.md +0 -0
  161. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/shared/multi-model-review.md +0 -0
  162. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/shared/review-rubric.md +0 -0
  163. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/shared/run-layout.md +0 -0
  164. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/workflows/cr-axis.js +0 -0
  165. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude/workflows/cr-parent.js +0 -0
  166. {coder_eval-0.12.0 → coder_eval-0.12.1}/.claude-plugin/marketplace.json +0 -0
  167. {coder_eval-0.12.0 → coder_eval-0.12.1}/.env.example +0 -0
  168. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/CODEOWNERS +0 -0
  169. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  170. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  171. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  172. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/actionlint.yaml +0 -0
  173. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/code_review.md +0 -0
  174. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/dependabot.yml +0 -0
  175. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/pages-stub/index.html +0 -0
  176. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/scripts/release_notes.py +0 -0
  177. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/claude-pr-review.yml +0 -0
  178. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/codeql.yml +0 -0
  179. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/conventional-commits.yml +0 -0
  180. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/docker-publish.yml +0 -0
  181. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/docs.yml +0 -0
  182. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/publish-testpypi.yml +0 -0
  183. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/release.yml +0 -0
  184. {coder_eval-0.12.0 → coder_eval-0.12.1}/.github/workflows/verify-published-action.yml +0 -0
  185. {coder_eval-0.12.0 → coder_eval-0.12.1}/.gitignore +0 -0
  186. {coder_eval-0.12.0 → coder_eval-0.12.1}/.pre-commit-config.yaml +0 -0
  187. {coder_eval-0.12.0 → coder_eval-0.12.1}/.python-version +0 -0
  188. {coder_eval-0.12.0 → coder_eval-0.12.1}/ADOPTERS.md +0 -0
  189. {coder_eval-0.12.0 → coder_eval-0.12.1}/CODE_OF_CONDUCT.md +0 -0
  190. {coder_eval-0.12.0 → coder_eval-0.12.1}/CONTRIBUTING.md +0 -0
  191. {coder_eval-0.12.0 → coder_eval-0.12.1}/LICENSE +0 -0
  192. {coder_eval-0.12.0 → coder_eval-0.12.1}/Makefile +0 -0
  193. {coder_eval-0.12.0 → coder_eval-0.12.1}/NOTICE +0 -0
  194. {coder_eval-0.12.0 → coder_eval-0.12.1}/README.md +0 -0
  195. {coder_eval-0.12.0 → coder_eval-0.12.1}/SECURITY.md +0 -0
  196. {coder_eval-0.12.0 → coder_eval-0.12.1}/comparison.md +0 -0
  197. {coder_eval-0.12.0 → coder_eval-0.12.1}/docker/Dockerfile.runtime +0 -0
  198. {coder_eval-0.12.0 → coder_eval-0.12.1}/docker/coder_eval_entrypoint.sh +0 -0
  199. {coder_eval-0.12.0 → coder_eval-0.12.1}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  200. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/AB_EXPERIMENTS.md +0 -0
  201. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/CI_GATE.md +0 -0
  202. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/DATASETS.md +0 -0
  203. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/DIALOG_MODE.md +0 -0
  204. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/DOCKER_ISOLATION.md +0 -0
  205. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/EXTENDING.md +0 -0
  206. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/PLUGIN.md +0 -0
  207. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/REPORT_SCHEMA.md +0 -0
  208. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/ANTIGRAVITY.md +0 -0
  209. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/CLAUDE_CODE.md +0 -0
  210. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/CODEX.md +0 -0
  211. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/OPENCODE.md +0 -0
  212. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/agents/PI.md +0 -0
  213. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/assets/hero.gif +0 -0
  214. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/comparison.md +0 -0
  215. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/index.md +0 -0
  216. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/llms.txt +0 -0
  217. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/01-first-evaluation.md +0 -0
  218. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/02-ci-pipeline.md +0 -0
  219. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/03-evalboard-local.md +0 -0
  220. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/04-writing-a-task.md +0 -0
  221. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/05-comparing-models.md +0 -0
  222. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/06-use-docker-isolation.md +0 -0
  223. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  224. {coder_eval-0.12.0 → coder_eval-0.12.1}/docs/tutorials/README.md +0 -0
  225. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/.gitignore +0 -0
  226. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/README.md +0 -0
  227. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  228. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  229. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  230. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  231. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/col-help.tsx +0 -0
  232. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  233. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/harness-badge.tsx +0 -0
  234. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/harness-selector.tsx +0 -0
  235. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/scroll-table.tsx +0 -0
  236. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/search-box.tsx +0 -0
  237. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/skeleton.tsx +0 -0
  238. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/unit-toggle.tsx +0 -0
  239. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_components/version-list.tsx +0 -0
  240. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  241. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_lib/source-param.ts +0 -0
  242. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  243. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  244. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  245. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/daily-chart.tsx +0 -0
  246. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  247. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/harness-legend.tsx +0 -0
  248. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/harness-series.ts +0 -0
  249. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/tag-rail.tsx +0 -0
  250. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  251. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  252. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/_overview/window-summary.tsx +0 -0
  253. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/api/download/route.ts +0 -0
  254. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/api/file/route.ts +0 -0
  255. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  256. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/api/refresh/route.ts +0 -0
  257. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/error.tsx +0 -0
  258. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/globals.css +0 -0
  259. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/icon.png +0 -0
  260. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/layout.tsx +0 -0
  261. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/loading.tsx +0 -0
  262. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  263. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/path-to-ga/page.tsx +0 -0
  264. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  265. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/scribe/page.tsx +0 -0
  266. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/scribe/run-table.tsx +0 -0
  267. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  268. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/trends/actions.ts +0 -0
  269. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/trends/page.tsx +0 -0
  270. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/trends/trends-view.tsx +0 -0
  271. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  272. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/watchlist/page.tsx +0 -0
  273. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  274. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/next-env.d.ts +0 -0
  275. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/next.config.mjs +0 -0
  276. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/package.json +0 -0
  277. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/pnpm-lock.yaml +0 -0
  278. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/postcss.config.mjs +0 -0
  279. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/public/harness/antigravity.png +0 -0
  280. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/public/harness/claude-code.png +0 -0
  281. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/public/harness/codex.png +0 -0
  282. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/public/harness/pi.png +0 -0
  283. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/public/uipath.png +0 -0
  284. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/tailwind.config.ts +0 -0
  285. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/tsconfig.json +0 -0
  286. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/vitest.config.ts +0 -0
  287. {coder_eval-0.12.0 → coder_eval-0.12.1}/evalboard/vitest.setup.ts +0 -0
  288. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/default.yaml +0 -0
  289. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/early-stop-ab.yaml +0 -0
  290. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/model-comparison.yaml +0 -0
  291. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/permissions-smoke.yaml +0 -0
  292. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/plugin-comparison.yaml +0 -0
  293. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/prompt-mutations-example.yaml +0 -0
  294. {coder_eval-0.12.0 → coder_eval-0.12.1}/experiments/smoke_variants.yaml +0 -0
  295. {coder_eval-0.12.0 → coder_eval-0.12.1}/litellm/README.md +0 -0
  296. {coder_eval-0.12.0 → coder_eval-0.12.1}/litellm/cost_logger.py +0 -0
  297. {coder_eval-0.12.0 → coder_eval-0.12.1}/litellm/litellm-config.yaml +0 -0
  298. {coder_eval-0.12.0 → coder_eval-0.12.1}/litellm/start-litellm.sh +0 -0
  299. {coder_eval-0.12.0 → coder_eval-0.12.1}/mkdocs.yml +0 -0
  300. {coder_eval-0.12.0 → coder_eval-0.12.1}/osv-scanner.toml +0 -0
  301. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/README.md +0 -0
  302. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/cli-setup.md +0 -0
  303. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/criteria.md +0 -0
  304. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/repo-layout.md +0 -0
  305. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/run-layout.md +0 -0
  306. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/task-rubric.md +0 -0
  307. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  308. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  309. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  310. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  311. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  312. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  313. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  314. {coder_eval-0.12.0 → coder_eval-0.12.1}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  315. {coder_eval-0.12.0 → coder_eval-0.12.1}/scripts/check_commit_msg.sh +0 -0
  316. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/.gitattributes +0 -0
  317. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agent.py +0 -0
  318. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/__init__.py +0 -0
  319. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/_logging.py +0 -0
  320. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/_skills.py +0 -0
  321. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/noop_agent.py +0 -0
  322. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/registry.py +0 -0
  323. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/agents/watchdog.py +0 -0
  324. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/aggregate_command.py +0 -0
  325. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/console.py +0 -0
  326. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/evaluate_target.py +0 -0
  327. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/plan_command.py +0 -0
  328. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/report_command.py +0 -0
  329. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/run_helpers.py +0 -0
  330. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/cli/utils.py +0 -0
  331. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/config.py +0 -0
  332. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/__init__.py +0 -0
  333. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  334. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/agent_judge.py +0 -0
  335. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/base.py +0 -0
  336. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/classification_match.py +0 -0
  337. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/command_executed.py +0 -0
  338. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  339. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/file_check.py +0 -0
  340. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/file_contains.py +0 -0
  341. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/file_exists.py +0 -0
  342. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  343. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/json_check.py +0 -0
  344. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/llm_judge.py +0 -0
  345. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/reference_comparison.py +0 -0
  346. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/run_command.py +0 -0
  347. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/skill_triggered.py +0 -0
  348. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/criteria/uipath_eval.py +0 -0
  349. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/__init__.py +0 -0
  350. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/agent.py +0 -0
  351. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/budget.py +0 -0
  352. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/categories.py +0 -0
  353. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/categorization.py +0 -0
  354. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/checker_misuse.py +0 -0
  355. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/executor.py +0 -0
  356. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/judge.py +0 -0
  357. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/reference.py +0 -0
  358. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/retry.py +0 -0
  359. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/errors/timeout.py +0 -0
  360. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/__init__.py +0 -0
  361. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/checker.py +0 -0
  362. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  363. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  364. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_context.py +0 -0
  365. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  366. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_models.py +0 -0
  367. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  368. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_usage.py +0 -0
  369. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/sub_agent.py +0 -0
  370. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/summaries.py +0 -0
  371. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  372. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/formatting.py +0 -0
  373. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/fs_permissions.py +0 -0
  374. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/isolation/__init__.py +0 -0
  375. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/litellm_cost.py +0 -0
  376. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/logging_config.py +0 -0
  377. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/agent_config.py +0 -0
  378. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/enums.py +0 -0
  379. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/experiment.py +0 -0
  380. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/judge.py +0 -0
  381. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/judge_defaults.py +0 -0
  382. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/limits.py +0 -0
  383. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/merge_strategy.py +0 -0
  384. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/mutations.py +0 -0
  385. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/results.py +0 -0
  386. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/routing.py +0 -0
  387. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/models/templates.py +0 -0
  388. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/__init__.py +0 -0
  389. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/config_merge.py +0 -0
  390. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/early_stop.py +0 -0
  391. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/experiment.py +0 -0
  392. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/overrides.py +0 -0
  393. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/run_limits.py +0 -0
  394. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/orchestration/task_loader.py +0 -0
  395. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/plugins.py +0 -0
  396. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/pricing.py +0 -0
  397. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/py.typed +0 -0
  398. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/reports.py +0 -0
  399. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/reports_experiment.py +0 -0
  400. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/reports_html.py +0 -0
  401. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/reports_junit.py +0 -0
  402. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/reports_stats.py +0 -0
  403. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/resources/__init__.py +0 -0
  404. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  405. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/resources/tags.yaml +0 -0
  406. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/__init__.py +0 -0
  407. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/ast_similarity.py +0 -0
  408. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/complexity.py +0 -0
  409. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/quality.py +0 -0
  410. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/signature_similarity.py +0 -0
  411. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/similarity.py +0 -0
  412. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/scoring/token_similarity.py +0 -0
  413. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/simulation/__init__.py +0 -0
  414. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/simulation/termination.py +0 -0
  415. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/simulation/user_simulator.py +0 -0
  416. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/__init__.py +0 -0
  417. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/callbacks.py +0 -0
  418. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/collector.py +0 -0
  419. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/events.py +0 -0
  420. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/renderers.py +0 -0
  421. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/streaming/wire.py +0 -0
  422. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/telemetry.py +0 -0
  423. {coder_eval-0.12.0 → coder_eval-0.12.1}/src/coder_eval/utils.py +0 -0
  424. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agentless_smoke_test.yaml +0 -0
  425. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/antigravity_hello_world.yaml +0 -0
  426. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  427. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/claude_hello_world.yaml +0 -0
  428. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  429. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  430. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/claude_subagent_test.yaml +0 -0
  431. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  432. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_hello_world.yaml +0 -0
  433. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_parallel_commands.yaml +0 -0
  434. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  435. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_skills_test.yaml +0 -0
  436. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_string_utils.yaml +0 -0
  437. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/codex_subagent_test.yaml +0 -0
  438. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  439. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/agents/subagent_merge_sort.yaml +0 -0
  440. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  441. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  442. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/byod_smoke_test.yaml +0 -0
  443. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dataset_example.yaml +0 -0
  444. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/datasets/sentiment.jsonl +0 -0
  445. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  446. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  447. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  448. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  449. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  450. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  451. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  452. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  453. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  454. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/fibonacci_with_template.yaml +0 -0
  455. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/hello_date.yaml +0 -0
  456. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/inline_starter_example.yaml +0 -0
  457. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/internal/session_resumption.yaml +0 -0
  458. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_smoke.yaml +0 -0
  459. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  460. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  461. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  462. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  463. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  464. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/opencode_smoke_test.yaml +0 -0
  465. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/pi_smoke_test.yaml +0 -0
  466. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  467. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/run_limits/max_turns_cap.yaml +0 -0
  468. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/run_limits/turn_timeout.yaml +0 -0
  469. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  470. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  471. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  472. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  473. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  474. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  475. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/README.md +0 -0
  476. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  477. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  478. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  479. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  480. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  481. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  482. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  483. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  484. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  485. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  486. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/sentiment_classification.yaml +0 -0
  487. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_agent_judge.yaml +0 -0
  488. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_budget_exceeded.yaml +0 -0
  489. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  490. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_llm_judge.yaml +0 -0
  491. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_negative_path.yaml +0 -0
  492. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_task_timeout.yaml +0 -0
  493. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/smoke_variants.yaml +0 -0
  494. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/test_sandbox.yaml +0 -0
  495. {coder_eval-0.12.0 → coder_eval-0.12.1}/tasks/token_check.yaml +0 -0
  496. {coder_eval-0.12.0 → coder_eval-0.12.1}/templates/byod_smoke_test/Dockerfile +0 -0
  497. {coder_eval-0.12.0 → coder_eval-0.12.1}/templates/fibonacci-starter/README.md +0 -0
  498. {coder_eval-0.12.0 → coder_eval-0.12.1}/templates/fibonacci-starter/src/main.py +0 -0
  499. {coder_eval-0.12.0 → coder_eval-0.12.1}/templates/fibonacci-starter/tests/test_main.py +0 -0
  500. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/__init__.py +0 -0
  501. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/__init__.py +0 -0
  502. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  503. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  504. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  505. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  506. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  507. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  508. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  509. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  510. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  511. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  512. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  513. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  514. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/live_criteria.py +0 -0
  515. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  516. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  517. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  518. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  519. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  520. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  521. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  522. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/_path_helpers.py +0 -0
  523. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/conftest.py +0 -0
  524. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/__init__.py +0 -0
  525. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  526. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  527. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/mock_agent.py +0 -0
  528. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  529. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  530. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  531. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  532. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/fixtures/text_stub_agent.py +0 -0
  533. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/__init__.py +0 -0
  534. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/action_docs.py +0 -0
  535. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/agent_roster_parity.py +0 -0
  536. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/dead_config_fields.py +0 -0
  537. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/doc_examples.py +0 -0
  538. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/doc_indexes.py +0 -0
  539. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/generated.py +0 -0
  540. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/live_verdict_contract.py +0 -0
  541. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/plugin_manifest_parity.py +0 -0
  542. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/plugin_reference.py +0 -0
  543. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/pyright_config.py +0 -0
  544. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/__init__.py +0 -0
  545. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/base.py +0 -0
  546. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  547. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  548. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  549. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  550. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  551. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  552. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  553. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  554. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  555. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  556. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  557. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  558. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  559. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  560. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  561. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  562. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  563. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  564. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  565. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  566. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  567. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  568. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_agent_timing_access.py +0 -0
  569. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  570. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_silent_except.py +0 -0
  571. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  572. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  573. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  574. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  575. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/open_explicit_encoding.py +0 -0
  576. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  577. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/register_criterion_required.py +0 -0
  578. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  579. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  580. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/violation.py +0 -0
  581. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/lint/workflow_outputs.py +0 -0
  582. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_action_inputs.py +0 -0
  583. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_action_version_pin.py +0 -0
  584. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent.py +0 -0
  585. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_config_no_timing_fields.py +0 -0
  586. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_config_optional_type.py +0 -0
  587. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_config_registry_dispatch.py +0 -0
  588. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_config_sdk_decoupling.py +0 -0
  589. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_judge_criterion.py +0 -0
  590. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agent_timeout.py +0 -0
  591. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_agentless.py +0 -0
  592. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_aggregate.py +0 -0
  593. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_byoa_plugin.py +0 -0
  594. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_byoa_plugin_live.py +0 -0
  595. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_byod_feature.py +0 -0
  596. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_check_all_async.py +0 -0
  597. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_checker_logging.py +0 -0
  598. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_classification_match.py +0 -0
  599. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_claude_settings_enforcement_live.py +0 -0
  600. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cleanup_preservation_guard.py +0 -0
  601. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_backend_flag.py +0 -0
  602. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_empty_glob.py +0 -0
  603. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_sdk_options.py +0 -0
  604. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_set_overrides.py +0 -0
  605. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_telemetry.py +0 -0
  606. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cli_type_flag.py +0 -0
  607. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_code_review_bugs.py +0 -0
  608. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_codex_agent_live.py +0 -0
  609. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_codex_token_mapping.py +0 -0
  610. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_command_executed.py +0 -0
  611. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_command_telemetry_result_data.py +0 -0
  612. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_commands_efficiency.py +0 -0
  613. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_config_lineage.py +0 -0
  614. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_config_merge_engine.py +0 -0
  615. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_config_precedence.py +0 -0
  616. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_continuous_scoring.py +0 -0
  617. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_cost_accounting_paths.py +0 -0
  618. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_criterion_result_round_trip.py +0 -0
  619. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_dataset_expansion.py +0 -0
  620. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_debug_logging.py +0 -0
  621. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_build_failure.py +0 -0
  622. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_litellm_env.py +0 -0
  623. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_runner_container_death.py +0 -0
  624. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_runner_stream_limit.py +0 -0
  625. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_wildcard_env.py +0 -0
  626. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_docker_workdir_live.py +0 -0
  627. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_driver_resolver.py +0 -0
  628. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_early_stop.py +0 -0
  629. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_error_handling.py +0 -0
  630. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_evaluate_command.py +0 -0
  631. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_evaluate_target.py +0 -0
  632. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_evaluator.py +0 -0
  633. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_event_collector.py +0 -0
  634. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_execute_command.py +0 -0
  635. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_execute_evaluate_loop.py +0 -0
  636. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_cli.py +0 -0
  637. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_loader.py +0 -0
  638. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_models.py +0 -0
  639. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_reports.py +0 -0
  640. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_resolver.py +0 -0
  641. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_experiment_runner.py +0 -0
  642. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_file_check.py +0 -0
  643. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_file_contains_scoring.py +0 -0
  644. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_formatting.py +0 -0
  645. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_git_clone_failure.py +0 -0
  646. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_glob_paths_in_file_criteria.py +0 -0
  647. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_heartbeat_watchdog.py +0 -0
  648. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_ignore_patterns_negation.py +0 -0
  649. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_image_from_dockerfiles.py +0 -0
  650. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_integration.py +0 -0
  651. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_json_check.py +0 -0
  652. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_anthropic.py +0 -0
  653. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_bedrock.py +0 -0
  654. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_burn_in_live.py +0 -0
  655. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_context_builder.py +0 -0
  656. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_litellm.py +0 -0
  657. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_models.py +0 -0
  658. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_judge_persistence.py +0 -0
  659. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_lint_no_top_level_run_limits.py +0 -0
  660. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_lint_runner.py +0 -0
  661. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_litellm_config.py +0 -0
  662. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_litellm_cost.py +0 -0
  663. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_litellm_cost_logger.py +0 -0
  664. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_litellm_judge_live.py +0 -0
  665. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_litellm_route.py +0 -0
  666. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_llm_judge_criterion.py +0 -0
  667. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_log_tail_buffer.py +0 -0
  668. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_logging.py +0 -0
  669. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_logging_isolation.py +0 -0
  670. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_merge_characterization.py +0 -0
  671. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_merge_strategy_annotations.py +0 -0
  672. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_merge_unification.py +0 -0
  673. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_mutations.py +0 -0
  674. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_new_criteria.py +0 -0
  675. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_node_env_config.py +0 -0
  676. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_optional_dependencies.py +0 -0
  677. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_orchestrator_error_log_tail.py +0 -0
  678. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_orchestrator_telemetry.py +0 -0
  679. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_overrides_engine.py +0 -0
  680. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_parallel.py +0 -0
  681. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_path_utils.py +0 -0
  682. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pi_agent_config.py +0 -0
  683. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pi_smoke_task.py +0 -0
  684. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_plan_command.py +0 -0
  685. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_plugin_processing.py +0 -0
  686. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_plugins.py +0 -0
  687. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_post_run.py +0 -0
  688. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pr_review_workflow.py +0 -0
  689. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pre_run.py +0 -0
  690. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_preservation_mode.py +0 -0
  691. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_pricing_registry.py +0 -0
  692. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reference_comparison_scoring.py +0 -0
  693. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reference_evaluator.py +0 -0
  694. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reference_missing_file.py +0 -0
  695. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reference_models.py +0 -0
  696. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reference_permissions.py +0 -0
  697. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_registry.py +0 -0
  698. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_release_notes.py +0 -0
  699. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_replicate_stats.py +0 -0
  700. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_report_command.py +0 -0
  701. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports.py +0 -0
  702. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports_experiment.py +0 -0
  703. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports_html.py +0 -0
  704. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports_junit.py +0 -0
  705. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports_stats.py +0 -0
  706. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_reports_stats_nonfinite.py +0 -0
  707. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_resolve_task_files.py +0 -0
  708. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_resume.py +0 -0
  709. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_retry_logic_comprehensive.py +0 -0
  710. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_route_seam_exhaustiveness.py +0 -0
  711. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_routing.py +0 -0
  712. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_command_junit.py +0 -0
  713. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_command_stdout.py +0 -0
  714. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_helpers.py +0 -0
  715. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_limits_models.py +0 -0
  716. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_limits_orchestrator.py +0 -0
  717. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_limits_resolver.py +0 -0
  718. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_run_metrics.py +0 -0
  719. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_runtime_tool_versions.py +0 -0
  720. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_layer_builder.py +0 -0
  721. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_optional.py +0 -0
  722. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_security.py +0 -0
  723. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sandbox_symlink_preservation.py +0 -0
  724. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_scorers.py +0 -0
  725. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_scoring_quality.py +0 -0
  726. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sdk_option_classification.py +0 -0
  727. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_seed_from_prior_result.py +0 -0
  728. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_simulation_config.py +0 -0
  729. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_simulation_termination.py +0 -0
  730. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_simulation_trials.py +0 -0
  731. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_skill_triggered.py +0 -0
  732. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_agent_integration.py +0 -0
  733. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_batch.py +0 -0
  734. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_callbacks.py +0 -0
  735. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_cli.py +0 -0
  736. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_events.py +0 -0
  737. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_orchestrator.py +0 -0
  738. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_renderers.py +0 -0
  739. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_streaming_wire.py +0 -0
  740. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_sub_agent_runner.py +0 -0
  741. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_success_criterion_union.py +0 -0
  742. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_suite_rollup.py +0 -0
  743. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_summaries.py +0 -0
  744. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_task_definition_unknown_fields.py +0 -0
  745. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_teardown_interrupt.py +0 -0
  746. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_telemetry.py +0 -0
  747. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_template_env_expansion.py +0 -0
  748. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_threshold_enforcement.py +0 -0
  749. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_timeout_batch.py +0 -0
  750. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_timeout_categorization.py +0 -0
  751. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_timeout_exceptions.py +0 -0
  752. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_timeout_models.py +0 -0
  753. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_timeout_orchestrator.py +0 -0
  754. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_uipath_eval.py +0 -0
  755. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_ungraded_reporting.py +0 -0
  756. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_user_simulator.py +0 -0
  757. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_utils.py +0 -0
  758. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_utterance_extraction.py +0 -0
  759. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_variant_prompt_file.py +0 -0
  760. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_verdict_tool.py +0 -0
  761. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_verify_published_workflow.py +0 -0
  762. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_visible_turn_cap.py +0 -0
  763. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_watchdog.py +0 -0
  764. {coder_eval-0.12.0 → coder_eval-0.12.1}/tests/test_yaml_migration.py +0 -0
@@ -455,6 +455,31 @@ with the two `action.yml` items above — one considered change to the action's
455
455
  `final_status`, which does not exist in `run.json` and would have made a new
456
456
  assertion dead on arrival. Guard: assert the key set that non-Python consumers
457
457
  depend on, mirroring how CE030 pins doc/schema parity.
458
+ - [ ] **A probe task's detector must not be satisfiable from the sandbox-readable task
459
+ YAML.** `docker_runner._stage_inputs` serialises the post-override `TaskDefinition` to
460
+ `/work/input/task.yaml` and mounts `tasks/` again at `/work/task_dir`, both agent-readable.
461
+ Two probes now depend on NOT being satisfiable from that text — `anti_cheat_reference` via a
462
+ regex that cannot match its own source, `record_cli_responses` via a log-derived detector —
463
+ and nothing enforces it. `record_cli_responses` originally shipped (in review) with
464
+ `file_contains` needles that were verbatim in its own YAML, which would have let a
465
+ transcribing agent pass while dispatch was dead. Guard: for every `smoke-pass` task, assert no
466
+ `file_contains` needle / `file_matches_regex` pattern on a must-match criterion appears in the
467
+ serialised task YAML. Deferred: needs per-criterion-type handling and a real false-positive
468
+ pass (paths and generic words will collide), so well over 30 min.
469
+ - [ ] **A new shim failure mode must still RECORD the invocation.** A generated shim that dies
470
+ before `record()` leaves a log byte-identical to "the agent never ran it", which passes a
471
+ `max_count: 0` guard. The sidecar import was exactly that, caught only in review. Guard:
472
+ render each shim shape, break each external dependency in turn, assert the log is non-empty.
473
+ Deferred: "each external dependency" has no enumeration today, so the rule needs a seam
474
+ (a declared list of what a shim depends on) before it can be mechanical rather than a
475
+ hand-maintained list that decays.
476
+ - [ ] **A generated-artifact invariant must be asserted against a real run of that artifact,
477
+ not against the config that produced it.** `TestRecordCliProbeIntegrity` first shipped
478
+ comparing the task YAML with itself and hardcoding `"rule": 0` — a spelling `json.dumps`'s
479
+ default separators own — so a separator change would have left it green while the blocking CI
480
+ probe failed. Now fixed for this case by running a real shim. Deferred as a general guard:
481
+ "derives its expectation from the thing it checks" is not mechanically detectable; it belongs
482
+ in the review rubric rather than a lint rule.
458
483
 
459
484
  - [ ] A `_*TurnState` (agent turn-state) attribute that is written but never read
460
485
  outside its own assignment — CE037-class dead accumulator. Surfaced during the
@@ -464,3 +489,65 @@ with the two `action.yml` items above — one considered change to the action's
464
489
  run. Guard would need cross-method dataflow over each `Agent`-subclass turn-state
465
490
  class (write sites vs read sites), which the AST-only CExxx runner can't express
466
491
  in ~30 min — deferred. Caught in: Pi harness Phase 2 quality review.
492
+
493
+ - [ ] A duration/count aggregate over run-task rows that fails to exclude
494
+ `mature_skipped`. Nothing guards it: the CExxx runner is Python-AST only and
495
+ this defect class lives in the evalboard's TypeScript. A codex nightly
496
+ rendered "1300 tasks · 15h 29m" for the 397 tasks that actually ran. Fixed
497
+ for the two whole-run sites by extracting `deriveRunDuration`; a general
498
+ guard needs a TS lint surface the harness does not have.
499
+ Caught in: timing-capture Phase 1 review.
500
+
501
+ - [ ] Subtracting a SUM of intervals from a wall span where the intervals can
502
+ overlap. Semantic, not syntactic — an AST rule cannot tell a sum of
503
+ durations from a union. Antigravity shipped it: four concurrent 400ms tool
504
+ calls inside a 1000ms window summed to 1600ms and clamped generation to the
505
+ 0.0 the change existed to remove. The real guard is the replay-based
506
+ `assert_timing_captured` golden sensor, which now exists; a static rule
507
+ would not have caught it. Caught in: timing-capture Phase 3 review.
508
+
509
+ - [ ] A test fixture whose field name does not exist on the type it models.
510
+ `parseMessages`'s `CommandEntry` keys on `tool_id`; a fixture using
511
+ `tool_use_id` never resolves, params fall back to `{}`, and every tool
512
+ weighs exactly 1 — which silently turned a "split by content size" test
513
+ into a 99%-thinking assertion that passed. TypeScript accepts it because
514
+ the fixtures are untyped object literals. Typing the fixture factories
515
+ against the real interfaces would guard the whole class; that is a
516
+ sweep across the evalboard test suite, not ~30 min.
517
+ Caught in: timing-capture Phase 5 review.
518
+
519
+ ### Deferred timing divergences (not guardrails — accounting gaps)
520
+
521
+ Recorded here as well as in `docs/agents/HARNESS_PARITY.md` § Known
522
+ divergences, so the deferred-work record is one place. Measurements in
523
+ `c/time-bugs-audit.md`.
524
+
525
+ - [ ] **Antigravity books orphan-poll waiting as agent duration** (audit P2-1).
526
+ A task can spend `0.8 × turn_timeout` waiting on a tool call that never
527
+ reaches DONE — 14 tasks, 9.6h of one 83h run. Only CLOSED tool intervals are
528
+ subtracted from a generation window, so that wait stays inside whichever
529
+ window contains it; the force-close records `execution_completed_at` while
530
+ leaving `duration_ms` as `None`. Deliberately out of scope of the timing
531
+ work: closing it means deciding whether a backgrounded tool's elapsed time
532
+ is model time (the model IS generating while it runs), which is a semantic
533
+ question, not a bug fix.
534
+
535
+ - [ ] **Delegate (`delegate-sdk`) records no execution bounds** (audit P3-1).
536
+ It reports `duration_ms` but neither `execution_started_at` nor
537
+ `execution_completed_at`, so its tool calls cannot be placed on a timeline.
538
+ Coverage is ~88%, so it is not urgent. The agent lives in the separate
539
+ `coder_eval_uipath` repo; mirror the Codex change there
540
+ (`_item_timing` + threading the SDK stamps through the telemetry builders).
541
+
542
+ - [ ] **Pre-existing, surfaced by this work's final review: `TokenUsage._adopt_legacy_input_tokens`
543
+ double-counts the cache buckets.** The validator copies a legacy record's
544
+ full-prompt `input_tokens` straight into `uncached_input_tokens`, and the
545
+ computed `input_tokens` then adds `cache_creation` + `cache_read` again. A
546
+ legacy record with `input_tokens=1000`, `cache_creation=200`, `cache_read=150`
547
+ reloads as 1350 prompt tokens and bills 1000 at the uncached rate instead of
548
+ 650. Affects every report, budget check and detached regrade over a
549
+ pre-split run that used prompt caching. NOT touched by the timing work
550
+ (token accounting was explicitly out of its scope) and not a guardrail
551
+ candidate — a real bug needing its own change, with a decision about
552
+ whether legacy records can be distinguished from current ones at all.
553
+ Caught in: timing-capture final review (gpt-5.6-sol).
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env python3
2
+ """Harbor end-to-end smoke test.
3
+
4
+ Exports a handful of coder-eval tasks to Harbor (`coder-eval export --format
5
+ harbor`), runs each with `hb run -a coder_eval.harbor.agent:CoderEvalAgent`
6
+ against real Docker, and asserts that:
7
+
8
+ - the verifier phase wrote `reward.json` with `reward == 1.0`
9
+ - the agent phase wrote a real ATIF `trajectory.json`
10
+ - both the agent and verifier phases left a `task.json` behind
11
+
12
+ Invoked by `.github/workflows/harbor-e2e.yml` -- deliberately NOT part of
13
+ `make test`: it shells out to a real `hb` CLI, real Docker builds, and (for
14
+ the llm_judge scenario) a real model call, none of which belong in the fast
15
+ unit-test suite.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import json
21
+ import shutil
22
+ import subprocess
23
+ import sys
24
+ from dataclasses import dataclass
25
+ from pathlib import Path
26
+
27
+
28
+ REPO_ROOT = Path(__file__).resolve().parents[2]
29
+ WORK_DIR = REPO_ROOT / "tmp" / "harbor_e2e"
30
+ AGENT_IMPORT_PATH = "coder_eval.harbor.agent:CoderEvalAgent"
31
+
32
+
33
+ @dataclass(frozen=True)
34
+ class Scenario:
35
+ """One (task.yaml, export flags) pair to round-trip through Harbor."""
36
+
37
+ name: str
38
+ task_file: Path
39
+ allow_credentials: bool = False
40
+
41
+
42
+ SCENARIOS: list[Scenario] = [
43
+ # "tmpdir" baseline: plain docker driver, default coder-eval-agent image,
44
+ # no dockerfile_path / template_sources / llm_judge -- exercises the bare
45
+ # export -> CoderEvalAgent -> --workspace-dir -> verifier round trip.
46
+ Scenario("baseline", REPO_ROOT / "tests/harbor_e2e/fixtures/docker_baseline.yaml"),
47
+ # llm_judge: real model call inside the VERIFIER phase, not just the agent.
48
+ Scenario("llm_judge", REPO_ROOT / "tests/harbor_e2e/fixtures/llm_judge.yaml", allow_credentials=True),
49
+ # Custom (BYOD) Docker image via dockerfile_path -- reuses the in-tree
50
+ # byod_smoke_test task/image rather than duplicating it.
51
+ Scenario("docker_custom_image", REPO_ROOT / "tasks/byod_smoke_test.yaml"),
52
+ # template_sources: TemplateDirSource copy-in + rewritten path, plus
53
+ # sandbox.python.env_packages surviving the agent-phase task.yaml merge.
54
+ Scenario("template_sources", REPO_ROOT / "tests/harbor_e2e/fixtures/template_sources.yaml"),
55
+ ]
56
+
57
+
58
+ def _run(cmd: list[str]) -> subprocess.CompletedProcess[str]:
59
+ print(f"+ {' '.join(cmd)}", flush=True)
60
+ return subprocess.run(cmd, check=False, text=True, capture_output=True)
61
+
62
+
63
+ def export_task(scenario: Scenario, out_dir: Path) -> None:
64
+ if out_dir.exists():
65
+ shutil.rmtree(out_dir)
66
+ cmd = ["coder-eval", "export", str(scenario.task_file), "-o", str(out_dir)]
67
+ if scenario.allow_credentials:
68
+ cmd.append("--allow-credentials")
69
+ result = _run(cmd)
70
+ print(result.stdout)
71
+ print(result.stderr, file=sys.stderr)
72
+ if result.returncode != 0:
73
+ raise RuntimeError(f"[{scenario.name}] `coder-eval export` failed (exit {result.returncode})")
74
+
75
+
76
+ def run_harbor(scenario: Scenario, export_dir: Path, jobs_dir: Path) -> Path:
77
+ if jobs_dir.exists():
78
+ shutil.rmtree(jobs_dir)
79
+ cmd = [
80
+ "hb",
81
+ "run",
82
+ "-p",
83
+ str(export_dir),
84
+ "-a",
85
+ AGENT_IMPORT_PATH,
86
+ "--jobs-dir",
87
+ str(jobs_dir),
88
+ "-n",
89
+ "1",
90
+ "-y",
91
+ ]
92
+ result = _run(cmd)
93
+ print(result.stdout)
94
+ print(result.stderr, file=sys.stderr)
95
+ if result.returncode != 0:
96
+ raise RuntimeError(f"[{scenario.name}] `hb run` failed (exit {result.returncode})")
97
+
98
+ # <jobs_dir>/<job_timestamp>/<trial_name>/{agent,verifier}/... -- glob for
99
+ # the one directory two levels down that actually holds a verifier/ output,
100
+ # rather than assuming a fixed trial-name shape Harbor doesn't guarantee.
101
+ trial_dirs = [d for d in jobs_dir.glob("*/*/") if (d / "verifier").is_dir()]
102
+ if len(trial_dirs) != 1:
103
+ raise RuntimeError(
104
+ f"[{scenario.name}] expected exactly one trial directory under {jobs_dir}, found {len(trial_dirs)}"
105
+ )
106
+ return trial_dirs[0]
107
+
108
+
109
+ def assert_scenario_artifacts(scenario: Scenario, trial_dir: Path) -> None:
110
+ reward_path = trial_dir / "verifier" / "reward.json"
111
+ if not reward_path.is_file():
112
+ raise RuntimeError(f"[{scenario.name}] missing {reward_path}")
113
+ reward = json.loads(reward_path.read_text(encoding="utf-8"))
114
+ if reward.get("reward") != 1.0:
115
+ raise RuntimeError(f"[{scenario.name}] expected reward 1.0, got {reward!r} ({reward_path})")
116
+
117
+ trajectory_path = trial_dir / "agent" / "trajectory.json"
118
+ if not trajectory_path.is_file():
119
+ raise RuntimeError(f"[{scenario.name}] missing {trajectory_path}")
120
+ trajectory = json.loads(trajectory_path.read_text(encoding="utf-8"))
121
+ if "schema_version" not in trajectory:
122
+ raise RuntimeError(f"[{scenario.name}] {trajectory_path} is missing 'schema_version'")
123
+
124
+ agent_task_jsons = list((trial_dir / "agent").glob("**/task.json"))
125
+ if not agent_task_jsons:
126
+ raise RuntimeError(f"[{scenario.name}] no task.json found under {trial_dir / 'agent'}")
127
+ verifier_task_json = trial_dir / "verifier" / "task.json"
128
+ if not verifier_task_json.is_file():
129
+ raise RuntimeError(f"[{scenario.name}] missing {verifier_task_json}")
130
+
131
+ print(
132
+ f"[{scenario.name}] OK: reward=1.0, trajectory.json present, "
133
+ + f"{len(agent_task_jsons)} agent task.json + verifier/task.json present"
134
+ )
135
+
136
+
137
+ def main() -> int:
138
+ WORK_DIR.mkdir(parents=True, exist_ok=True)
139
+ failures: list[str] = []
140
+ for scenario in SCENARIOS:
141
+ export_dir = WORK_DIR / scenario.name / "export"
142
+ jobs_dir = WORK_DIR / scenario.name / "jobs"
143
+ print(f"\n=== {scenario.name} ===", flush=True)
144
+ try:
145
+ export_task(scenario, export_dir)
146
+ trial_dir = run_harbor(scenario, export_dir, jobs_dir)
147
+ assert_scenario_artifacts(scenario, trial_dir)
148
+ except Exception as exc:
149
+ print(f"[{scenario.name}] FAILED: {exc}", file=sys.stderr)
150
+ failures.append(scenario.name)
151
+
152
+ print("\n=== Summary ===")
153
+ for scenario in SCENARIOS:
154
+ print(f" {scenario.name}: {'FAILED' if scenario.name in failures else 'OK'}")
155
+
156
+ if failures:
157
+ print(f"\n{len(failures)}/{len(SCENARIOS)} scenario(s) failed: {', '.join(failures)}", file=sys.stderr)
158
+ return 1
159
+ return 0
160
+
161
+
162
+ if __name__ == "__main__":
163
+ raise SystemExit(main())
@@ -0,0 +1,91 @@
1
+ name: Harbor E2E
2
+
3
+ # Deliberately NOT triggered on pull_request: this exercises real Docker
4
+ # builds, a real `harbor` install, and (for the llm_judge scenario) a real
5
+ # model call, so it is informational rather than a required PR check for now
6
+ # (see .github/scripts/harbor_e2e.py's module docstring). workflow_dispatch
7
+ # lets a maintainer run it on demand; the nightly schedule catches drift
8
+ # between coder-eval's own release and Harbor's own upstream releases without
9
+ # blocking anyone's PR.
10
+ on:
11
+ workflow_dispatch:
12
+ schedule:
13
+ - cron: "17 5 * * *" # nightly, off the hour to avoid GitHub's peak-load pile-up
14
+ push:
15
+ branches: [main]
16
+
17
+ concurrency:
18
+ group: ${{ github.workflow }}-${{ github.ref }}
19
+ cancel-in-progress: true
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ env:
25
+ TELEMETRY_ENABLED: "false"
26
+ # Route through Bedrock, mirroring pr-checks.yml's smoke-pass job -- keeps
27
+ # Anthropic-credit spend off this path; DirectRoute is exercised elsewhere.
28
+ API_BACKEND: "bedrock"
29
+ CLAUDE_CODE_USE_BEDROCK: "1"
30
+ AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
31
+ AWS_REGION: ${{ secrets.AWS_REGION }}
32
+ BEDROCK_MODEL: ${{ secrets.BEDROCK_MODEL }}
33
+
34
+ jobs:
35
+ harbor-e2e:
36
+ name: Harbor export + CoderEvalAgent round trip
37
+ runs-on: uipath-ubuntu-latest
38
+ timeout-minutes: 20
39
+
40
+ steps:
41
+ - name: Checkout code
42
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
43
+
44
+ - name: Set up Python 3.13
45
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
46
+ with:
47
+ python-version: "3.13"
48
+
49
+ - name: Set up Node.js 20
50
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
51
+ with:
52
+ node-version: "20"
53
+
54
+ - name: Install Claude CLI
55
+ run: npm install -g @anthropic-ai/claude-code
56
+
57
+ - name: Cache dependencies
58
+ uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
59
+ with:
60
+ path: |
61
+ ~/.cache/uv
62
+ ~/.cache/pip
63
+ key: ${{ runner.os }}-py3.13-harbor-e2e-${{ hashFiles('pyproject.toml', 'uv.lock') }}
64
+ restore-keys: |
65
+ ${{ runner.os }}-py3.13-harbor-e2e-
66
+
67
+ - name: Install uv
68
+ run: |
69
+ python -m pip install --upgrade "pip>=26.2"
70
+ pip install uv
71
+
72
+ - name: Install project dependencies (hash-verified from uv.lock)
73
+ # --extra harbor installs `harbor` into the SAME venv as coder-eval:
74
+ # CoderEvalAgent is resolved by `hb run -a
75
+ # coder_eval.harbor.agent:CoderEvalAgent` on the HOST process, so
76
+ # `harbor` and `coder_eval` must be importable from the same
77
+ # interpreter (see harbor/agent.py's module docstring). The version is
78
+ # pinned once, in pyproject.toml's `harbor` extra -- bump it there.
79
+ run: uv sync --frozen --extra dev --extra harbor
80
+
81
+ - name: Put the project venv on PATH
82
+ run: echo "${{ github.workspace }}/.venv/bin" >> "$GITHUB_PATH"
83
+
84
+ - name: Build coder-eval-agent base Docker image
85
+ run: make docker-image
86
+
87
+ - name: Build BYOD template Docker image
88
+ run: docker build -t byod-custom-image:0.1.0 templates/byod_smoke_test/
89
+
90
+ - name: Run Harbor E2E scenarios
91
+ run: python .github/scripts/harbor_e2e.py
@@ -80,7 +80,9 @@ jobs:
80
80
  pip install uv
81
81
 
82
82
  - name: Install project dependencies (hash-verified from uv.lock)
83
- run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm
83
+ # --extra harbor: pyright below type-checks src/coder_eval/harbor/agent.py
84
+ # against harbor's real types, not a scoped ignore.
85
+ run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm --extra harbor
84
86
 
85
87
  # PHASE 1: Fast checks (fail early)
86
88
  - name: Check code formatting (ruff format)
@@ -385,7 +387,9 @@ jobs:
385
387
  pip install uv
386
388
 
387
389
  - name: Install project dependencies (hash-verified from uv.lock)
388
- run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm
390
+ # --extra harbor: pyright below type-checks src/coder_eval/harbor/agent.py
391
+ # against harbor's real types, not a scoped ignore.
392
+ run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm --extra harbor
389
393
 
390
394
  - name: Check code formatting (ruff format)
391
395
  run: .venv/Scripts/ruff format --check src/ tests/
@@ -469,16 +473,16 @@ jobs:
469
473
  AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
470
474
  AWS_REGION: ${{ secrets.AWS_REGION }}
471
475
  BEDROCK_MODEL: ${{ secrets.BEDROCK_MODEL }}
472
- # tasks_run for --tags smoke-pass. 7 task files (hello_date, dataset_example,
476
+ # tasks_run for --tags smoke-pass. 8 task files (hello_date, dataset_example,
473
477
  # smoke_llm_judge, smoke_agent_judge, byod_smoke_test, agentless_smoke_test,
474
- # anti_cheat_reference); dataset_example fans out to 2 inline rows, so 8
475
- # sub-tasks. If you add/remove a smoke-pass task or change the dataset row
476
- # count, bump these.
478
+ # anti_cheat_reference, record_cli_responses); dataset_example fans out to 2
479
+ # inline rows, so 9 sub-tasks. If you add/remove a smoke-pass task or change
480
+ # the dataset row count, bump these.
477
481
  #
478
482
  # anti_cheat_reference lives in a SUBDIRECTORY, which `tasks/*.yaml` does not
479
483
  # match — the smoke-pass step names its path explicitly. Keep that in sync.
480
- EXPECTED_SMOKE_PASS_RUN: "8"
481
- EXPECTED_SMOKE_PASS_SUCCEEDED: "8"
484
+ EXPECTED_SMOKE_PASS_RUN: "9"
485
+ EXPECTED_SMOKE_PASS_SUCCEEDED: "9"
482
486
  # smoke-fail bucket: three tasks expected to fail.
483
487
  # 1. smoke_negative_path: file_contains criterion is unsatisfiable
484
488
  # (sentinel-string regression detection for success-checker).
@@ -549,6 +553,9 @@ jobs:
549
553
  # explicitly. anti_cheat_reference is the adversarial probe that the agent
550
554
  # cannot read the reference solution during its turn; it needs the
551
555
  # coder-eval-agent image built above (it is a driver: docker task).
556
+ # record_cli_responses is the record_cli per-invocation-response probe and
557
+ # is also driver: docker, so it needs that same image; it is flat in
558
+ # tasks/, so the glob already matches it.
552
559
  - name: Run smoke-pass bucket (expect all to succeed)
553
560
  run: |
554
561
  .venv/bin/coder-eval run tasks/*.yaml tasks/anti_cheat_reference/*.yaml \
@@ -2,6 +2,137 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.1 (2026-09-12)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Code review fixes for record-cli-review-fixes
10
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
11
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
12
+
13
+ - Resolve py/import-and-import-from CodeQL alerts in test_regrade.py +
14
+ test_detached_grading_boundaries.py ([#161](https://github.com/UiPath/coder_eval/pull/161),
15
+ [`6ab6b87`](https://github.com/UiPath/coder_eval/commit/6ab6b87b6112e5b9122bca86dc328b26f5c29188))
16
+
17
+ - **criteria**: 2/4 — a shim rule fault is an eval-config error, not an agent failure
18
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
19
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
20
+
21
+ - **evaluate**: Close the PR review findings on container-based detached grading
22
+ ([#161](https://github.com/UiPath/coder_eval/pull/161),
23
+ [`6ab6b87`](https://github.com/UiPath/coder_eval/commit/6ab6b87b6112e5b9122bca86dc328b26f5c29188))
24
+
25
+ - **evaluate**: Close the review blockers on container-based detached grading
26
+ ([#161](https://github.com/UiPath/coder_eval/pull/161),
27
+ [`6ab6b87`](https://github.com/UiPath/coder_eval/commit/6ab6b87b6112e5b9122bca86dc328b26f5c29188))
28
+
29
+ - **harbor**: Address code review findings from full 8-axis review
30
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
31
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
32
+
33
+ - **harbor**: Address PR review blockers (score-integrity, security, drops)
34
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
35
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
36
+
37
+ - **harbor**: Derive a prebuilt image's real WORKDIR instead of guessing /app
38
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
39
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
40
+
41
+ - **harbor**: Suppress pyright reportMissingImports for the harbor package
42
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
43
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
44
+
45
+ - **models**: Reference FlagPredicate at runtime so the cast is a real use
46
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
47
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
48
+
49
+ - **record_cli**: Close three real holes the Copilot review found
50
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
51
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
52
+
53
+ - **record_cli**: Reject an unusable response rule at load, and trace a shim fault
54
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
55
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
56
+
57
+ - **sandbox**: Give the sandbox venv system site packages
58
+ ([#162](https://github.com/UiPath/coder_eval/pull/162),
59
+ [`e7d8326`](https://github.com/UiPath/coder_eval/commit/e7d8326ddade4d63305f94238897b39db8af4317))
60
+
61
+ - **test**: Strip ANSI color before asserting --workspace-dir in CLI output
62
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
63
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
64
+
65
+ - **tests**: Harden harbor CLI-error assertions and Windows chmod checks
66
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
67
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
68
+
69
+ - **timing**: Account for generation and tool time on every harness
70
+ ([#164](https://github.com/UiPath/coder_eval/pull/164),
71
+ [`87102a3`](https://github.com/UiPath/coder_eval/commit/87102a357546672ae58c9c8474e609a4be3cb681))
72
+
73
+ ### Build System
74
+
75
+ - **docker**: Bake the harbor extra into the coder-eval-agent image
76
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
77
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
78
+
79
+ ### Continuous Integration
80
+
81
+ - **harbor**: Add Harbor E2E workflow (export + CoderEvalAgent round trip)
82
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
83
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
84
+
85
+ ### Features
86
+
87
+ - **evaluate**: Grade a `driver: docker` row inside a container of its own image
88
+ ([#161](https://github.com/UiPath/coder_eval/pull/161),
89
+ [`6ab6b87`](https://github.com/UiPath/coder_eval/commit/6ab6b87b6112e5b9122bca86dc328b26f5c29188))
90
+
91
+ - **harbor**: Coder-eval as a Harbor agent (C1.2)
92
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
93
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
94
+
95
+ - **harbor**: Export coder-eval tasks to Harbor, with coder-eval as the grader
96
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
97
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
98
+
99
+ - **harbor**: Export experiment.yaml variants to Harbor task directories
100
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
101
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
102
+
103
+ - **harbor**: Fix agent workspace alignment, env passthrough, and template sources
104
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
105
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
106
+
107
+ - **harbor**: Task.yaml/experiment.yaml → Harbor export + coder-eval as a Harbor agent
108
+ ([#166](https://github.com/UiPath/coder_eval/pull/166),
109
+ [`9caffcb`](https://github.com/UiPath/coder_eval/commit/9caffcbbae1feeb498e40c83bf679289caab7148))
110
+
111
+ - **record_cli**: Serve a different canned response per invocation
112
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
113
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
114
+
115
+ ### Refactoring
116
+
117
+ - **record_cli**: 1/4 — copy argv_match beside the shim instead of splicing it
118
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
119
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
120
+
121
+ ### Testing
122
+
123
+ - Close three harness gaps this review surfaced
124
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
125
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
126
+
127
+ - **lint**: 4/4 — put the record_cli authoring surface under CE030 doc parity
128
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
129
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
130
+
131
+ - **tasks**: 3/4 — add the record_cli per-invocation-response probe
132
+ ([#150](https://github.com/UiPath/coder_eval/pull/150),
133
+ [`3aca8e8`](https://github.com/UiPath/coder_eval/commit/3aca8e8010d6beb5147116d07e15118009e81991))
134
+
135
+
5
136
  ## v0.12.0 (2026-09-09)
6
137
 
7
138
  ### Bug Fixes