coder-eval 0.12.7__tar.gz → 0.12.9__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 (834) hide show
  1. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/harness-candidates.md +10 -0
  2. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/lint-rules.md +1 -1
  3. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/permissions.md +0 -8
  4. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/timing.md +2 -2
  5. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/pr-checks.yml +1 -1
  6. {coder_eval-0.12.7 → coder_eval-0.12.9}/CHANGELOG.md +82 -0
  7. {coder_eval-0.12.7 → coder_eval-0.12.9}/PKG-INFO +1 -1
  8. {coder_eval-0.12.7 → coder_eval-0.12.9}/action.yml +1 -1
  9. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/DOCKER_ISOLATION.md +50 -0
  10. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/REPORT_SCHEMA.md +4 -1
  11. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/HARNESS_PARITY.md +5 -4
  12. coder_eval-0.12.9/osv-scanner.toml +15 -0
  13. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  14. {coder_eval-0.12.7 → coder_eval-0.12.9}/pyproject.toml +3 -2
  15. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/__init__.py +1 -1
  16. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/_skills.py +2 -2
  17. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/antigravity_agent.py +43 -10
  18. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/codex_agent.py +43 -0
  19. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/run_task_internal_command.py +13 -0
  20. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/isolation/docker_runner.py +127 -47
  21. coder_eval-0.12.9/src/coder_eval/isolation/eval_material.py +58 -0
  22. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/__init__.py +4 -0
  23. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/container_paths.py +3 -0
  24. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/results.py +9 -0
  25. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/telemetry.py +18 -0
  26. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestrator.py +3 -71
  27. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/simulation/user_simulator.py +5 -1
  28. coder_eval-0.12.9/src/coder_eval/simulation/utterance.py +79 -0
  29. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/collector.py +1 -0
  30. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/events.py +2 -0
  31. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/antigravity_fixtures.py +31 -2
  32. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +1 -0
  33. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +1 -0
  34. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +1 -0
  35. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +1 -0
  36. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +1 -0
  37. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +1 -0
  38. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +1 -0
  39. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +1 -0
  40. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +1 -0
  41. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +1 -0
  42. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +1 -0
  43. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +1 -0
  44. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +1 -0
  45. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +1 -0
  46. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +1 -0
  47. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +1 -0
  48. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -0
  49. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +1 -0
  50. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -0
  51. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +1 -0
  52. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +1 -0
  53. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -0
  54. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +1 -0
  55. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +1 -0
  56. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +1 -0
  57. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +1 -0
  58. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +1 -0
  59. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +1 -0
  60. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +1 -0
  61. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +1 -0
  62. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +1 -0
  63. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +1 -0
  64. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +1 -0
  65. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +1 -0
  66. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/runner.py +1 -1
  67. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_antigravity_agent.py +58 -3
  68. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_codex_agent.py +85 -0
  69. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_container_context.py +31 -0
  70. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_custom_lint.py +175 -0
  71. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_runner_mounts.py +260 -1
  72. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_early_stop.py +2 -0
  73. coder_eval-0.12.9/tests/test_eval_material.py +147 -0
  74. coder_eval-0.12.9/tests/test_run_task_internal.py +75 -0
  75. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timing_identity_contract.py +7 -3
  76. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_user_simulator.py +27 -0
  77. {coder_eval-0.12.7 → coder_eval-0.12.9}/uv.lock +5 -5
  78. coder_eval-0.12.7/osv-scanner.toml +0 -11
  79. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-code-review-full.md +0 -0
  80. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  81. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-code-review.md +0 -0
  82. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-create-plan.md +0 -0
  83. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-implement-plan.md +0 -0
  84. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/commands/coder-eval-review.md +0 -0
  85. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/README.md +0 -0
  86. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/agents.md +0 -0
  87. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/contracts.md +0 -0
  88. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/isolation.md +0 -0
  89. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/orchestration.md +0 -0
  90. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/persistence.md +0 -0
  91. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/notes/reporting.md +0 -0
  92. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/shared/axes.md +0 -0
  93. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/shared/multi-model-review.md +0 -0
  94. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/shared/review-rubric.md +0 -0
  95. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/shared/run-layout.md +0 -0
  96. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/workflows/cr-axis.js +0 -0
  97. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude/workflows/cr-parent.js +0 -0
  98. {coder_eval-0.12.7 → coder_eval-0.12.9}/.claude-plugin/marketplace.json +0 -0
  99. {coder_eval-0.12.7 → coder_eval-0.12.9}/.env.example +0 -0
  100. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/CODEOWNERS +0 -0
  101. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  102. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  103. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  104. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/actionlint.yaml +0 -0
  105. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/code_review.md +0 -0
  106. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/dependabot.yml +0 -0
  107. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/pages-stub/index.html +0 -0
  108. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  109. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/scripts/harbor_e2e.py +0 -0
  110. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/scripts/release_notes.py +0 -0
  111. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/claude-pr-review.yml +0 -0
  112. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/codeql.yml +0 -0
  113. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/conventional-commits.yml +0 -0
  114. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/docker-publish.yml +0 -0
  115. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/docs.yml +0 -0
  116. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/harbor-e2e.yml +0 -0
  117. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/publish-testpypi.yml +0 -0
  118. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/release.yml +0 -0
  119. {coder_eval-0.12.7 → coder_eval-0.12.9}/.github/workflows/verify-published-action.yml +0 -0
  120. {coder_eval-0.12.7 → coder_eval-0.12.9}/.gitignore +0 -0
  121. {coder_eval-0.12.7 → coder_eval-0.12.9}/.pre-commit-config.yaml +0 -0
  122. {coder_eval-0.12.7 → coder_eval-0.12.9}/.python-version +0 -0
  123. {coder_eval-0.12.7 → coder_eval-0.12.9}/ADOPTERS.md +0 -0
  124. {coder_eval-0.12.7 → coder_eval-0.12.9}/CLAUDE.md +0 -0
  125. {coder_eval-0.12.7 → coder_eval-0.12.9}/CODE_OF_CONDUCT.md +0 -0
  126. {coder_eval-0.12.7 → coder_eval-0.12.9}/CONTRIBUTING.md +0 -0
  127. {coder_eval-0.12.7 → coder_eval-0.12.9}/LICENSE +0 -0
  128. {coder_eval-0.12.7 → coder_eval-0.12.9}/Makefile +0 -0
  129. {coder_eval-0.12.7 → coder_eval-0.12.9}/NOTICE +0 -0
  130. {coder_eval-0.12.7 → coder_eval-0.12.9}/README.md +0 -0
  131. {coder_eval-0.12.7 → coder_eval-0.12.9}/SECURITY.md +0 -0
  132. {coder_eval-0.12.7 → coder_eval-0.12.9}/comparison.md +0 -0
  133. {coder_eval-0.12.7 → coder_eval-0.12.9}/docker/Dockerfile +0 -0
  134. {coder_eval-0.12.7 → coder_eval-0.12.9}/docker/Dockerfile.runtime +0 -0
  135. {coder_eval-0.12.7 → coder_eval-0.12.9}/docker/coder_eval_entrypoint.sh +0 -0
  136. {coder_eval-0.12.7 → coder_eval-0.12.9}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  137. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/AB_EXPERIMENTS.md +0 -0
  138. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/CI_GATE.md +0 -0
  139. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/DATASETS.md +0 -0
  140. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/DIALOG_MODE.md +0 -0
  141. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/EXTENDING.md +0 -0
  142. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/PLUGIN.md +0 -0
  143. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/TASK_DEFINITION_GUIDE.md +0 -0
  144. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/USER_GUIDE.md +0 -0
  145. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/ANTIGRAVITY.md +0 -0
  146. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/CLAUDE_CODE.md +0 -0
  147. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/CODEX.md +0 -0
  148. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/DELEGATE.md +0 -0
  149. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/OPENCODE.md +0 -0
  150. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/agents/PI.md +0 -0
  151. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/assets/hero.gif +0 -0
  152. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/comparison.md +0 -0
  153. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/index.md +0 -0
  154. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/llms.txt +0 -0
  155. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/01-first-evaluation.md +0 -0
  156. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/02-ci-pipeline.md +0 -0
  157. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/03-evalboard-local.md +0 -0
  158. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/04-writing-a-task.md +0 -0
  159. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/05-comparing-models.md +0 -0
  160. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/06-use-docker-isolation.md +0 -0
  161. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  162. {coder_eval-0.12.7 → coder_eval-0.12.9}/docs/tutorials/README.md +0 -0
  163. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/.gitignore +0 -0
  164. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/README.md +0 -0
  165. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  166. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  167. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  168. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  169. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/col-help.tsx +0 -0
  170. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  171. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/harness-badge.tsx +0 -0
  172. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/harness-selector.tsx +0 -0
  173. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/scroll-table.tsx +0 -0
  174. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/search-box.tsx +0 -0
  175. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/skeleton.tsx +0 -0
  176. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/unit-toggle.tsx +0 -0
  177. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_components/version-list.tsx +0 -0
  178. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  179. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_lib/source-param.ts +0 -0
  180. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  181. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  182. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  183. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/daily-chart.tsx +0 -0
  184. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  185. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/harness-legend.tsx +0 -0
  186. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/harness-series.ts +0 -0
  187. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/tag-rail.tsx +0 -0
  188. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  189. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  190. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/_overview/window-summary.tsx +0 -0
  191. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/api/download/route.ts +0 -0
  192. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/api/file/route.ts +0 -0
  193. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  194. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/api/refresh/route.ts +0 -0
  195. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/error.tsx +0 -0
  196. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/globals.css +0 -0
  197. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/icon.png +0 -0
  198. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/layout.tsx +0 -0
  199. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/loading.tsx +0 -0
  200. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/page.tsx +0 -0
  201. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  202. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/path-to-ga/page.tsx +0 -0
  203. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  204. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/scribe/page.tsx +0 -0
  205. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/scribe/run-table.tsx +0 -0
  206. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  207. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/trends/actions.ts +0 -0
  208. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/trends/page.tsx +0 -0
  209. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/trends/trends-view.tsx +0 -0
  210. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  211. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/watchlist/page.tsx +0 -0
  212. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  213. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/next-env.d.ts +0 -0
  214. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/next.config.mjs +0 -0
  215. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/package.json +0 -0
  216. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/pnpm-lock.yaml +0 -0
  217. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/postcss.config.mjs +0 -0
  218. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/public/harness/antigravity.png +0 -0
  219. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/public/harness/claude-code.png +0 -0
  220. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/public/harness/codex.png +0 -0
  221. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/public/harness/pi.png +0 -0
  222. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/public/uipath.png +0 -0
  223. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/tailwind.config.ts +0 -0
  224. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/tsconfig.json +0 -0
  225. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/vitest.config.ts +0 -0
  226. {coder_eval-0.12.7 → coder_eval-0.12.9}/evalboard/vitest.setup.ts +0 -0
  227. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/default.yaml +0 -0
  228. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/early-stop-ab.yaml +0 -0
  229. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/model-comparison.yaml +0 -0
  230. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/permissions-smoke.yaml +0 -0
  231. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/plugin-comparison.yaml +0 -0
  232. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/prompt-mutations-example.yaml +0 -0
  233. {coder_eval-0.12.7 → coder_eval-0.12.9}/experiments/smoke_variants.yaml +0 -0
  234. {coder_eval-0.12.7 → coder_eval-0.12.9}/litellm/README.md +0 -0
  235. {coder_eval-0.12.7 → coder_eval-0.12.9}/litellm/cost_logger.py +0 -0
  236. {coder_eval-0.12.7 → coder_eval-0.12.9}/litellm/litellm-config.yaml +0 -0
  237. {coder_eval-0.12.7 → coder_eval-0.12.9}/litellm/start-litellm.sh +0 -0
  238. {coder_eval-0.12.7 → coder_eval-0.12.9}/mkdocs.yml +0 -0
  239. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/README.md +0 -0
  240. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/cli-setup.md +0 -0
  241. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/criteria.md +0 -0
  242. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/repo-layout.md +0 -0
  243. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/run-layout.md +0 -0
  244. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/task-rubric.md +0 -0
  245. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  246. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  247. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  248. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  249. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  250. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  251. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  252. {coder_eval-0.12.7 → coder_eval-0.12.9}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  253. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/check_commit_msg.sh +0 -0
  254. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/README.md +0 -0
  255. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/antigravity.json +0 -0
  256. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/claude-code.json +0 -0
  257. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/codex.json +0 -0
  258. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/opencode.json +0 -0
  259. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/corpus/pi.json +0 -0
  260. {coder_eval-0.12.7 → coder_eval-0.12.9}/scripts/timing/decompose_run.py +0 -0
  261. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/.gitattributes +0 -0
  262. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agent.py +0 -0
  263. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/__init__.py +0 -0
  264. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/_logging.py +0 -0
  265. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/claude_code_agent.py +0 -0
  266. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/delegate/.gitignore +0 -0
  267. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/delegate/delegate_host.mjs +0 -0
  268. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/delegate/package.json +0 -0
  269. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/delegate_agent.py +0 -0
  270. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/noop_agent.py +0 -0
  271. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/opencode_agent.py +0 -0
  272. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/pi_agent.py +0 -0
  273. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/registry.py +0 -0
  274. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/agents/watchdog.py +0 -0
  275. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/analysis.py +0 -0
  276. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/argv_match.py +0 -0
  277. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/__init__.py +0 -0
  278. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/console.py +0 -0
  279. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/evaluate_command.py +0 -0
  280. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/evaluate_target.py +0 -0
  281. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/execute_command.py +0 -0
  282. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/export_command.py +0 -0
  283. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/harbor_command.py +0 -0
  284. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/plan_command.py +0 -0
  285. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/report_command.py +0 -0
  286. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/run_command.py +0 -0
  287. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/run_helpers.py +0 -0
  288. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/cli/utils.py +0 -0
  289. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/config.py +0 -0
  290. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/__init__.py +0 -0
  291. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  292. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/agent_judge.py +0 -0
  293. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/base.py +0 -0
  294. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/classification_match.py +0 -0
  295. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/cli_called.py +0 -0
  296. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/command_executed.py +0 -0
  297. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  298. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/file_check.py +0 -0
  299. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/file_contains.py +0 -0
  300. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/file_exists.py +0 -0
  301. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  302. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/json_check.py +0 -0
  303. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/llm_judge.py +0 -0
  304. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/reference_comparison.py +0 -0
  305. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/run_command.py +0 -0
  306. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/skill_triggered.py +0 -0
  307. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/system_one_judge.py +0 -0
  308. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/criteria/uipath_eval.py +0 -0
  309. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/durations.py +0 -0
  310. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/__init__.py +0 -0
  311. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/agent.py +0 -0
  312. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/budget.py +0 -0
  313. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/categories.py +0 -0
  314. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/categorization.py +0 -0
  315. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/checker_misuse.py +0 -0
  316. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/executor.py +0 -0
  317. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/judge.py +0 -0
  318. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/reference.py +0 -0
  319. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/retry.py +0 -0
  320. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/errors/timeout.py +0 -0
  321. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/__init__.py +0 -0
  322. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/checker.py +0 -0
  323. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  324. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  325. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_context.py +0 -0
  326. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  327. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_models.py +0 -0
  328. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  329. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  330. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/judge_usage.py +0 -0
  331. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/sub_agent.py +0 -0
  332. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/summaries.py +0 -0
  333. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  334. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  335. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/formatting.py +0 -0
  336. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/fs_permissions.py +0 -0
  337. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/__init__.py +0 -0
  338. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/agent.py +0 -0
  339. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/agent_paths.py +0 -0
  340. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/atif_emit.py +0 -0
  341. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  342. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/atif_models.py +0 -0
  343. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/experiment_packager.py +0 -0
  344. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/packager.py +0 -0
  345. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/portability.py +0 -0
  346. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/harbor/reward.py +0 -0
  347. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/invocation_log.py +0 -0
  348. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/isolation/__init__.py +0 -0
  349. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/litellm_cost.py +0 -0
  350. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/logging_config.py +0 -0
  351. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/agent_config.py +0 -0
  352. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/cli_match.py +0 -0
  353. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/container_context.py +0 -0
  354. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/criteria.py +0 -0
  355. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/enums.py +0 -0
  356. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/experiment.py +0 -0
  357. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/judge.py +0 -0
  358. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/judge_defaults.py +0 -0
  359. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/limits.py +0 -0
  360. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/merge_strategy.py +0 -0
  361. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/mutations.py +0 -0
  362. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/routing.py +0 -0
  363. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/sandbox.py +0 -0
  364. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/system_one.py +0 -0
  365. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/tasks.py +0 -0
  366. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/models/templates.py +0 -0
  367. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/__init__.py +0 -0
  368. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/batch.py +0 -0
  369. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/config.py +0 -0
  370. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/config_merge.py +0 -0
  371. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/early_stop.py +0 -0
  372. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/evaluation.py +0 -0
  373. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/experiment.py +0 -0
  374. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/overrides.py +0 -0
  375. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/regrade.py +0 -0
  376. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/run_limits.py +0 -0
  377. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  378. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/orchestration/task_loader.py +0 -0
  379. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/path_utils.py +0 -0
  380. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/plugins.py +0 -0
  381. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/pricing.py +0 -0
  382. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/py.typed +0 -0
  383. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/__init__.py +0 -0
  384. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/experiment.py +0 -0
  385. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/helpers.py +0 -0
  386. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/html.py +0 -0
  387. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/junit.py +0 -0
  388. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/reports/markdown.py +0 -0
  389. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/resources/__init__.py +0 -0
  390. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  391. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/resources/tags.yaml +0 -0
  392. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/result_metrics.py +0 -0
  393. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/run_record.py +0 -0
  394. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/sandbox.py +0 -0
  395. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/__init__.py +0 -0
  396. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/ast_similarity.py +0 -0
  397. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/complexity.py +0 -0
  398. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/quality.py +0 -0
  399. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/signature_similarity.py +0 -0
  400. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/similarity.py +0 -0
  401. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/scoring/token_similarity.py +0 -0
  402. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/simulation/__init__.py +0 -0
  403. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/simulation/termination.py +0 -0
  404. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/stats.py +0 -0
  405. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/__init__.py +0 -0
  406. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/callbacks.py +0 -0
  407. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/renderers.py +0 -0
  408. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/streaming/wire.py +0 -0
  409. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/telemetry.py +0 -0
  410. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/timing.py +0 -0
  411. {coder_eval-0.12.7 → coder_eval-0.12.9}/src/coder_eval/utils.py +0 -0
  412. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/README.md +0 -0
  413. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agentless_smoke_test.yaml +0 -0
  414. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/antigravity_hello_world.yaml +0 -0
  415. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  416. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/claude_hello_world.yaml +0 -0
  417. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  418. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  419. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/claude_subagent_test.yaml +0 -0
  420. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  421. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_hello_world.yaml +0 -0
  422. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_parallel_commands.yaml +0 -0
  423. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  424. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_skills_test.yaml +0 -0
  425. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_string_utils.yaml +0 -0
  426. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/codex_subagent_test.yaml +0 -0
  427. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  428. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/agents/subagent_merge_sort.yaml +0 -0
  429. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  430. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  431. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/byod_smoke_test.yaml +0 -0
  432. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dataset_example.yaml +0 -0
  433. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/datasets/sentiment.jsonl +0 -0
  434. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  435. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/delegate/hello_date_delegate.yaml +0 -0
  436. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  437. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  438. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  439. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  440. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  441. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  442. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  443. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  444. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  445. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/fibonacci_with_template.yaml +0 -0
  446. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/hello_date.yaml +0 -0
  447. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/inline_starter_example.yaml +0 -0
  448. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/internal/session_resumption.yaml +0 -0
  449. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_smoke.yaml +0 -0
  450. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  451. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  452. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  453. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  454. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  455. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/opencode_smoke_test.yaml +0 -0
  456. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/pi_smoke_test.yaml +0 -0
  457. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  458. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/record_cli_responses.yaml +0 -0
  459. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/run_limits/max_turns_cap.yaml +0 -0
  460. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/run_limits/turn_timeout.yaml +0 -0
  461. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  462. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  463. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  464. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  465. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  466. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  467. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/README.md +0 -0
  468. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  469. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  470. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  471. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  472. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  473. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  474. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  475. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  476. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  477. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  478. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/sentiment_classification.yaml +0 -0
  479. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_agent_judge.yaml +0 -0
  480. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_budget_exceeded.yaml +0 -0
  481. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  482. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_llm_judge.yaml +0 -0
  483. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_negative_path.yaml +0 -0
  484. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_system_one_judge.yaml +0 -0
  485. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_task_timeout.yaml +0 -0
  486. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/smoke_variants.yaml +0 -0
  487. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/test_sandbox.yaml +0 -0
  488. {coder_eval-0.12.7 → coder_eval-0.12.9}/tasks/token_check.yaml +0 -0
  489. {coder_eval-0.12.7 → coder_eval-0.12.9}/templates/byod_smoke_test/Dockerfile +0 -0
  490. {coder_eval-0.12.7 → coder_eval-0.12.9}/templates/fibonacci-starter/README.md +0 -0
  491. {coder_eval-0.12.7 → coder_eval-0.12.9}/templates/fibonacci-starter/src/main.py +0 -0
  492. {coder_eval-0.12.7 → coder_eval-0.12.9}/templates/fibonacci-starter/tests/test_main.py +0 -0
  493. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/__init__.py +0 -0
  494. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_bracket_clock.py +0 -0
  495. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_container_contract.py +0 -0
  496. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/__init__.py +0 -0
  497. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/__init__.py +0 -0
  498. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  499. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  500. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  501. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  502. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  503. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  504. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  505. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  506. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  507. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  508. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  509. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  510. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  511. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  512. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  513. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  514. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/live_criteria.py +0 -0
  515. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  516. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  517. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  518. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  519. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  520. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  521. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  522. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_fixtures/timing_union_cases.json +0 -0
  523. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/_path_helpers.py +0 -0
  524. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/conftest.py +0 -0
  525. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/__init__.py +0 -0
  526. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  527. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  528. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  529. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/mock_agent.py +0 -0
  530. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  531. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  532. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  533. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  534. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/fixtures/text_stub_agent.py +0 -0
  535. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  536. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  537. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  538. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  539. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/__init__.py +0 -0
  540. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/action_docs.py +0 -0
  541. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/agent_roster_parity.py +0 -0
  542. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/dead_config_fields.py +0 -0
  543. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/doc_env_parity.py +0 -0
  544. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/doc_examples.py +0 -0
  545. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/doc_indexes.py +0 -0
  546. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/doc_schema_parity.py +0 -0
  547. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/generated.py +0 -0
  548. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/live_verdict_contract.py +0 -0
  549. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/plugin_manifest_parity.py +0 -0
  550. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/plugin_reference.py +0 -0
  551. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/pricing_mirror.py +0 -0
  552. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/prose_budget.py +0 -0
  553. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/pyright_config.py +0 -0
  554. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/__init__.py +0 -0
  555. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/_layers.py +0 -0
  556. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/_model_ctor.py +0 -0
  557. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/base.py +0 -0
  558. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  559. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  560. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  561. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  562. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  563. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  564. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  565. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  566. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  567. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  568. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  569. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  570. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  571. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  572. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  573. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  574. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  575. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  576. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  577. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  578. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  579. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  580. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  581. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  582. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  583. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  584. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  585. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  586. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  587. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  588. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  589. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  590. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_agent_timing_access.py +0 -0
  591. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  592. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  593. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_silent_except.py +0 -0
  594. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  595. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  596. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  597. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  598. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/open_explicit_encoding.py +0 -0
  599. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  600. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/register_criterion_required.py +0 -0
  601. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  602. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  603. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/violation.py +0 -0
  604. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/lint/workflow_outputs.py +0 -0
  605. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_action_inputs.py +0 -0
  606. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_action_version_pin.py +0 -0
  607. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent.py +0 -0
  608. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_config_no_timing_fields.py +0 -0
  609. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_config_optional_type.py +0 -0
  610. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_config_registry_dispatch.py +0 -0
  611. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_config_sdk_decoupling.py +0 -0
  612. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_golden_master.py +0 -0
  613. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_judge_criterion.py +0 -0
  614. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_telemetry.py +0 -0
  615. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_telemetry_advanced.py +0 -0
  616. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agent_timeout.py +0 -0
  617. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_agentless.py +0 -0
  618. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_atif_emit.py +0 -0
  619. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_atif_hydrate.py +0 -0
  620. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_atif_models.py +0 -0
  621. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_byoa_plugin.py +0 -0
  622. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_byoa_plugin_live.py +0 -0
  623. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_byod_feature.py +0 -0
  624. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_check_all_async.py +0 -0
  625. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_checker_logging.py +0 -0
  626. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_classification_match.py +0 -0
  627. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_claude_settings_enforcement_live.py +0 -0
  628. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cleanup_preservation_guard.py +0 -0
  629. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_backend_flag.py +0 -0
  630. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_called_criterion.py +0 -0
  631. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_empty_glob.py +0 -0
  632. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_match_parity.py +0 -0
  633. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_sdk_options.py +0 -0
  634. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_set_overrides.py +0 -0
  635. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_telemetry.py +0 -0
  636. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cli_type_flag.py +0 -0
  637. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_code_review_bugs.py +0 -0
  638. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_codex_agent_live.py +0 -0
  639. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_codex_agent_unit.py +0 -0
  640. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_codex_token_mapping.py +0 -0
  641. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_command_executed.py +0 -0
  642. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_command_statistics.py +0 -0
  643. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_command_telemetry_result_data.py +0 -0
  644. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_commands_efficiency.py +0 -0
  645. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_config_lineage.py +0 -0
  646. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_config_merge_engine.py +0 -0
  647. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_config_precedence.py +0 -0
  648. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_continuous_scoring.py +0 -0
  649. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_cost_accounting_paths.py +0 -0
  650. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_criterion_result_round_trip.py +0 -0
  651. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_dataset_expansion.py +0 -0
  652. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_debug_logging.py +0 -0
  653. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_delegate_agent.py +0 -0
  654. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_delegate_agent_config.py +0 -0
  655. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_delegate_agent_live.py +0 -0
  656. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_delegate_agent_registration.py +0 -0
  657. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_detached_grading_boundaries.py +0 -0
  658. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_detached_grading_guards.py +0 -0
  659. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_build_failure.py +0 -0
  660. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_litellm_env.py +0 -0
  661. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_runner_container_death.py +0 -0
  662. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_runner_stream_limit.py +0 -0
  663. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_wildcard_env.py +0 -0
  664. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_docker_workdir_live.py +0 -0
  665. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_driver_resolver.py +0 -0
  666. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_durations.py +0 -0
  667. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_error_handling.py +0 -0
  668. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_evaluate_command.py +0 -0
  669. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_evaluate_format_harbor.py +0 -0
  670. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_evaluate_target.py +0 -0
  671. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_evaluator.py +0 -0
  672. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_event_collector.py +0 -0
  673. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_execute_command.py +0 -0
  674. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_execute_evaluate_loop.py +0 -0
  675. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_execute_format_harbor.py +0 -0
  676. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_cli.py +0 -0
  677. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_loader.py +0 -0
  678. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_models.py +0 -0
  679. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_reports.py +0 -0
  680. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_resolver.py +0 -0
  681. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_experiment_runner.py +0 -0
  682. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_file_check.py +0 -0
  683. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_file_contains_scoring.py +0 -0
  684. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_formatting.py +0 -0
  685. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_git_clone_failure.py +0 -0
  686. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_glob_paths_in_file_criteria.py +0 -0
  687. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_agent.py +0 -0
  688. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_e2e_fixtures.py +0 -0
  689. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_experiment_packager.py +0 -0
  690. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_export_golden.py +0 -0
  691. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_packager.py +0 -0
  692. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_portability.py +0 -0
  693. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_harbor_reward.py +0 -0
  694. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_heartbeat_watchdog.py +0 -0
  695. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_ignore_patterns_negation.py +0 -0
  696. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_image_from_dockerfiles.py +0 -0
  697. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_image_skew_refusal.py +0 -0
  698. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_integration.py +0 -0
  699. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_json_check.py +0 -0
  700. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_anthropic.py +0 -0
  701. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_bedrock.py +0 -0
  702. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_burn_in_live.py +0 -0
  703. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_context_builder.py +0 -0
  704. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_litellm.py +0 -0
  705. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_models.py +0 -0
  706. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_persistence.py +0 -0
  707. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_judge_system_one.py +0 -0
  708. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_lint_no_top_level_run_limits.py +0 -0
  709. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_lint_runner.py +0 -0
  710. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_litellm_config.py +0 -0
  711. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_litellm_cost.py +0 -0
  712. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_litellm_cost_logger.py +0 -0
  713. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_litellm_judge_live.py +0 -0
  714. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_litellm_route.py +0 -0
  715. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_llm_judge_criterion.py +0 -0
  716. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_log_tail_buffer.py +0 -0
  717. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_logging.py +0 -0
  718. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_logging_isolation.py +0 -0
  719. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_merge_characterization.py +0 -0
  720. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_merge_strategy_annotations.py +0 -0
  721. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_merge_unification.py +0 -0
  722. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_models.py +0 -0
  723. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_mutations.py +0 -0
  724. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_new_criteria.py +0 -0
  725. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_node_env_config.py +0 -0
  726. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_opencode_agent.py +0 -0
  727. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_optional_dependencies.py +0 -0
  728. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_orchestrator.py +0 -0
  729. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_orchestrator_error_log_tail.py +0 -0
  730. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_orchestrator_telemetry.py +0 -0
  731. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_overrides_engine.py +0 -0
  732. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_parallel.py +0 -0
  733. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_path_utils.py +0 -0
  734. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pi_agent.py +0 -0
  735. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pi_agent_config.py +0 -0
  736. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pi_smoke_task.py +0 -0
  737. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_plan_command.py +0 -0
  738. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_plugin_processing.py +0 -0
  739. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_plugins.py +0 -0
  740. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_post_run.py +0 -0
  741. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pr_review_workflow.py +0 -0
  742. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pre_run.py +0 -0
  743. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_preservation_mode.py +0 -0
  744. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pricing_mirror.py +0 -0
  745. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_pricing_registry.py +0 -0
  746. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_prose_budget.py +0 -0
  747. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_prose_budget_commands.py +0 -0
  748. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reference_comparison_scoring.py +0 -0
  749. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reference_evaluator.py +0 -0
  750. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reference_missing_file.py +0 -0
  751. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reference_models.py +0 -0
  752. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reference_permissions.py +0 -0
  753. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_registry.py +0 -0
  754. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_regrade.py +0 -0
  755. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_release_notes.py +0 -0
  756. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_replicate_stats.py +0 -0
  757. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_report_command.py +0 -0
  758. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reports.py +0 -0
  759. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reports_html.py +0 -0
  760. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reports_junit.py +0 -0
  761. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_reports_package.py +0 -0
  762. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_resolve_task_files.py +0 -0
  763. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_result_metrics.py +0 -0
  764. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_resume.py +0 -0
  765. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_retry_logic_comprehensive.py +0 -0
  766. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_route_seam_exhaustiveness.py +0 -0
  767. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_routing.py +0 -0
  768. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_command_junit.py +0 -0
  769. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_command_stdout.py +0 -0
  770. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_helpers.py +0 -0
  771. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_limits_models.py +0 -0
  772. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_limits_orchestrator.py +0 -0
  773. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_limits_resolver.py +0 -0
  774. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_metrics.py +0 -0
  775. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_record.py +0 -0
  776. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_run_summary_rebuild.py +0 -0
  777. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_runtime_tool_versions.py +0 -0
  778. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox.py +0 -0
  779. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_adopt.py +0 -0
  780. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_layer_builder.py +0 -0
  781. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_optional.py +0 -0
  782. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_record_cli.py +0 -0
  783. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_security.py +0 -0
  784. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_symlink_preservation.py +0 -0
  785. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_templates.py +0 -0
  786. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sandbox_venv_live.py +0 -0
  787. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_scorers.py +0 -0
  788. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_scoring_quality.py +0 -0
  789. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sdk_option_classification.py +0 -0
  790. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_seed_from_prior_result.py +0 -0
  791. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_simulation_config.py +0 -0
  792. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_simulation_integration.py +0 -0
  793. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_simulation_termination.py +0 -0
  794. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_simulation_trials.py +0 -0
  795. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_skill_triggered.py +0 -0
  796. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_stats.py +0 -0
  797. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_stats_nonfinite.py +0 -0
  798. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_agent_integration.py +0 -0
  799. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_batch.py +0 -0
  800. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_callbacks.py +0 -0
  801. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_cli.py +0 -0
  802. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_events.py +0 -0
  803. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_orchestrator.py +0 -0
  804. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_renderers.py +0 -0
  805. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_streaming_wire.py +0 -0
  806. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_sub_agent_runner.py +0 -0
  807. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_success_criterion_union.py +0 -0
  808. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_suite_rollup.py +0 -0
  809. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_summaries.py +0 -0
  810. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_system_one_judge.py +0 -0
  811. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_system_one_judge_live.py +0 -0
  812. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_tags.py +0 -0
  813. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_task_definition_unknown_fields.py +0 -0
  814. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_teardown_interrupt.py +0 -0
  815. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_telemetry.py +0 -0
  816. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_template_env_expansion.py +0 -0
  817. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_threshold_enforcement.py +0 -0
  818. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timeout_batch.py +0 -0
  819. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timeout_categorization.py +0 -0
  820. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timeout_exceptions.py +0 -0
  821. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timeout_models.py +0 -0
  822. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timeout_orchestrator.py +0 -0
  823. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timing_close_window.py +0 -0
  824. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_timing_union_parity.py +0 -0
  825. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_token_usage.py +0 -0
  826. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_uipath_eval.py +0 -0
  827. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_ungraded_reporting.py +0 -0
  828. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_utils.py +0 -0
  829. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_utterance_extraction.py +0 -0
  830. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_variant_prompt_file.py +0 -0
  831. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_verdict_tool.py +0 -0
  832. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_verify_published_workflow.py +0 -0
  833. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_watchdog.py +0 -0
  834. {coder_eval-0.12.7 → coder_eval-0.12.9}/tests/test_yaml_migration.py +0 -0
@@ -1022,3 +1022,13 @@ re-derive from scratch.
1022
1022
  have, and it is a recurring class ONLY within one file so far — worth promoting to a rule
1023
1023
  if a second subprocess-driven agent repeats it. Caught in: final cross-phase review,
1024
1024
  delegate agent port.
1025
+
1026
+ ## From 2026-09-26 Antigravity SDK 0.1.18 usage regression
1027
+
1028
+ - [ ] Runtime guard: fail an Antigravity turn that ran MODEL steps but booked zero
1029
+ tokens, as OpenCode's `require_token_telemetry` does. SDK 0.1.18 deprecated
1030
+ `Step.usage_metadata` (usage moved to `conversation.total_usage`), so every
1031
+ Antigravity turn from `3aa2db30` on reported no tokens and no cost, and `api_calls`
1032
+ stayed at 1 so `max_turns` never tripped — all silently, with `make verify` green.
1033
+ A static rule cannot see an SDK field go dead; a live-telemetry smoke (one real turn,
1034
+ assert `token_usage` is non-empty) in the harness-bump checklist would have.
@@ -667,7 +667,7 @@ shipped. An id is a permanent documentation anchor: a suppression comment carryi
667
667
  an older branch, review or commit message must never start meaning something new. CE023 is
668
668
  retired the same way, after the rule was deleted with the package it guarded.
669
669
 
670
- Claim 068 next, and note 065 IS TAKEN without being in `ALL_RULES`: doc-surface and
670
+ Claim 069 next, and note 065 IS TAKEN without being in `ALL_RULES`: doc-surface and
671
671
  whole-tree rules are `@pytest.mark.lint` classes in `tests/test_custom_lint.py` rather than
672
672
  `BaseRule`s, so `runner.py`'s uniqueness assert cannot see them. Enumerating them in a
673
673
  comment is how that note fell behind CE044, so grep instead:
@@ -29,10 +29,6 @@ read-write throwaway copy; when it was bind-mounted `:ro` the chmod returned ERO
29
29
  no tmpfs mask and has not been one since: see
30
30
  [isolation.md](isolation.md) § Why the framework mounts are writable copies.
31
31
 
32
- What the window does NOT hide is the task DEFINITION. `task.yaml` is also staged at
33
- `/work/input` for the in-container orchestrator and that mount is untouched, so hiding the
34
- criteria from the agent remains a separate, unsolved problem.
35
-
36
32
  Criteria address reference files with the `$REFERENCE_DIR` token (same resolver as
37
33
  `$TASK_DIR`) and the `REFERENCE_DIR` env var for `run_command`; `reference_comparison` names
38
34
  one file via `reference_file`.
@@ -64,10 +60,6 @@ criteria and judges run. The task directory is shielded by the same window: unde
64
60
  it is mounted as a throwaway COPY at a fixed container path, which is what makes it
65
61
  chmod-able without touching the user's checked-out `tasks/` tree.
66
62
 
67
- It shields grading MATERIAL that happens to live in the task directory (a `reference/`
68
- subdirectory, fixtures), not the task DEFINITION: `task.yaml` is separately staged at
69
- `/work/input`, which the agent can still read.
70
-
71
63
  ### Why a stack and not a refcount
72
64
 
73
65
  Windows nest with *different* modes, so what an exit has to restore is the mode of the
@@ -401,8 +401,8 @@ and the tail are already computed.
401
401
 
402
402
  A reducer's only remaining timing decision is where its window opens, which is the one
403
403
  genuinely harness-shaped part: two interleave a tool into a single window outright
404
- (Antigravity, whose Step for the tool arrives and only a later `usage_metadata` Step cuts
405
- the message, and Codex, whose `_flush_message` window extends to the last item's
404
+ (Antigravity, whose Step for the tool arrives and only a later rise in the conversation's
405
+ billed usage cuts the message, and Codex, whose `_flush_message` window extends to the last item's
406
406
  `completed_at_ms`) while the other three tile the turn contiguously, so a call open at a
407
407
  boundary runs inside two windows. Central subtraction handles both without either reducer
408
408
  knowing which it is.
@@ -123,7 +123,7 @@ jobs:
123
123
 
124
124
  # PHASE 3: Security scanning
125
125
  - name: Security - Dependency vulnerabilities (pip-audit)
126
- run: .venv/bin/pip-audit --desc --skip-editable --ignore-vuln CVE-2026-4539 --ignore-vuln CVE-2026-3219 --ignore-vuln PYSEC-2025-183 # pygments 2.19.2 ReDoS + pip 26.0.1 tar/ZIP ambiguity + pyjwt 2.12.1 weak-encryption (disputed by supplier; key length is application-chosen); no fixes available on PyPI yet — revisit quarterly
126
+ run: .venv/bin/pip-audit --desc --skip-editable --ignore-vuln CVE-2026-4539 --ignore-vuln CVE-2026-3219 --ignore-vuln CVE-2026-49265 --ignore-vuln CVE-2026-49264 # pygments 2.19.2 ReDoS + pip 26.0.1 tar/ZIP ambiguity; no fixes available on PyPI yet — revisit quarterly. oauthlib 3.3.1 PKCE timing side channel + RevocationEndpoint JSONP callback injection: both server-side OAuth endpoints, unused here (transitive via azure-monitor exporter -> msrest); fix 4.0.0 is a major bump still inside the safe-chain minimum package age — revisit next month
127
127
 
128
128
  - name: Security - OSV vulnerability scan (osv-scanner)
129
129
  # Complements pip-audit: pip-audit queries the PyPI advisory DB;
@@ -2,6 +2,88 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.9 (2026-09-29)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **docker**: Mount plugins at /coder_eval/plugins/<i> and point the staged task there
10
+ ([#206](https://github.com/UiPath/coder_eval/pull/206),
11
+ [`03808c0`](https://github.com/UiPath/coder_eval/commit/03808c084cb28d72e5723a2e9fc30c714f398d14))
12
+
13
+ - **docker**: Mount plugins at /work/plugins/<i> and point the staged task there
14
+ ([#206](https://github.com/UiPath/coder_eval/pull/206),
15
+ [`03808c0`](https://github.com/UiPath/coder_eval/commit/03808c084cb28d72e5723a2e9fc30c714f398d14))
16
+
17
+ ### Chores
18
+
19
+ - **deps**: Bump pyjwt to 2.15.1 and ignore oauthlib CVE-2026-49265
20
+ ([#206](https://github.com/UiPath/coder_eval/pull/206),
21
+ [`03808c0`](https://github.com/UiPath/coder_eval/commit/03808c084cb28d72e5723a2e9fc30c714f398d14))
22
+
23
+ - **deps**: Ignore oauthlib CVE-2026-49264 and drop the stale pyjwt ignore
24
+ ([#206](https://github.com/UiPath/coder_eval/pull/206),
25
+ [`03808c0`](https://github.com/UiPath/coder_eval/commit/03808c084cb28d72e5723a2e9fc30c714f398d14))
26
+
27
+ ### Refactoring
28
+
29
+ - **docker**: Mount plugins under /work/plugins, not /coder_eval/plugins
30
+ ([#206](https://github.com/UiPath/coder_eval/pull/206),
31
+ [`03808c0`](https://github.com/UiPath/coder_eval/commit/03808c084cb28d72e5723a2e9fc30c714f398d14))
32
+
33
+
34
+ ## v0.12.8 (2026-09-29)
35
+
36
+ ### Bug Fixes
37
+
38
+ - Also delete context.json in-container (source_yaml leaked criteria)
39
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
40
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
41
+
42
+ - **anti-cheat**: Apply multi-model review findings M1/M2/M3 + doc drift
43
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
44
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
45
+
46
+ - **anti-cheat**: Apply review Low findings L1/L2/L3
47
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
48
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
49
+
50
+ - **antigravity**: Read token usage from the conversation, not the Step
51
+ ([#201](https://github.com/UiPath/coder_eval/pull/201),
52
+ [`101bb5c`](https://github.com/UiPath/coder_eval/commit/101bb5c85c5af97f8027388611dd70e7e7e0ecc8))
53
+
54
+ - **codex**: Record provider error notifications on the turn
55
+ ([#203](https://github.com/UiPath/coder_eval/pull/203),
56
+ [`894f742`](https://github.com/UiPath/coder_eval/commit/894f74282c8f32918cc995fb4b2517f8984c4ed2))
57
+
58
+ - **docker**: Close two driver:docker channels that leaked grading material to the agent
59
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
60
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
61
+
62
+ - **simulation**: Send the simulated user's utterance, not its tagged transcript
63
+ ([#204](https://github.com/UiPath/coder_eval/pull/204),
64
+ [`ffb9a81`](https://github.com/UiPath/coder_eval/commit/ffb9a8198a1af73904fabb0c8b3251a978351ab0))
65
+
66
+ ### Documentation
67
+
68
+ - **harness**: Log deferred Low findings from anti-cheat review
69
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
70
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
71
+
72
+ ### Features
73
+
74
+ - **lint**: 3/3 — CE065 flags eval material inside a skill dir
75
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
76
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
77
+
78
+ - **sandbox**: 1/3 — delete staged task.yaml in-container after load (anti-cheat)
79
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
80
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
81
+
82
+ - **sandbox**: 2/3 — allowlist tmpfs-mask of auto-mounted plugin trees
83
+ ([#179](https://github.com/UiPath/coder_eval/pull/179),
84
+ [`ddf63e9`](https://github.com/UiPath/coder_eval/commit/ddf63e9b356a6c40a83ca5771a3ffd3a1e8dfd68))
85
+
86
+
5
87
  ## v0.12.7 (2026-09-25)
6
88
 
7
89
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.12.7
3
+ Version: 0.12.9
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites.
5
5
  Project-URL: Homepage, https://coder-eval.com
6
6
  Project-URL: Repository, https://github.com/UiPath/coder_eval
@@ -25,7 +25,7 @@ inputs:
25
25
  version:
26
26
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
27
27
  required: false
28
- default: "0.12.7" # <-- kept in sync with releases by release.yml
28
+ default: "0.12.9" # <-- kept in sync with releases by release.yml
29
29
  extras:
30
30
  description: >-
31
31
  Comma-separated coder-eval extras (`codex`, `antigravity,litellm`), composed
@@ -339,6 +339,56 @@ If the task declares a `reference:` block, a throwaway **copy** of its directory
339
339
 
340
340
  See [Reference Solutions](TASK_DEFINITION_GUIDE.md#reference-solutions).
341
341
 
342
+ ### Two more passive-read anti-cheat blocks
343
+
344
+ These are `driver: docker` only. `driver: tempdir` shares the host uid and has no
345
+ filesystem isolation, so neither applies there (nor can — there is nothing to
346
+ mask). Both are defense-in-depth passive-read blocks, consistent with the
347
+ reference window's posture above; neither contains an adversarial agent.
348
+
349
+ - **The staged grading inputs are deleted after load.** The host stages the
350
+ post-override `TaskDefinition` (with `success_criteria`) at `/work/input/task.yaml`
351
+ **and** a `context.json` whose `source_yaml` is the raw task text — criteria
352
+ verbatim, both at the top level and inside every `config_lineage` entry — for the
353
+ in-container orchestrator to load once at startup. The agent runs in the same
354
+ container, so leaving *either* readable would hand it the grading answer key
355
+ (deleting only `task.yaml` leaves the identical criteria one file over in
356
+ `context.json`). The in-container entry point deletes **both** immediately after
357
+ they are consumed — `context.json` is parsed into memory in the command body and
358
+ `task.yaml` by `load_task`, both before the delete (gated on
359
+ `CODER_EVAL_IN_CONTAINER`). They are read exactly once — grading reads criteria
360
+ from the in-memory task, never from disk. The `/work/input` mount is therefore
361
+ read-write (a `:ro` mount rejects `rm` with EROFS). `prior.json` is kept: it is
362
+ read later on the regrade path, and a regrade runs no agent so it is not a leak.
363
+
364
+ - **Plugins mount at a fixed container path.** The `i`-th `agent.plugins[]` entry
365
+ is resolved on the host (a relative path against the task YAML's directory, `$VAR`
366
+ and `~` expanded) and mounted `:ro` at `/work/plugins/<i>`. The task YAML
367
+ staged into the container is rewritten to point at that path, so the in-container
368
+ agent loads the directory the host mounted, whatever form the authored path took
369
+ and whatever the container's cwd. (Before, the staged YAML kept the authored string:
370
+ a relative or `$VAR` path the container could not resolve loaded no skill, with only
371
+ a warning.) An entry that does not resolve to a host directory is neither mounted
372
+ nor rewritten. It sits under `/work`, so a `sandbox.docker.extra_mounts` destination
373
+ cannot shadow it (those are refused anywhere under `/work/`).
374
+
375
+ - **Auto-mounted plugin trees are default-deny masked.** An `agent.plugins[].path`
376
+ (at `/work/plugins/<i>`) or a `TemplateDirSource.path` that is itself a plugin
377
+ root (at its host path) is auto-mounted `:ro` so the plugin loads. Eval material colocated under that tree
378
+ as siblings of the skills dir — sibling task YAMLs, reference solutions, test
379
+ fixtures — would otherwise be readable. So the runner keeps the whole root
380
+ mounted but layers an empty `--tmpfs` over every child dir OUTSIDE the keep-set
381
+ (`.claude-plugin` + the manifest-declared skill dirs). Everything that is not
382
+ the plugin surface is masked by default, so an unknown or new eval layout can
383
+ never leak; `tests/`, `node_modules/`, and reference solutions are masked for
384
+ free. A root agent cannot `umount` a tmpfs (`CAP_SYS_ADMIN` is not in Docker's
385
+ default set), so this mask is *stronger* than the mode-000 reference window. Two
386
+ residuals the mask cannot cover — an eval def or reference COLOCATED inside a
387
+ skill dir (masking it would hide the skill), and a `task_id:` YAML **file** loose
388
+ at the plugin root (a tmpfs masks a directory, not a single file) — are caught by
389
+ lint rule CE068 (keep eval material out of skill dirs and off the plugin root;
390
+ put it under a sibling `tests/`).
391
+
342
392
  Inside the container, the entrypoint invokes `coder-eval _run-task-internal` (hidden subcommand), which loads the staged YAML + context, runs the standard in-process Orchestrator (driver auto-coerced back to `tempdir`), and writes `task.json` to the output mount. Host reads it and feeds the existing aggregation pipeline.
343
393
 
344
394
  A `result_kind` discriminator on `CriterionResult` ensures `ClassificationCriterionResult` subclasses survive the JSON round-trip — without it, host-side aggregation would silently lose `observed_label`/`expected_label`.
@@ -210,7 +210,10 @@ token/cost budget breach, which fires only after every criterion is already scor
210
210
  cache buckets, captured proxy-side on the LiteLLM open-weight backend and rendered
211
211
  by the evalboard as a per-call table; empty on every other
212
212
  backend), `num_turns`, `max_turns_exhausted`,
213
- `result_summary` (`{is_error, subtype, stop_reason, result}`), `crashed`,
213
+ `result_summary` (`{is_error, subtype, stop_reason, result}`), `provider_errors`
214
+ (`list[ProviderError]` — `{at, message, kind, http_status, will_retry, details}`, one
215
+ row per model-provider error the agent's own client reported, including errors it
216
+ retried itself; filled by the codex adapter, empty on other backends), `crashed`,
214
217
  `crash_reason`.
215
218
 
216
219
  > **Token invariant.** Summing the four token buckets across `messages`
@@ -67,8 +67,8 @@ All five harnesses can have tool execution inside a generation window, and it is
67
67
  subtracted out of every one of them — **once, centrally**, by
68
68
  `timing.py::subtract_tool_time`. No reducer does it itself; each
69
69
  publishes the raw window (see the two sections below). Every harness has the
70
- problem: Antigravity reports a `Step` for the tool and only a later
71
- `usage_metadata` `Step` cuts the message; Codex's message window is seeded from
70
+ problem: Antigravity reports a `Step` for the tool and only a later rise in
71
+ the conversation's billed usage cuts the message; Codex's message window is seeded from
72
72
  the first item's start and extended to the last item's completion; OpenCode, Pi
73
73
  and claude-code tile, each window opening where the previous one closed and
74
74
  running to the next, with every tool call in between running inside. In each the
@@ -559,8 +559,9 @@ Each harness finds the call boundary in its own stream (the table above):
559
559
  first item would let one tool of call N+1 act. A call that ran tools therefore
560
560
  opens the next call at its `tokenUsage`, since the results always go back to the
561
561
  model, and the cap fires before call N+1 can run anything.
562
- - **Antigravity** attaches `usage_metadata` to one step per call, and the next call
563
- opens with a MODEL step at a new `step_index`.
562
+ - **Antigravity** bills each call on the conversation's cumulative usage, not on a
563
+ step, so a rise in that total closes the call, and the next call opens with a MODEL
564
+ step at a new `step_index`.
564
565
  - **OpenCode** and **Pi** stream one `step_start` or `turn_start` per call.
565
566
  - **Delegate**'s SDK has no round-trip marker, and a tool-only reply streams only
566
567
  its tool call, with no text before it. So the next call opens when every tool the
@@ -0,0 +1,15 @@
1
+ # osv-scanner suppressions for advisories without an available fix.
2
+ #
3
+ # Mirrors the inline --ignore-vuln list passed to pip-audit in
4
+ # .github/workflows/pr-checks.yml so both scanners stay in sync. pip-audit
5
+ # accepts ignores as CLI flags; osv-scanner only reads them from this TOML.
6
+ # When an advisory is fixed upstream, drop the entry here AND remove the
7
+ # matching pip-audit flag in the same PR.
8
+
9
+ [[IgnoredVulns]]
10
+ id = "CVE-2026-49265"
11
+ reason = "oauthlib 3.3.1 PKCE timing side channel in the server-side code_challenge check, which coder-eval never runs (oauthlib is transitive via azure-monitor-opentelemetry-exporter -> msrest -> requests-oauthlib). The fix, 4.0.0, is a major bump still inside the safe-chain minimum package age; revisit next month."
12
+
13
+ [[IgnoredVulns]]
14
+ id = "GHSA-hj66-6f7g-4r5v"
15
+ reason = "CVE-2026-49264: oauthlib 3.3.1 RevocationEndpoint JSONP callback injection (only with enable_jsonp=True), a server-side OAuth endpoint coder-eval never runs (oauthlib is transitive via azure-monitor-opentelemetry-exporter -> msrest -> requests-oauthlib). The fix, 4.0.0, is a major bump still inside the safe-chain minimum package age; revisit next month."
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "coder-eval",
4
4
  "displayName": "Coder Eval",
5
- "version": "0.12.7",
5
+ "version": "0.12.9",
6
6
  "description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
7
7
  "author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
8
8
  "homepage": "https://coder-eval.com",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.12.7"
3
+ version = "0.12.9"
4
4
  description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -227,7 +227,7 @@ constraint-dependencies = [
227
227
  "langgraph>=1.0.10",
228
228
  "langsmith>=0.6.3",
229
229
  "orjson>=3.11.6",
230
- "pyjwt>=2.13.0",
230
+ "pyjwt>=2.14.0",
231
231
  "python-multipart>=0.0.31",
232
232
  "requests>=2.33.0",
233
233
  "starlette>=1.3.1",
@@ -305,6 +305,7 @@ external = [
305
305
  "CE064",
306
306
  "CE065",
307
307
  "CE066",
308
+ "CE068",
308
309
  ] # custom architectural lint rules (tests/lint/)
309
310
 
310
311
  [tool.ruff.lint.pylint]
@@ -1,3 +1,3 @@
1
1
  """coder_eval - A framework for evaluating AI coding agents."""
2
2
 
3
- __version__ = "0.12.7"
3
+ __version__ = "0.12.9"
@@ -24,7 +24,7 @@ _DEFAULT_PLUGIN_SKILLS_SUBDIR = "skills"
24
24
  _SKILL_FILE = "SKILL.md"
25
25
 
26
26
 
27
- def _manifest_skill_dirs(root: Path) -> list[Path]:
27
+ def manifest_skill_dirs(root: Path) -> list[Path]:
28
28
  """Skill directories a Claude-plugin root declares, in manifest order.
29
29
 
30
30
  Reads the ``skills`` field of ``<root>/.claude-plugin/plugin.json`` (a string
@@ -81,7 +81,7 @@ def _plugin_skill_dirs(
81
81
  hint,
82
82
  )
83
83
  continue
84
- candidates = [directory for directory in _manifest_skill_dirs(root) if directory.is_dir()]
84
+ candidates = [directory for directory in manifest_skill_dirs(root) if directory.is_dir()]
85
85
  # A path that is ALREADY a bare skills directory has no `skills/` subdir,
86
86
  # so use it as-is. Deliberately NOT a fallback for a root that HAS one.
87
87
  # Rationale: .claude/notes/agents.md § Skills, per harness
@@ -25,7 +25,7 @@ from collections.abc import Callable
25
25
  from contextlib import AsyncExitStack
26
26
  from datetime import datetime
27
27
  from pathlib import Path
28
- from typing import Any, ClassVar
28
+ from typing import Any, ClassVar, NamedTuple
29
29
 
30
30
  from coder_eval.agent import Agent, AgentState
31
31
  from coder_eval.agents._logging import PrefixedAdapter
@@ -152,6 +152,22 @@ def _enum_value(x: Any) -> Any:
152
152
  return getattr(x, "value", x)
153
153
 
154
154
 
155
+ class _UsageCounts(NamedTuple):
156
+ """The four Gemini token counts, named as ``google.antigravity.types.UsageMetadata`` names them."""
157
+
158
+ prompt_token_count: int = 0
159
+ cached_content_token_count: int = 0
160
+ candidates_token_count: int = 0
161
+ thoughts_token_count: int = 0
162
+
163
+ @classmethod
164
+ def of(cls, usage: Any) -> "_UsageCounts":
165
+ return cls(*((getattr(usage, f, 0) or 0) for f in cls._fields))
166
+
167
+ def minus(self, other: "_UsageCounts") -> "_UsageCounts":
168
+ return _UsageCounts(*(a - b for a, b in zip(self, other, strict=True)))
169
+
170
+
155
171
  def _to_token_usage(usage: Any, model: str | None) -> TokenUsage:
156
172
  """Map a ``google.antigravity.types.UsageMetadata`` to coder_eval ``TokenUsage``.
157
173
 
@@ -480,6 +496,7 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
480
496
  model=model,
481
497
  turn_start_time=turn_start_time,
482
498
  clock=clock,
499
+ cumulative_usage=lambda: self._sdk_agent.conversation.total_usage,
483
500
  max_turns=max_turns,
484
501
  )
485
502
 
@@ -677,10 +694,13 @@ class _AntigravityTurnState:
677
694
  agent's shared crash kernel builds ``pending_turn`` from ``collector``).
678
695
 
679
696
  Step-stream shape this consumes (observed): each ``step_index`` is yielded
680
- repeatedly through ACTIVE -> DONE transitions; ``usage_metadata`` lands once
681
- per generation on a DONE/terminal step (summing them == the turn total); a
682
- tool call carries a stable ``id`` and its result is folded into expanded
683
- ``args`` at DONE.
697
+ repeatedly through ACTIVE -> DONE transitions; a tool call carries a stable
698
+ ``id`` and its result is folded into expanded ``args`` at DONE.
699
+
700
+ Usage is NOT on the Step: the SDK accumulates it per model invocation on the
701
+ conversation, which ``cumulative_usage`` reads. Each rise since the last
702
+ reading is booked as one generation, and ``finalize`` books the remainder, so
703
+ the per-message buckets always sum to the turn total.
684
704
  """
685
705
 
686
706
  def __init__(
@@ -696,9 +716,12 @@ class _AntigravityTurnState:
696
716
  model: str,
697
717
  turn_start_time: float,
698
718
  clock: TurnClock,
719
+ cumulative_usage: Callable[[], Any],
699
720
  max_turns: int | None = None,
700
721
  ) -> None:
701
722
  self._agent = agent
723
+ self._cumulative_usage = cumulative_usage
724
+ self._usage_booked = _UsageCounts.of(cumulative_usage())
702
725
  self.emit = emit
703
726
  self.task_id = task_id
704
727
  self.turn_id = turn_id
@@ -815,13 +838,22 @@ class _AntigravityTurnState:
815
838
  self._blocks.append(ContentBlock(block_type="text", sequence=0, text=step.content))
816
839
 
817
840
  # Per-generation usage: fold into the turn total and cut an AssistantMessage.
818
- if step.usage_metadata is not None:
841
+ if self._book_new_usage():
819
842
  if not self._in_api_call:
820
843
  self.api_calls += 1
821
844
  self._in_api_call = False
822
- gen = _to_token_usage(step.usage_metadata, self.model)
823
- self.total_usage = self.total_usage + gen
824
- self._flush_generation(gen, getattr(step.usage_metadata, "thoughts_token_count", 0) or 0)
845
+
846
+ def _book_new_usage(self) -> bool:
847
+ """Book the usage accrued since the last reading as one generation; False if none."""
848
+ now = _UsageCounts.of(self._cumulative_usage())
849
+ accrued = now.minus(self._usage_booked)
850
+ if not any(accrued):
851
+ return False
852
+ self._usage_booked = now
853
+ gen = _to_token_usage(accrued, self.model)
854
+ self.total_usage = self.total_usage + gen
855
+ self._flush_generation(gen, accrued.thoughts_token_count)
856
+ return True
825
857
 
826
858
  def _handle_tool_call(self, call: Any, step: Any, done: bool, sstatus: Any, call_index: int) -> None:
827
859
  raw_name = _enum_value(call.name)
@@ -995,7 +1027,8 @@ class _AntigravityTurnState:
995
1027
  )
996
1028
  )
997
1029
 
998
- # Flush any trailing blocks not yet attached to a generation (no usage).
1030
+ # Usage that landed after the last Step, then any blocks it did not carry.
1031
+ self._book_new_usage()
999
1032
  if self._blocks:
1000
1033
  self._flush_generation(TokenUsage(), 0)
1001
1034
 
@@ -11,6 +11,7 @@ import tempfile
11
11
  import time
12
12
  from collections.abc import Callable
13
13
  from datetime import datetime
14
+ from enum import Enum
14
15
  from pathlib import Path
15
16
  from typing import Any, ClassVar, NamedTuple
16
17
  from urllib.parse import urlparse
@@ -33,6 +34,7 @@ from coder_eval.models import (
33
34
  CommandTelemetry,
34
35
  ContentBlock,
35
36
  DirectRoute,
37
+ ProviderError,
36
38
  SystemPromptSemantics,
37
39
  TokenUsage,
38
40
  TranscriptMessage,
@@ -274,6 +276,34 @@ _LOGIN_PROFILE_NAMES = (".bash_profile", ".profile", ".zshenv", ".zprofile", ".z
274
276
  _ZSH_PROFILE_NAMES = frozenset({".zshenv", ".zprofile", ".zshrc"})
275
277
 
276
278
 
279
+ def _provider_error_from(payload: Any) -> ProviderError:
280
+ """Map a codex ``ErrorNotification`` payload onto a ``ProviderError``.
281
+
282
+ ``codexErrorInfo`` is either a bare category (enum) or a one-key object whose
283
+ key is the category and whose value may carry ``httpStatusCode``.
284
+ """
285
+ error = getattr(payload, "error", None)
286
+ kind: str | None = None
287
+ http_status: int | None = None
288
+ info = getattr(getattr(error, "codex_error_info", None), "root", None)
289
+ if isinstance(info, Enum):
290
+ kind = str(info.value)
291
+ elif hasattr(info, "model_dump"):
292
+ dumped = info.model_dump(by_alias=True, mode="json")
293
+ if len(dumped) == 1:
294
+ kind, body = next(iter(dumped.items()))
295
+ if isinstance(body, dict) and isinstance(body.get("httpStatusCode"), int):
296
+ http_status = body["httpStatusCode"]
297
+ return ProviderError(
298
+ at=datetime.now(),
299
+ message=str(getattr(error, "message", "") or ""),
300
+ kind=kind,
301
+ http_status=http_status,
302
+ will_retry=bool(getattr(payload, "will_retry", False)),
303
+ details=getattr(error, "additional_details", None),
304
+ )
305
+
306
+
277
307
  def _get_item_root(notification: Any) -> Any:
278
308
  """Extract the typed item root from a Codex SDK notification.
279
309
 
@@ -338,6 +368,7 @@ class _CodexTurnState:
338
368
  # Live pump scratch (set during streaming).
339
369
  self.turn_result: Any = None
340
370
  self.latest_token_usage: Any = None
371
+ self.provider_errors: list[ProviderError] = []
341
372
  self.agent_message_chunks: list[str] = []
342
373
  # Sequence per executable item, assigned at item/started and reused at
343
374
  # item/completed via this id->seq map.
@@ -546,8 +577,19 @@ class _CodexTurnState:
546
577
  self.on_token_usage_updated(notification)
547
578
  elif method == "turn/completed":
548
579
  return self.on_turn_completed(notification)
580
+ elif method == "error":
581
+ self.on_error(notification)
549
582
  return False
550
583
 
584
+ def on_error(self, notification: Any) -> None:
585
+ """Record a provider error; codex retries a stalled stream silently otherwise."""
586
+ err = _provider_error_from(notification.payload)
587
+ self.provider_errors.append(err)
588
+ self._agent._log.warning(
589
+ f"provider error (will_retry={err.will_retry}, kind={err.kind}, "
590
+ + f"http_status={err.http_status}): {err.message}"
591
+ )
592
+
551
593
  def on_item_started(self, notification: Any) -> None:
552
594
  """Emit ToolStartEvent + record the tool_use block for every tool-like item."""
553
595
  root = _get_item_root(notification)
@@ -765,6 +807,7 @@ class _CodexTurnState:
765
807
  assistant_turn_count=1,
766
808
  messages=self.messages,
767
809
  num_turns=max(self.api_calls, 1),
810
+ provider_errors=list(self.provider_errors),
768
811
  crashed=crashed,
769
812
  crash_reason=crash_reason,
770
813
  max_turns_exhausted=status is AgentEndStatus.MAX_TURNS_EXHAUSTED,
@@ -17,6 +17,7 @@ from __future__ import annotations
17
17
  import asyncio
18
18
  import contextlib
19
19
  import logging
20
+ import os
20
21
  from pathlib import Path
21
22
  from typing import Any
22
23
 
@@ -45,6 +46,17 @@ from coder_eval.path_utils import PRIOR_RESULT_FILENAME
45
46
  logger = logging.getLogger(__name__)
46
47
 
47
48
 
49
+ def _scrub_staged_inputs(task_yaml: Path, context_json: Path) -> None:
50
+ """Delete the staged ``task.yaml`` and ``context.json`` once loaded, inside a container only.
51
+
52
+ Both carry the task's ``success_criteria``, and the agent runs in this same container.
53
+ ``prior.json`` is left for the regrade path, which reads it later and runs no agent.
54
+ """
55
+ if os.environ.get(IN_CONTAINER_ENV) == "1":
56
+ task_yaml.unlink(missing_ok=True)
57
+ context_json.unlink(missing_ok=True)
58
+
59
+
48
60
  def heartbeat_is_alive(current: str, last_counter: str, current_mtime: float, last_mtime: float) -> bool:
49
61
  """True when the heartbeat shows a fresh signal of life.
50
62
 
@@ -176,6 +188,7 @@ def run_task_internal_command(
176
188
  # `task_file` is then pointed under the task_dir mount, so the `TASK_DIR` the
177
189
  # Orchestrator exposes to `run_command` criteria resolves there, not /work/input.
178
190
  task, _ = load_task(task_yaml)
191
+ _scrub_staged_inputs(task_yaml, context_json)
179
192
  # The path below is never re-read; it only seeds Orchestrator's TASK_DIR.
180
193
  runtime_task_file = task_dir / "task.yaml" if task_dir.is_dir() else task_yaml
181
194