coder-eval 0.12.16__tar.gz → 0.12.17__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 (865) hide show
  1. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/harness-candidates.md +8 -12
  2. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/agents.md +8 -0
  3. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/isolation.md +197 -6
  4. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/lint-rules.md +9 -10
  5. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/orchestration.md +73 -9
  6. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/persistence.md +1 -2
  7. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/pr-checks.yml +1 -1
  8. {coder_eval-0.12.16 → coder_eval-0.12.17}/CHANGELOG.md +250 -0
  9. {coder_eval-0.12.16 → coder_eval-0.12.17}/CLAUDE.md +3 -3
  10. {coder_eval-0.12.16 → coder_eval-0.12.17}/PKG-INFO +2 -2
  11. {coder_eval-0.12.16 → coder_eval-0.12.17}/action.yml +1 -1
  12. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DATASETS.md +4 -3
  13. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DIALOG_MODE.md +87 -11
  14. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DOCKER_ISOLATION.md +264 -1
  15. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/EXTENDING.md +8 -0
  16. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/REPORT_SCHEMA.md +18 -4
  17. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/TASK_DEFINITION_GUIDE.md +73 -13
  18. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/USER_GUIDE.md +16 -12
  19. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/DELEGATE.md +1 -1
  20. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/HARNESS_PARITY.md +37 -22
  21. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/06-use-docker-isolation.md +1 -1
  22. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/harness-badge.test.tsx +4 -5
  23. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/harness-selector.test.tsx +2 -2
  24. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/harness-badge.tsx +5 -16
  25. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/scribe/page.tsx +1 -1
  26. coder_eval-0.12.17/osv-scanner.toml +7 -0
  27. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  28. {coder_eval-0.12.16 → coder_eval-0.12.17}/pyproject.toml +6 -2
  29. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/__init__.py +1 -1
  30. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate_agent.py +4 -2
  31. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/evaluate_command.py +29 -20
  32. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/execute_command.py +2 -1
  33. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_command.py +21 -33
  34. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_task_internal_command.py +67 -2
  35. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/agent_judge.py +7 -10
  36. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/llm_judge.py +8 -16
  37. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/system_one_judge.py +20 -4
  38. coder_eval-0.12.17/src/coder_eval/egress_proxy.py +476 -0
  39. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/__init__.py +2 -1
  40. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/executor.py +5 -3
  41. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/judge.py +16 -0
  42. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_context.py +134 -5
  43. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_persistence.py +4 -11
  44. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/formatting.py +2 -6
  45. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/packager.py +6 -0
  46. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/docker_runner.py +239 -67
  47. coder_eval-0.12.17/src/coder_eval/isolation/egress.py +613 -0
  48. coder_eval-0.12.17/src/coder_eval/isolation/errors.py +20 -0
  49. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/__init__.py +8 -2
  50. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/agent_config.py +48 -0
  51. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/enums.py +6 -8
  52. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/experiment.py +1 -2
  53. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/limits.py +10 -0
  54. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/results.py +42 -55
  55. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/sandbox.py +123 -2
  56. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/tasks.py +124 -15
  57. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/telemetry.py +1 -20
  58. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/batch.py +21 -20
  59. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/experiment.py +17 -0
  60. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/regrade.py +65 -25
  61. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/task_loader.py +5 -1
  62. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestrator.py +331 -193
  63. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/path_utils.py +9 -0
  64. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/helpers.py +1 -1
  65. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/html.py +15 -30
  66. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/run_record.py +1 -1
  67. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/__init__.py +10 -0
  68. coder_eval-0.12.17/src/coder_eval/simulation/scripted_user.py +38 -0
  69. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/termination.py +8 -3
  70. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/collector.py +2 -0
  71. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/README.md +1 -0
  72. coder_eval-0.12.17/tasks/docker_egress_probe/docker_egress_grading.yaml +27 -0
  73. coder_eval-0.12.17/tasks/docker_egress_probe/docker_egress_probe.yaml +75 -0
  74. coder_eval-0.12.17/tasks/docker_egress_probe/egress_probe.py +258 -0
  75. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +8 -3
  76. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +13 -3
  77. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/README.md +18 -5
  78. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +1 -0
  79. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +1 -0
  80. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +1 -0
  81. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +1 -0
  82. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +1 -0
  83. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +1 -0
  84. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +1 -0
  85. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +1 -0
  86. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +1 -0
  87. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +1 -0
  88. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +1 -0
  89. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +1 -0
  90. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +1 -0
  91. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +1 -0
  92. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +1 -0
  93. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +1 -0
  94. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -0
  95. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +1 -0
  96. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -0
  97. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +1 -0
  98. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +1 -0
  99. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -0
  100. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +1 -0
  101. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_a_tool_call.json +1 -0
  102. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_b_max_turns_cut.json +1 -0
  103. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_c_error_frame_crash.json +1 -0
  104. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_d_orphaned_tool.json +1 -0
  105. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_e_tool_only_call_crosses_cap.json +1 -0
  106. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_f_batched_tools_in_sequence.json +1 -0
  107. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +1 -0
  108. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +1 -0
  109. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +1 -0
  110. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +1 -0
  111. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +1 -0
  112. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +1 -0
  113. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +1 -0
  114. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +1 -0
  115. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +1 -0
  116. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +1 -0
  117. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +1 -0
  118. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce060_message_id_declared.py +3 -5
  119. coder_eval-0.12.17/tests/test_bai_judge_review_regressions.py +140 -0
  120. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cost_accounting_paths.py +9 -17
  121. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_criterion_result_round_trip.py +2 -44
  122. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_custom_lint.py +3 -2
  123. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_dataset_expansion.py +42 -0
  124. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent.py +62 -1
  125. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_detached_grading_boundaries.py +32 -52
  126. coder_eval-0.12.17/tests/test_detached_grading_watchdog.py +54 -0
  127. coder_eval-0.12.17/tests/test_dialog_judge_provenance.py +241 -0
  128. coder_eval-0.12.17/tests/test_docker_egress_config.py +117 -0
  129. coder_eval-0.12.17/tests/test_docker_egress_runner.py +759 -0
  130. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_litellm_env.py +7 -9
  131. coder_eval-0.12.17/tests/test_egress_grading_phase.py +174 -0
  132. coder_eval-0.12.17/tests/test_egress_proxy.py +395 -0
  133. coder_eval-0.12.17/tests/test_egress_targets.py +205 -0
  134. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_event_collector.py +1 -0
  135. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_evaluate_loop.py +282 -5
  136. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_resolver.py +28 -0
  137. coder_eval-0.12.17/tests/test_grading_cli_failure_boundaries.py +258 -0
  138. coder_eval-0.12.17/tests/test_grading_container_failure.py +128 -0
  139. coder_eval-0.12.17/tests/test_grading_execution_completion.py +298 -0
  140. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_packager.py +6 -0
  141. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_persistence.py +0 -25
  142. coder_eval-0.12.17/tests/test_judge_retry_attempt_labels.py +476 -0
  143. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_characterization.py +22 -0
  144. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_models.py +0 -40
  145. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_regrade.py +16 -0
  146. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_html.py +23 -30
  147. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_retry_logic_comprehensive.py +18 -0
  148. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_models.py +11 -0
  149. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_orchestrator.py +132 -25
  150. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_resolver.py +24 -0
  151. coder_eval-0.12.17/tests/test_scripted_dialog.py +408 -0
  152. coder_eval-0.12.17/tests/test_scripted_user.py +44 -0
  153. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_seed_from_prior_result.py +5 -0
  154. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_config.py +121 -0
  155. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_termination.py +42 -0
  156. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_trials.py +53 -0
  157. coder_eval-0.12.17/tests/test_skillsbench_3d_scan_calc_verifier.py +83 -0
  158. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_orchestrator.py +2 -0
  159. {coder_eval-0.12.16 → coder_eval-0.12.17}/uv.lock +172 -131
  160. coder_eval-0.12.16/osv-scanner.toml +0 -15
  161. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review-full.md +0 -0
  162. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  163. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review.md +0 -0
  164. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-create-plan.md +0 -0
  165. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-implement-plan.md +0 -0
  166. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-review.md +0 -0
  167. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/README.md +0 -0
  168. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/context-window.md +0 -0
  169. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/contracts.md +0 -0
  170. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/permissions.md +0 -0
  171. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/reporting.md +0 -0
  172. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/timing.md +0 -0
  173. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/axes.md +0 -0
  174. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/multi-model-review.md +0 -0
  175. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/review-rubric.md +0 -0
  176. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/run-layout.md +0 -0
  177. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/workflows/cr-axis.js +0 -0
  178. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/workflows/cr-parent.js +0 -0
  179. {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude-plugin/marketplace.json +0 -0
  180. {coder_eval-0.12.16 → coder_eval-0.12.17}/.env.example +0 -0
  181. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/CODEOWNERS +0 -0
  182. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  183. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  184. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  185. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/actionlint.yaml +0 -0
  186. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/code_review.md +0 -0
  187. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/dependabot.yml +0 -0
  188. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/pages-stub/index.html +0 -0
  189. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  190. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/harbor_e2e.py +0 -0
  191. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/release_notes.py +0 -0
  192. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/claude-pr-review.yml +0 -0
  193. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/codeql.yml +0 -0
  194. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/conventional-commits.yml +0 -0
  195. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/docker-publish.yml +0 -0
  196. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/docs.yml +0 -0
  197. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/harbor-e2e.yml +0 -0
  198. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/publish-testpypi.yml +0 -0
  199. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/release.yml +0 -0
  200. {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/verify-published-action.yml +0 -0
  201. {coder_eval-0.12.16 → coder_eval-0.12.17}/.gitignore +0 -0
  202. {coder_eval-0.12.16 → coder_eval-0.12.17}/.pre-commit-config.yaml +0 -0
  203. {coder_eval-0.12.16 → coder_eval-0.12.17}/.python-version +0 -0
  204. {coder_eval-0.12.16 → coder_eval-0.12.17}/ADOPTERS.md +0 -0
  205. {coder_eval-0.12.16 → coder_eval-0.12.17}/CODE_OF_CONDUCT.md +0 -0
  206. {coder_eval-0.12.16 → coder_eval-0.12.17}/CONTRIBUTING.md +0 -0
  207. {coder_eval-0.12.16 → coder_eval-0.12.17}/LICENSE +0 -0
  208. {coder_eval-0.12.16 → coder_eval-0.12.17}/Makefile +0 -0
  209. {coder_eval-0.12.16 → coder_eval-0.12.17}/NOTICE +0 -0
  210. {coder_eval-0.12.16 → coder_eval-0.12.17}/README.md +0 -0
  211. {coder_eval-0.12.16 → coder_eval-0.12.17}/SECURITY.md +0 -0
  212. {coder_eval-0.12.16 → coder_eval-0.12.17}/comparison.md +0 -0
  213. {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/Dockerfile +0 -0
  214. {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/Dockerfile.runtime +0 -0
  215. {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/coder_eval_entrypoint.sh +0 -0
  216. {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  217. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/AB_EXPERIMENTS.md +0 -0
  218. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/CI_GATE.md +0 -0
  219. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/PLUGIN.md +0 -0
  220. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/ANTIGRAVITY.md +0 -0
  221. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/CLAUDE_CODE.md +0 -0
  222. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/CODEX.md +0 -0
  223. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/OPENCODE.md +0 -0
  224. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/PI.md +0 -0
  225. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/assets/hero.gif +0 -0
  226. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/comparison.md +0 -0
  227. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/index.md +0 -0
  228. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/llms.txt +0 -0
  229. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/01-first-evaluation.md +0 -0
  230. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/02-ci-pipeline.md +0 -0
  231. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/03-evalboard-local.md +0 -0
  232. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/04-writing-a-task.md +0 -0
  233. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/05-comparing-models.md +0 -0
  234. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  235. {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/README.md +0 -0
  236. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/.gitignore +0 -0
  237. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/README.md +0 -0
  238. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  239. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  240. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/col-help.tsx +0 -0
  241. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  242. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/harness-selector.tsx +0 -0
  243. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/scroll-table.tsx +0 -0
  244. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/search-box.tsx +0 -0
  245. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/skeleton.tsx +0 -0
  246. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/unit-toggle.tsx +0 -0
  247. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/version-list.tsx +0 -0
  248. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  249. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_lib/source-param.ts +0 -0
  250. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  251. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  252. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  253. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/daily-chart.tsx +0 -0
  254. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  255. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/harness-legend.tsx +0 -0
  256. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/harness-series.ts +0 -0
  257. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/tag-rail.tsx +0 -0
  258. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  259. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  260. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/window-summary.tsx +0 -0
  261. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/download/route.ts +0 -0
  262. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/file/route.ts +0 -0
  263. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  264. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/refresh/route.ts +0 -0
  265. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/error.tsx +0 -0
  266. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/globals.css +0 -0
  267. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/icon.png +0 -0
  268. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/layout.tsx +0 -0
  269. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/loading.tsx +0 -0
  270. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/page.tsx +0 -0
  271. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  272. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/page.tsx +0 -0
  273. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  274. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/scribe/run-table.tsx +0 -0
  275. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  276. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/actions.ts +0 -0
  277. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/page.tsx +0 -0
  278. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/trends-view.tsx +0 -0
  279. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  280. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/page.tsx +0 -0
  281. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  282. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/next-env.d.ts +0 -0
  283. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/next.config.mjs +0 -0
  284. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/package.json +0 -0
  285. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/pnpm-lock.yaml +0 -0
  286. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/postcss.config.mjs +0 -0
  287. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/antigravity.png +0 -0
  288. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/claude-code.png +0 -0
  289. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/codex.png +0 -0
  290. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/pi.png +0 -0
  291. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/uipath.png +0 -0
  292. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/tailwind.config.ts +0 -0
  293. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/tsconfig.json +0 -0
  294. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/vitest.config.ts +0 -0
  295. {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/vitest.setup.ts +0 -0
  296. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/default.yaml +0 -0
  297. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/early-stop-ab.yaml +0 -0
  298. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/model-comparison.yaml +0 -0
  299. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/permissions-smoke.yaml +0 -0
  300. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/plugin-comparison.yaml +0 -0
  301. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/prompt-mutations-example.yaml +0 -0
  302. {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/smoke_variants.yaml +0 -0
  303. {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/README.md +0 -0
  304. {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/cost_logger.py +0 -0
  305. {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/litellm-config.yaml +0 -0
  306. {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/start-litellm.sh +0 -0
  307. {coder_eval-0.12.16 → coder_eval-0.12.17}/mkdocs.yml +0 -0
  308. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/README.md +0 -0
  309. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/cli-setup.md +0 -0
  310. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/criteria.md +0 -0
  311. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/repo-layout.md +0 -0
  312. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/run-layout.md +0 -0
  313. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/task-rubric.md +0 -0
  314. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  315. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  316. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  317. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  318. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  319. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  320. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  321. {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  322. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/check_commit_msg.sh +0 -0
  323. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/README.md +0 -0
  324. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/antigravity.json +0 -0
  325. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/claude-code.json +0 -0
  326. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/codex.json +0 -0
  327. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/opencode.json +0 -0
  328. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/pi.json +0 -0
  329. {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/decompose_run.py +0 -0
  330. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/.gitattributes +0 -0
  331. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agent.py +0 -0
  332. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/__init__.py +0 -0
  333. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/_logging.py +0 -0
  334. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/_skills.py +0 -0
  335. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/antigravity_agent.py +0 -0
  336. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/claude_code_agent.py +0 -0
  337. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/codex_agent.py +0 -0
  338. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate/.gitignore +0 -0
  339. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate/package.json +0 -0
  340. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/noop_agent.py +0 -0
  341. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/opencode_agent.py +0 -0
  342. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/pi_agent.py +0 -0
  343. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/registry.py +0 -0
  344. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/watchdog.py +0 -0
  345. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/analysis.py +0 -0
  346. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/argv_match.py +0 -0
  347. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/__init__.py +0 -0
  348. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/console.py +0 -0
  349. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/evaluate_target.py +0 -0
  350. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/export_command.py +0 -0
  351. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/harbor_command.py +0 -0
  352. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/plan_command.py +0 -0
  353. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/report_command.py +0 -0
  354. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_helpers.py +0 -0
  355. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/utils.py +0 -0
  356. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/config.py +0 -0
  357. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/__init__.py +0 -0
  358. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  359. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/base.py +0 -0
  360. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/classification_match.py +0 -0
  361. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/cli_called.py +0 -0
  362. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/command_executed.py +0 -0
  363. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  364. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_check.py +0 -0
  365. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_contains.py +0 -0
  366. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_exists.py +0 -0
  367. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  368. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/json_check.py +0 -0
  369. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/reference_comparison.py +0 -0
  370. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/run_command.py +0 -0
  371. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/skill_triggered.py +0 -0
  372. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/uipath_eval.py +0 -0
  373. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/durations.py +0 -0
  374. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/agent.py +0 -0
  375. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/budget.py +0 -0
  376. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/categories.py +0 -0
  377. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/categorization.py +0 -0
  378. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/checker_misuse.py +0 -0
  379. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/reference.py +0 -0
  380. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/retry.py +0 -0
  381. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/timeout.py +0 -0
  382. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/__init__.py +0 -0
  383. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/checker.py +0 -0
  384. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  385. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  386. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  387. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_models.py +0 -0
  388. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  389. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_usage.py +0 -0
  390. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/sub_agent.py +0 -0
  391. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/summaries.py +0 -0
  392. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  393. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  394. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/fs_permissions.py +0 -0
  395. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/__init__.py +0 -0
  396. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/agent.py +0 -0
  397. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/agent_paths.py +0 -0
  398. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_emit.py +0 -0
  399. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  400. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_models.py +0 -0
  401. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/experiment_packager.py +0 -0
  402. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/portability.py +0 -0
  403. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/reward.py +0 -0
  404. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/invocation_log.py +0 -0
  405. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/__init__.py +0 -0
  406. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/eval_material.py +0 -0
  407. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/litellm_cost.py +0 -0
  408. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/logging_config.py +0 -0
  409. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/cli_match.py +0 -0
  410. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/container_context.py +0 -0
  411. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/container_paths.py +0 -0
  412. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/criteria.py +0 -0
  413. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/judge.py +0 -0
  414. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/judge_defaults.py +0 -0
  415. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/merge_strategy.py +0 -0
  416. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/mutations.py +0 -0
  417. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/routing.py +0 -0
  418. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/system_one.py +0 -0
  419. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/templates.py +0 -0
  420. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/__init__.py +0 -0
  421. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/config.py +0 -0
  422. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/config_merge.py +0 -0
  423. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/early_stop.py +0 -0
  424. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/evaluation.py +0 -0
  425. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/overrides.py +0 -0
  426. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/run_limits.py +0 -0
  427. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  428. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/plugins.py +0 -0
  429. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/pricing.py +0 -0
  430. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/py.typed +0 -0
  431. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/__init__.py +0 -0
  432. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/experiment.py +0 -0
  433. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/junit.py +0 -0
  434. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/markdown.py +0 -0
  435. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/__init__.py +0 -0
  436. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  437. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/tags.yaml +0 -0
  438. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/result_metrics.py +0 -0
  439. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/sandbox.py +0 -0
  440. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/__init__.py +0 -0
  441. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/ast_similarity.py +0 -0
  442. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/complexity.py +0 -0
  443. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/quality.py +0 -0
  444. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/signature_similarity.py +0 -0
  445. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/similarity.py +0 -0
  446. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/token_similarity.py +0 -0
  447. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/user_simulator.py +0 -0
  448. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/utterance.py +0 -0
  449. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/stats.py +0 -0
  450. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/__init__.py +0 -0
  451. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/callbacks.py +0 -0
  452. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/events.py +0 -0
  453. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/renderers.py +0 -0
  454. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/wire.py +0 -0
  455. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/telemetry.py +0 -0
  456. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/timing.py +0 -0
  457. {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/utils.py +0 -0
  458. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agentless_smoke_test.yaml +0 -0
  459. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/antigravity_hello_world.yaml +0 -0
  460. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  461. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_hello_world.yaml +0 -0
  462. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  463. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  464. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_subagent_test.yaml +0 -0
  465. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  466. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_hello_world.yaml +0 -0
  467. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_parallel_commands.yaml +0 -0
  468. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  469. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_skills_test.yaml +0 -0
  470. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_string_utils.yaml +0 -0
  471. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_subagent_test.yaml +0 -0
  472. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  473. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/subagent_merge_sort.yaml +0 -0
  474. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  475. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  476. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/byod_smoke_test.yaml +0 -0
  477. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dataset_example.yaml +0 -0
  478. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/datasets/sentiment.jsonl +0 -0
  479. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  480. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/delegate/hello_date_delegate.yaml +0 -0
  481. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  482. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  483. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  484. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  485. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  486. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  487. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  488. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  489. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  490. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/fibonacci_with_template.yaml +0 -0
  491. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/hello_date.yaml +0 -0
  492. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/inline_starter_example.yaml +0 -0
  493. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/internal/session_resumption.yaml +0 -0
  494. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_smoke.yaml +0 -0
  495. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  496. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  497. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  498. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  499. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  500. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/opencode_smoke_test.yaml +0 -0
  501. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/pi_smoke_test.yaml +0 -0
  502. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  503. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/record_cli_responses.yaml +0 -0
  504. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/run_limits/max_turns_cap.yaml +0 -0
  505. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/run_limits/turn_timeout.yaml +0 -0
  506. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  507. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  508. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  509. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  510. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  511. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  512. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  513. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  514. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  515. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  516. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  517. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  518. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  519. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  520. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/sentiment_classification.yaml +0 -0
  521. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_agent_judge.yaml +0 -0
  522. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_budget_exceeded.yaml +0 -0
  523. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  524. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_llm_judge.yaml +0 -0
  525. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_negative_path.yaml +0 -0
  526. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_system_one_judge.yaml +0 -0
  527. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_task_timeout.yaml +0 -0
  528. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_variants.yaml +0 -0
  529. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/test_sandbox.yaml +0 -0
  530. {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/token_check.yaml +0 -0
  531. {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/byod_smoke_test/Dockerfile +0 -0
  532. {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/README.md +0 -0
  533. {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/src/main.py +0 -0
  534. {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/tests/test_main.py +0 -0
  535. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/__init__.py +0 -0
  536. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_bracket_clock.py +0 -0
  537. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_container_contract.py +0 -0
  538. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/__init__.py +0 -0
  539. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/codex_rollouts.py +0 -0
  540. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/__init__.py +0 -0
  541. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  542. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  543. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  544. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  545. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/delegate_fixtures.py +0 -0
  546. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  547. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  548. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  549. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  550. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  551. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  552. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  553. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  554. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  555. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  556. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  557. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  558. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  559. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/live_criteria.py +0 -0
  560. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  561. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  562. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  563. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  564. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  565. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  566. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  567. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/timing_union_cases.json +0 -0
  568. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_path_helpers.py +0 -0
  569. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/conftest.py +0 -0
  570. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/__init__.py +0 -0
  571. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  572. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  573. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  574. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/mock_agent.py +0 -0
  575. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  576. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  577. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  578. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  579. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/text_stub_agent.py +0 -0
  580. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  581. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  582. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  583. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  584. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/__init__.py +0 -0
  585. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/action_docs.py +0 -0
  586. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/agent_roster_parity.py +0 -0
  587. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/dead_config_fields.py +0 -0
  588. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_env_parity.py +0 -0
  589. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_examples.py +0 -0
  590. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_indexes.py +0 -0
  591. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_schema_parity.py +0 -0
  592. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/generated.py +0 -0
  593. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/live_verdict_contract.py +0 -0
  594. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/plugin_manifest_parity.py +0 -0
  595. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/plugin_reference.py +0 -0
  596. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/pricing_mirror.py +0 -0
  597. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/prose_budget.py +0 -0
  598. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/pyright_config.py +0 -0
  599. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/__init__.py +0 -0
  600. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/_layers.py +0 -0
  601. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/_model_ctor.py +0 -0
  602. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/base.py +0 -0
  603. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  604. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  605. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  606. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  607. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  608. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  609. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  610. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  611. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  612. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  613. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  614. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  615. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  616. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  617. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  618. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  619. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  620. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  621. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  622. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  623. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  624. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  625. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  626. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  627. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  628. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  629. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  630. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  631. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  632. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  633. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  634. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_agent_timing_access.py +0 -0
  635. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  636. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  637. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_silent_except.py +0 -0
  638. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  639. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  640. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  641. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  642. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/open_explicit_encoding.py +0 -0
  643. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  644. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/register_criterion_required.py +0 -0
  645. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  646. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  647. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/runner.py +0 -0
  648. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/violation.py +0 -0
  649. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/workflow_outputs.py +0 -0
  650. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_action_inputs.py +0 -0
  651. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_action_version_pin.py +0 -0
  652. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent.py +0 -0
  653. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_no_timing_fields.py +0 -0
  654. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_optional_type.py +0 -0
  655. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_registry_dispatch.py +0 -0
  656. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_sdk_decoupling.py +0 -0
  657. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_context_window.py +0 -0
  658. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_golden_master.py +0 -0
  659. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_judge_criterion.py +0 -0
  660. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_telemetry.py +0 -0
  661. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_telemetry_advanced.py +0 -0
  662. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_timeout.py +0 -0
  663. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agentless.py +0 -0
  664. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_antigravity_agent.py +0 -0
  665. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_emit.py +0 -0
  666. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_hydrate.py +0 -0
  667. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_models.py +0 -0
  668. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byoa_plugin.py +0 -0
  669. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byoa_plugin_live.py +0 -0
  670. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byod_feature.py +0 -0
  671. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_check_all_async.py +0 -0
  672. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_checker_logging.py +0 -0
  673. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_classification_match.py +0 -0
  674. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_claude_settings_enforcement_live.py +0 -0
  675. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cleanup_preservation_guard.py +0 -0
  676. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_backend_flag.py +0 -0
  677. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_called_criterion.py +0 -0
  678. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_empty_glob.py +0 -0
  679. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_match_parity.py +0 -0
  680. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_sdk_options.py +0 -0
  681. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_set_overrides.py +0 -0
  682. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_telemetry.py +0 -0
  683. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_type_flag.py +0 -0
  684. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_code_review_bugs.py +0 -0
  685. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent.py +0 -0
  686. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent_live.py +0 -0
  687. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent_unit.py +0 -0
  688. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_token_mapping.py +0 -0
  689. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_executed.py +0 -0
  690. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_statistics.py +0 -0
  691. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_telemetry_result_data.py +0 -0
  692. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_commands_efficiency.py +0 -0
  693. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_lineage.py +0 -0
  694. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_merge_engine.py +0 -0
  695. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_precedence.py +0 -0
  696. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_container_context.py +0 -0
  697. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_continuous_scoring.py +0 -0
  698. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_debug_logging.py +0 -0
  699. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_config.py +0 -0
  700. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_live.py +0 -0
  701. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_registration.py +0 -0
  702. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_detached_grading_guards.py +0 -0
  703. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_build_failure.py +0 -0
  704. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_container_death.py +0 -0
  705. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_mounts.py +0 -0
  706. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_stream_limit.py +0 -0
  707. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_wildcard_env.py +0 -0
  708. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_workdir_live.py +0 -0
  709. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_driver_resolver.py +0 -0
  710. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_durations.py +0 -0
  711. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_early_stop.py +0 -0
  712. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_error_handling.py +0 -0
  713. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_eval_material.py +0 -0
  714. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_command.py +0 -0
  715. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_format_harbor.py +0 -0
  716. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_target.py +0 -0
  717. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluator.py +0 -0
  718. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_command.py +0 -0
  719. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_format_harbor.py +0 -0
  720. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_cli.py +0 -0
  721. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_loader.py +0 -0
  722. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_models.py +0 -0
  723. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_reports.py +0 -0
  724. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_runner.py +0 -0
  725. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_file_check.py +0 -0
  726. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_file_contains_scoring.py +0 -0
  727. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_formatting.py +0 -0
  728. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_git_clone_failure.py +0 -0
  729. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_glob_paths_in_file_criteria.py +0 -0
  730. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_agent.py +0 -0
  731. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_e2e_fixtures.py +0 -0
  732. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_experiment_packager.py +0 -0
  733. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_export_golden.py +0 -0
  734. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_portability.py +0 -0
  735. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_reward.py +0 -0
  736. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_heartbeat_watchdog.py +0 -0
  737. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_ignore_patterns_negation.py +0 -0
  738. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_image_from_dockerfiles.py +0 -0
  739. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_image_skew_refusal.py +0 -0
  740. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_integration.py +0 -0
  741. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_json_check.py +0 -0
  742. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_anthropic.py +0 -0
  743. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_bedrock.py +0 -0
  744. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_burn_in_live.py +0 -0
  745. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_context_builder.py +0 -0
  746. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_litellm.py +0 -0
  747. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_models.py +0 -0
  748. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_system_one.py +0 -0
  749. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_lint_no_top_level_run_limits.py +0 -0
  750. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_lint_runner.py +0 -0
  751. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_config.py +0 -0
  752. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_cost.py +0 -0
  753. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_cost_logger.py +0 -0
  754. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_judge_live.py +0 -0
  755. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_route.py +0 -0
  756. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_llm_judge_criterion.py +0 -0
  757. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_log_tail_buffer.py +0 -0
  758. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_logging.py +0 -0
  759. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_logging_isolation.py +0 -0
  760. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_strategy_annotations.py +0 -0
  761. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_unification.py +0 -0
  762. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_mutations.py +0 -0
  763. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_new_criteria.py +0 -0
  764. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_node_env_config.py +0 -0
  765. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_opencode_agent.py +0 -0
  766. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_optional_dependencies.py +0 -0
  767. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator.py +0 -0
  768. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator_error_log_tail.py +0 -0
  769. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator_telemetry.py +0 -0
  770. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_overrides_engine.py +0 -0
  771. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_parallel.py +0 -0
  772. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_path_utils.py +0 -0
  773. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_agent.py +0 -0
  774. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_agent_config.py +0 -0
  775. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_smoke_task.py +0 -0
  776. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plan_command.py +0 -0
  777. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plugin_processing.py +0 -0
  778. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plugins.py +0 -0
  779. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_post_run.py +0 -0
  780. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pr_review_workflow.py +0 -0
  781. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pre_run.py +0 -0
  782. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_preservation_mode.py +0 -0
  783. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pricing_mirror.py +0 -0
  784. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pricing_registry.py +0 -0
  785. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_prose_budget.py +0 -0
  786. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_prose_budget_commands.py +0 -0
  787. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_comparison_scoring.py +0 -0
  788. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_evaluator.py +0 -0
  789. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_missing_file.py +0 -0
  790. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_models.py +0 -0
  791. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_permissions.py +0 -0
  792. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_registry.py +0 -0
  793. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_release_notes.py +0 -0
  794. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_replicate_stats.py +0 -0
  795. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_report_command.py +0 -0
  796. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports.py +0 -0
  797. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_junit.py +0 -0
  798. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_package.py +0 -0
  799. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_resolve_task_files.py +0 -0
  800. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_result_metrics.py +0 -0
  801. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_resume.py +0 -0
  802. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_route_seam_exhaustiveness.py +0 -0
  803. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_routing.py +0 -0
  804. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_command_junit.py +0 -0
  805. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_command_stdout.py +0 -0
  806. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_helpers.py +0 -0
  807. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_metrics.py +0 -0
  808. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_record.py +0 -0
  809. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_summary_rebuild.py +0 -0
  810. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_task_internal.py +0 -0
  811. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_runtime_tool_versions.py +0 -0
  812. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox.py +0 -0
  813. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_adopt.py +0 -0
  814. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_layer_builder.py +0 -0
  815. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_optional.py +0 -0
  816. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_record_cli.py +0 -0
  817. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_security.py +0 -0
  818. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_symlink_preservation.py +0 -0
  819. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_templates.py +0 -0
  820. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_venv_live.py +0 -0
  821. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_scorers.py +0 -0
  822. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_scoring_quality.py +0 -0
  823. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sdk_option_classification.py +0 -0
  824. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_integration.py +0 -0
  825. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_skill_triggered.py +0 -0
  826. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_stats.py +0 -0
  827. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_stats_nonfinite.py +0 -0
  828. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_agent_integration.py +0 -0
  829. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_batch.py +0 -0
  830. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_callbacks.py +0 -0
  831. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_cli.py +0 -0
  832. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_events.py +0 -0
  833. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_orchestrator.py +0 -0
  834. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_renderers.py +0 -0
  835. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_wire.py +0 -0
  836. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sub_agent_runner.py +0 -0
  837. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_success_criterion_union.py +0 -0
  838. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_suite_rollup.py +0 -0
  839. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_summaries.py +0 -0
  840. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_system_one_judge.py +0 -0
  841. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_system_one_judge_live.py +0 -0
  842. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_tags.py +0 -0
  843. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_task_definition_unknown_fields.py +0 -0
  844. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_teardown_interrupt.py +0 -0
  845. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_telemetry.py +0 -0
  846. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_template_env_expansion.py +0 -0
  847. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_threshold_enforcement.py +0 -0
  848. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_batch.py +0 -0
  849. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_categorization.py +0 -0
  850. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_exceptions.py +0 -0
  851. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_models.py +0 -0
  852. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_close_window.py +0 -0
  853. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_identity_contract.py +0 -0
  854. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_union_parity.py +0 -0
  855. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_token_usage.py +0 -0
  856. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_uipath_eval.py +0 -0
  857. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_ungraded_reporting.py +0 -0
  858. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_user_simulator.py +0 -0
  859. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_utils.py +0 -0
  860. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_utterance_extraction.py +0 -0
  861. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_variant_prompt_file.py +0 -0
  862. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_verdict_tool.py +0 -0
  863. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_verify_published_workflow.py +0 -0
  864. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_watchdog.py +0 -0
  865. {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_yaml_migration.py +0 -0
@@ -545,18 +545,10 @@ divergences, so the deferred-work record is one place. Measurements in
545
545
  as tool execution. Pinned by `unbounded_cases` in
546
546
  `tests/_fixtures/timing_union_cases.json`, which both suites replay.
547
547
 
548
- - [ ] **Pre-existing, surfaced by this work's final review: `TokenUsage._adopt_legacy_input_tokens`
549
- double-counts the cache buckets.** The validator copies a legacy record's
550
- full-prompt `input_tokens` straight into `uncached_input_tokens`, and the
551
- computed `input_tokens` then adds `cache_creation` + `cache_read` again. A
552
- legacy record with `input_tokens=1000`, `cache_creation=200`, `cache_read=150`
553
- reloads as 1350 prompt tokens and bills 1000 at the uncached rate instead of
554
- 650. Affects every report, budget check and detached regrade over a
555
- pre-split run that used prompt caching. NOT touched by the timing work
556
- (token accounting was explicitly out of its scope) and not a guardrail
557
- candidate — a real bug needing its own change, with a decision about
558
- whether legacy records can be distinguished from current ones at all.
559
- Caught in: timing-capture final review (gpt-5.6-sol).
548
+ - [x] ~~**Pre-existing, surfaced by this work's final review: `TokenUsage._adopt_legacy_input_tokens`
549
+ double-counts the cache buckets.**~~ **DONE.** The validator is deleted. Every run
550
+ uploaded in the last 30 days stores `uncached_input_tokens`, so no pre-split record
551
+ is read. Caught in: timing-capture final review (gpt-5.6-sol).
560
552
 
561
553
  - [x] ~~No golden-corpus assertion of the four-bucket identity.~~ **DONE.** The
562
554
  fixture clocks were unified (`_rebase_notifications` / `_rebase_lines` shift
@@ -1032,3 +1024,7 @@ re-derive from scratch.
1032
1024
  stayed at 1 so `max_turns` never tripped — all silently, with `make verify` green.
1033
1025
  A static rule cannot see an SDK field go dead; a live-telemetry smoke (one real turn,
1034
1026
  assert `token_usage` is non-empty) in the harness-bump checklist would have.
1027
+ - [ ] Validation regexes anchored with `$` and applied with `.match` (not `.fullmatch`) accept a trailing newline — `"evil.com\n:443"` passed `normalize_egress_target` until it moved to `fullmatch`. A lint rule needs to tell a validation regex from a search regex; not cheap — caught in the network: llm_only Phase 1 review.
1028
+ - [ ] `raise X(...) from exc` where `exc` came from parsing an env/URL value leaks the value through `__cause__` in a traceback (urlsplit put a URL password in its port error). Needs data-flow from env reads; not cheap — caught in the network: llm_only Phase 3 review.
1029
+ - [ ] `await asyncio.to_thread(subprocess.run, ...)` that CREATES a resource inside a try whose `finally` removes it: a cancel leaves the worker thread running, so teardown races the create and leaks it (fixed in `isolation/egress.py` by `_run_to_completion`). Detecting "creates a resource" is not mechanical — caught in the network: llm_only Phase 4 review.
1030
+ - [ ] The single-`asyncio.shield` join in `fs_permissions.set_permissions` does not survive a SECOND cancel of the caller; `isolation/egress._run_to_completion` loops on the shield. Promote that helper to a shared module and use it in both places — caught in the network: llm_only Phase 4 review.
@@ -92,6 +92,14 @@ The record is BUILT before `_end_turn_ok()` on every harness: a failure inside t
92
92
  reduction is a failed turn, and `_end_turn_ok` would already have cleared the rollback
93
93
  flag `discard_pending_turn` needs.
94
94
 
95
+ `run_limits.max_turn_retries` bounds replay of the entire `communicate()` call at
96
+ the shared orchestrator wrapper. Benchmarks can set it to zero when replay would
97
+ change the measured trajectory. Unset preserves the existing error-category
98
+ policy. The executor's total-attempt cap includes the first call and is checked
99
+ before backoff, after the failure callback drains the partial. A larger cap cannot
100
+ make a rejected error category retryable. Agent/provider internal retries and
101
+ setup retries keep their own policies.
102
+
95
103
  Three exit paths converge on `finalize`, and it is idempotent on all of them, because the
96
104
  protocol allows EXACTLY ONE `AgentEndEvent` per `communicate()`: the clean return, the
97
105
  crash/timeout kernel, and the outer `except` that can fire *after* a normal finalize (a
@@ -23,9 +23,10 @@
23
23
  written and never read. `tests/test_seed_from_prior_result.py` partitions every
24
24
  `EvaluationResult` field as CARRIED or RECOMPUTED and fails closed on a new one, and
25
25
  asserts the two `_select_gate()` call sites. A prior status that
26
- `FinalStatus.is_execution_fact` (TIMEOUT / ERROR / BUILD_FAILED / the budget stops) is
27
- **preserved**, never overwritten: grading may only move `NOT_GRADED` to
28
- SUCCESS/FAILURE, since it neither repeated nor observed the agent phase.
26
+ `EvaluationResult.has_execution_failure` (TIMEOUT / execution or legacy ERROR /
27
+ BUILD_FAILED / the budget stops) is **preserved**, never overwritten. An explicitly
28
+ grading-origin ERROR can instead be repaired, with its incident retained in history;
29
+ see orchestration.md § Grading incidents and execution facts.
29
30
  **`MAX_TURNS_EXHAUSTED` is deliberately NOT one of them — anywhere**.
30
31
  `_EXECUTION_FACT_STATUSES` maps it to `False`, and the table and the chain that reads
31
32
  it must agree: it shipped as `True` while `_terminal_status`'s own docstring argued
@@ -516,9 +517,10 @@ the `~/.claude` copy the target can be an arbitrary path outside the staging tre
516
517
  `writable=False` is not cosmetic. The container only ever *reads* and `chmod`s the
517
518
  reference copy, so withholding the write bit keeps `_verify_reference_integrity` from being
518
519
  the sole guard against tampering during the gaps between windows. The task-dir copy is
519
- read-only for the same reason: criteria read fixtures there, nothing legitimately writes
520
- them, and withholding `o+w` keeps an agent from rewriting the expectations it is graded
521
- against. The `~/.claude` copy IS writable — the CLI rewrites settings and state in place,
520
+ read-only too: criteria read fixtures there and nothing legitimately writes them. That
521
+ does not stop an agent from rewriting the expectations it is graded against: root keeps
522
+ `CAP_FOWNER` and can chmod the copy back, and `_verify_reference_integrity` does not cover
523
+ it. The `~/.claude` copy IS writable — the CLI rewrites settings and state in place,
522
524
  `copytree` preserves host modes, and `~/.claude` is routinely 0700 with 0600 files, which
523
525
  without DAC_OVERRIDE is unreadable to the container, so the agent cannot authenticate.
524
526
 
@@ -1036,3 +1038,192 @@ separator a value beginning with `-` is parsed as an OPTION rather than a reposi
1036
1038
  (`--upload-pack=…` runs a command of the caller's choosing). That URL is task-authored, and
1037
1039
  since `evaluate <run_dir>` rebuilds the task from a shareable run directory it is no longer
1038
1040
  necessarily the operator's own string.
1041
+
1042
+ ## The egress sidecar (network: llm_only)
1043
+
1044
+ `network: llm_only` puts the task container on a per-task `--internal` network whose only exit
1045
+ is a proxy sidecar that forwards to an exact `host:port` allowlist. The plan and its spike log
1046
+ are in `c/2026-10-01-docker-no-internet-egress.md` (not committed); the facts that shaped the
1047
+ design are below.
1048
+
1049
+ ### Why an explicit proxy, not a transparent one
1050
+
1051
+ Harbor's design (a `gost` sidecar, nftables `redirect`, SNI sniffing, the task in the sidecar's
1052
+ netns with `NET_ADMIN`) also catches tools that ignore proxy env. Phase 0 found no built-in
1053
+ harness that needs it: Claude Code (Bun native binary), Codex (Rust reqwest), Antigravity (Go
1054
+ `ProxyFromEnvironment`) and Pi (undici `EnvHttpProxyAgent` with `NODE_USE_ENV_PROXY=1`) all
1055
+ honour `HTTPS_PROXY`. An explicit proxy needs no capability, no third-party image and no SNI
1056
+ parser, and a tool that ignores it has no route, so it fails closed. iptables inside the task
1057
+ container was rejected because it needs `NET_ADMIN` in the agent's own container, which lets the
1058
+ agent undo it.
1059
+
1060
+ ### Why a per-task network
1061
+
1062
+ A shared internal network lets task A use task B's sidecar (and its allowlist) and reach task
1063
+ B's ports. One network per task costs one address pool each: a default Docker Desktop ran out at
1064
+ the 30th network (`all predefined address pools have been fully subnetted`), which is why the
1065
+ error names `--max-parallel` and `default-address-pools`.
1066
+
1067
+ ### Why inhibit_ipv4 and ip_forward=0
1068
+
1069
+ On native Linux a default `--internal` bridge still holds a gateway IP on the host, and the task
1070
+ container reached every host service bound on `0.0.0.0` through it (dockerd 20.10, 24 and 29,
1071
+ both firewall backends; on 20.10 and 24 also `docker0` and the host NIC). The
1072
+ `com.docker.network.bridge.inhibit_ipv4=true` option removes the gateway; the sidecar then takes
1073
+ the `.1` address and the embedded DNS alias still works. `gateway_mode_ipv4=isolated` was
1074
+ rejected: Docker 24 ignores it silently. Docker Desktop never showed the hole.
1075
+ `--sysctl net.ipv4.ip_forward=0` on the sidecar is defence in depth: Docker enables forwarding in
1076
+ the sidecar's netns, so a task container with `NET_ADMIN` could try to route through it. No
1077
+ config field grants the task container run-time capabilities, and the measured route did not
1078
+ reach the internet, but the sysctl costs nothing.
1079
+
1080
+ ### Why a black-hole DNS server and --ipv6=false
1081
+
1082
+ The spikes ran on dind, which has no loopback resolver, so they could not show CVE-2024-29018:
1083
+ on daemons before 26.0 / 25.0.5 / 23.0.11 the embedded DNS forwards an internal network's
1084
+ queries from the host namespace when the host resolver is loopback (systemd-resolved), which is a
1085
+ DNS tunnel out. The task container's `--dns 192.0.2.1` (TEST-NET-1, never routed) keeps the
1086
+ embedded DNS answering the sidecar alias while every external forward goes nowhere.
1087
+ `inhibit_ipv4` removes only the IPv4 gateway, so `--ipv6=false` keeps a daemon whose
1088
+ `default-network-opts` enable IPv6 from giving the internal bridge an IPv6 gateway. IPv6
1089
+ link-local reach to a host service was not measured.
1090
+
1091
+ `NET_RAW` is dropped from the task container for the same reason: with raw sockets an agent could
1092
+ write frames for the bridge's own MAC address and reach a host service over UDP without the
1093
+ sidecar. That path was not measured; the cap drop removes it at no cost, since no tool needs raw
1094
+ sockets under `llm_only`.
1095
+
1096
+ ### Why the sidecar log is a separate, atomically written file
1097
+
1098
+ The first version appended the sidecar log to `docker.log` after the container exited. That file
1099
+ is in the run directory, which is bind-mounted writable into the container at the SAME path, so
1100
+ the agent could replace it with a symlink to a host file (for example a shell rc file) and get a
1101
+ line it chose (`DENY $(cmd):443 CONNECT` passes the visible-ASCII check) appended there by the
1102
+ host. Container stdout could also forge `ALLOW` / `DENY` lines in it. The log is now `egress.log`,
1103
+ written once by `write_text_atomic`, whose `os.replace` replaces a planted symlink instead of
1104
+ following it. `BAD` lines carry only the method and length, because a refused target can hold
1105
+ credentials in its userinfo or query.
1106
+
1107
+ ### Why the framework image and a bind-mounted module
1108
+
1109
+ The sidecar image is the framework image, never the task image: a task image is task-authored and
1110
+ may be a runtime-kit image with a different Python. The proxy code is NOT taken from the image:
1111
+ the host bind-mounts its own `egress_proxy.py` read-only, so the code under test is the boundary
1112
+ that runs and image skew cannot change it. That is also why the module is stdlib-only (five
1113
+ imports, guarded by a test): the image only supplies `python3`.
1114
+
1115
+ ### Why the sidecar watches the heartbeat
1116
+
1117
+ A host SIGKILL skips every `finally`, and so does a SIGTERM (a CI cancel, `timeout`, systemd):
1118
+ coder-eval has no SIGTERM-to-cancel bridge, and `fs_permissions` re-kills with the default action.
1119
+ The task container already exits on a stale host heartbeat;
1120
+ the sidecar reads the same file through a single-file `:ro` bind (Docker Desktop VirtioFS saw
1121
+ every in-place counter write) and stops itself with the same counter-or-mtime rule as
1122
+ `heartbeat_is_alive`. It has no `--rm`, so a crashed or stale-stopped sidecar keeps its log until
1123
+ teardown reads it; `docker network rm` works with a stopped container still attached, so a later
1124
+ prune needs no ordering. The watchdog returns from `serve` instead of calling `os._exit`, because
1125
+ CE052 gates process-lethal calls on `IN_CONTAINER_ENV`, which a stdlib-only module cannot import.
1126
+
1127
+ The heartbeat stops the sidecar but cannot remove it or its network, and each leaked network holds
1128
+ one of the daemon's address pools (about 29 on a default Docker Desktop). A few cancelled parallel
1129
+ runs then fail every `network create`, for coder-eval and for anything else on that daemon. So every
1130
+ egress setup first prunes egress-labelled stopped containers and unused networks older than
1131
+ `RECLAIM_MIN_AGE`. Prune never removes a running container or a network in use, and the age spares a
1132
+ concurrent setup between `network create` and `start`. A SIGTERM-to-cancel bridge was not added: the
1133
+ prune also covers SIGKILL, and a process-wide handler would change shutdown for every driver.
1134
+
1135
+ ### Why a refused grading host does not change the status
1136
+
1137
+ A grader that cannot reach a host it needs (an `apt-get` mirror, PyPI) fails its criterion, and
1138
+ the row reads as an ordinary FAILURE: an agent miss that is really the grader's. Only `egress.log`
1139
+ showed it. So after a graded run the host reads the sidecar log from Docker (not the run
1140
+ directory's copy, which the container can write), takes the `DENY` lines after `PHASE grading` (or
1141
+ all of them for a container that only grades), and records the hosts in
1142
+ `environment_info["egress_denied_in_grading"]` as one comma-separated string, which the report
1143
+ environment tables render as-is.
1144
+
1145
+ Turning such a FAILURE into an ERROR does not work. A DENY does not prove the grader needed the
1146
+ host: the probe task's criteria and any no-internet task's criteria are refused on purpose, so a
1147
+ real leak would read as a grader error with advice to allowlist `example.com`; an `agent_judge` can
1148
+ use a network tool on one run and not the next; and a process the agent left running is refused
1149
+ under the same rule. An ERROR written by the host is also an execution fact decided outside the
1150
+ orchestrator, so `evaluate` would not re-grade it and `task.html` would keep the FAILURE. Errors
1151
+ count as misses in the pass rate, so the rewrite would buy only an error count. The row keeps its
1152
+ status, and the host writes the hosts through the same `TASK_JSON_TRANSCRIPT_EXCLUDE` serializer
1153
+ the orchestrator uses.
1154
+
1155
+ `GRADING_DENIAL_NOISE` drops the hosts the judge CLIs call and do not need (§ Expected DENY lines
1156
+ in docs/DOCKER_ISOLATION.md), so they are not recorded on every judged row.
1157
+
1158
+ ### Why every docker call runs to completion
1159
+
1160
+ `_docker` runs `subprocess.run` in a worker thread, and cancelling the await does not stop the
1161
+ thread. A Ctrl-C during `docker create` once let teardown run `docker rm -f` before the create
1162
+ finished, leaking a created-but-never-started sidecar that no heartbeat would ever stop. So every
1163
+ call is joined across any number of cancels (`_run_to_completion`) before the cancel propagates,
1164
+ and teardown is joined the same way.
1165
+
1166
+ ### The log line format is a security boundary
1167
+
1168
+ `docker.log` is the only evidence the boundary leaves, and operators grep it for
1169
+ `^(ALLOW|DENY|FAIL)`. A request line with a control or non-ASCII byte is refused before anything is
1170
+ logged, because a lone `\n` in a method once forged a separate `ALLOW` line.
1171
+
1172
+ ### Why the allowlist follows the model callers, not the forwarded env
1173
+
1174
+ The first version allowed the API backend's hosts for every agent and the host of every forwarded
1175
+ `*_URL` variable. The real runs showed the cost: a Claude task could reach the Azure
1176
+ `CODEX_BASE_URL` host, and a Codex, Antigravity or Pi task could reach `api.anthropic.com`,
1177
+ because those variables are on the default passthrough list and the default backend is `direct`.
1178
+ Each host was a model provider, but none was needed. So the backend's hosts are added only for a
1179
+ component that uses `API_BACKEND` (`uses_api_backend` on the agent config, an enabled simulator,
1180
+ an `llm_judge` / `agent_judge` criterion), and a URL variable counts only where its owner reads it
1181
+ (`LITELLM_BASE_URL` for the litellm backend, `CODEX_BASE_URL` in `CodexAgentConfig.egress_hosts`).
1182
+ Any other host is explicit in `egress_allowlist`.
1183
+
1184
+ ### Why grading switches the sidecar in place
1185
+
1186
+ Graders often install their own test dependencies (SkillsBench test scripts run `apt-get`, the
1187
+ `astral.sh` uv installer and `uvx` from PyPI). With one allowlist for both phases those hosts are
1188
+ open to the agent as well, and `github.com`, which the uv installer needs, is where public
1189
+ benchmark solutions live. So grading may widen the allowlist, never narrow it.
1190
+
1191
+ Grading in a second container (the detached-grade path) was rejected: only the workspace crosses
1192
+ over, and the known equivalence gaps in § Two known equivalence gaps already score real rows 0.000
1193
+ for state outside it. The switch therefore happens in the same container, as in Harbor, at the
1194
+ two grading sites that run after the agent is finished (the single-shot loop and the post-failure
1195
+ path). The dialog loop is refused at load, because its criteria run between turns and a one-way
1196
+ switch would leave the agent the grading network for the rest of the dialog.
1197
+
1198
+ The phase boundary is known only inside the container, so the in-container run asks through a
1199
+ request file in the run directory and waits for the host's answer in an ack file. The host, not
1200
+ the container, talks to the proxy: `docker exec` into the sidecar reaches a control listener on
1201
+ the sidecar's own loopback, which no other netns can reach, and the proxy confirms before the
1202
+ host answers. The ack is written with `write_text_atomic` because the run directory is writable
1203
+ from the container.
1204
+
1205
+ This is not a boundary against an agent that targets it. The agent is root in the same
1206
+ container, so it can write the request file early, and a background process it started keeps
1207
+ running into grading. Both are the same class as the deliberate re-chmod the anti-cheat window
1208
+ leaves open. The `PHASE grading` line in `egress.log` separates the two phases' traffic.
1209
+
1210
+ Every graded `llm_only` run switches, including one with no grading allowlist: there the switch
1211
+ adds nothing and only writes the `PHASE grading` line that § Why a refused grading host makes the
1212
+ row ERROR reads. Such a switch is best-effort, because a failure only loses that report.
1213
+
1214
+ Grading-only hosts are checked at setup with `probe --direct` (a TCP connection from the sidecar),
1215
+ not through the proxy, because the proxy does not allow them yet.
1216
+
1217
+ ### What Phase 0 measured
1218
+
1219
+ - Every built-in harness in the image and every judge route (`llm_judge`, `agent_judge`,
1220
+ litellm with aiohttp) works through the proxy with an exact host set.
1221
+ - Claude Code on Bedrock calls the control plane `bedrock.<region>.amazonaws.com` at every start;
1222
+ it is allowed so the CLI behaves as under `bridge`. `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`
1223
+ does not remove that call, and on direct its Datadog `DENY` did not slow the CLI, so it is not set.
1224
+ - Claude Code OAuth refresh goes to `platform.claude.com` (binary string `TOKEN_URL`), which is on
1225
+ the direct backend list because `agent_judge` runs the CLI too.
1226
+ - `LITELLM_LOCAL_MODEL_COST_MAP=True` costs no latency either way (the `403` is immediate); it is set
1227
+ to remove one `DENY` per process and a network-dependent cost map.
1228
+ - busybox `wget` sends absolute-form `GET https://…` to a proxy instead of `CONNECT`; the proxy
1229
+ answers `400` with a `BAD … absolute-form https (use CONNECT)` line rather than originate TLS.
@@ -714,16 +714,15 @@ None else self.open_start_ms)` collapse to one instant whenever `open_end_ms` is
714
714
 
715
715
  An identity invariant, which is why it is its own id rather than a second arm of
716
716
  CE058/CE059, both of which are about timing. Antigravity omitted the kwarg, so the field
717
- defaulted to `None` on every message it ever recorded, and the evalboard — which groups
718
- assistant emissions by `message_id` and falls back to a `SAME_EMISSION_GAP_MS` wall-clock
719
- gap when either side lacks one — collapsed a whole turn's generations into ONE timeline
720
- row as soon as the harness's generation windows became contiguous (the gap is then exactly
721
- 0 ms, always). Nothing failed: the consumer SUMS the group, so the totals and the
722
- reconciliation invariant stayed right, and the golden snapshots had ratified the `null` on
723
- the day they were written — a snapshot is regenerated from whatever the code currently
724
- does, so it catches a later change and never an initial omission. The damage was not
725
- confined to the timeline, which is why "only granularity is lost" was the wrong way to
726
- describe it: a grouped emission is one API call to the evalboard's thinking-cost
717
+ defaulted to `None` on every message it ever recorded, and the evalboard — which then
718
+ grouped assistant emissions by `message_id`, else by a 100 ms wall-clock gap — collapsed a
719
+ whole turn's generations into ONE timeline row as soon as the harness's generation windows
720
+ became contiguous (the gap is then exactly 0 ms, always). Nothing failed: the consumer
721
+ SUMS the group, so the totals and the reconciliation invariant stayed right, and the
722
+ golden snapshots had ratified the `null` on the day they were written — a snapshot is
723
+ regenerated from whatever the code currently does, so it catches a later change and never
724
+ an initial omission. The damage was not confined to the timeline, which is why "only
725
+ granularity is lost" was the wrong way to describe it: a grouped emission is one API call to the evalboard's thinking-cost
727
726
  simulator, whose prompt-cache cascade is quadratic in that count, so a single-shot
728
727
  Antigravity run had every cascade coefficient pinned at zero; the `Messages` count and the
729
728
  10 s slow-generation bar were per-turn too. Deriving the constructor set from each
@@ -50,9 +50,10 @@
50
50
  path. Three things are refused rather than degraded: `--junit-xml` (a report of
51
51
  verdicts, and there are none — though `reports/junit.py` still emits `<skipped>` for
52
52
  an ungraded row it encounters), `--allow-host-grading` (it decides how an ungraded row
53
- is GRADED, and `execute` grades nothing), and simulation tasks (their
54
- turn-continuation logic reads criteria results, so an ungraded dialog would silently
55
- change its own stopping behavior). `stop_early:` blocks are inert under `execute` for
53
+ is GRADED, and `execute` grades nothing), and simulation tasks with an LLM-simulated
54
+ user (their turn-continuation logic reads criteria results, so an ungraded dialog would
55
+ silently change its own stopping behavior). A scripted dialog reads none, so `execute`
56
+ accepts it. `stop_early:` blocks are inert under `execute` for
56
57
  the same reason the kill switch exists: the full trajectory is the deliverable.
57
58
  Motivating consumer: an external harness (Harbor / Terminal-Bench 2.0) that builds its
58
59
  own container, calls coder-eval as the agent, and grades with its own tests.
@@ -86,6 +87,40 @@ produces is under isolation.md § Detached grading and `Sandbox.adopt`).
86
87
  `tests/test_seed_from_prior_result.py` pins the status in a test of its own, apart from
87
88
  the loop over the real execution facts.
88
89
 
90
+ ### Grading incidents and execution facts
91
+
92
+ `FinalStatus.is_execution_fact` is deliberately conservative and context-free.
93
+ `EvaluationResult.has_execution_failure` is the result-aware predicate: only an
94
+ explicit `ERROR` with `error_phase: grading` can be replaced by a new verdict.
95
+ Unknown legacy ERROR, TIMEOUT, build and budget outcomes remain execution facts.
96
+ No error-message matching or transcript inference is used.
97
+
98
+ Execution limits are settled immediately after each recorded turn, before grading.
99
+ The limit error is raised after grading returns, preserving partial-credit results.
100
+ A grading crash cannot hide the already-settled execution fact. A real task watchdog
101
+ keeps its phase: a fresh run times out execution, while a detached grading attempt
102
+ times out grading. A checker merely raising a timeout or budget exception is not a
103
+ watchdog or an agent limit.
104
+
105
+ Grading sites wrap failures in one typed error. Reference-integrity failures pass
106
+ through unchanged. A per-turn dialog grade that prevents the remaining execution
107
+ writes an execution-phase ERROR; a completed single-shot or end-only grade writes
108
+ a repairable grading-phase ERROR. No dialog telemetry heuristic is needed to decide
109
+ which one a new record means.
110
+
111
+ Current failure details remain in the primary error fields. Secondary and repaired
112
+ grading incidents belong in `error_history`. A failed detached grade does not write
113
+ an authoritative result, transcript or HTML verdict: its caller appends the incident
114
+ to a deep copy of the immediate prior row and writes that selected row once. The
115
+ first execute audit copy remains immutable and is never used as a rollback source.
116
+ The Docker path may serialize a failed attempt to its private scratch transport;
117
+ its explicit incident marker is consumed before any authoritative write or fold-back.
118
+
119
+ Explicit grading ERROR rows owe a grade even if a partial vector or zero score was
120
+ recorded. Otherwise resume eligibility and scoring keep their existing semantics:
121
+ a graded empty vector scores zero, and execute leaves the score unset. No additional
122
+ execution-error rows are automatically scheduled because their vector is empty.
123
+
89
124
  ### The four grading sites
90
125
 
91
126
  `grade=False` is checked in exactly four places, and they do not behave alike:
@@ -95,11 +130,13 @@ the loop over the real execution facts.
95
130
  2. **The single-shot loop** stops after capturing the trajectory. Returning False keeps
96
131
  `FinalStatus` off SUCCESS and the status chain turns it into NOT_GRADED. The
97
132
  reference-integrity check is skipped too — it protects a grade that is not happening.
98
- 3. **The dialog loop** RAISES, and is unreachable today because `execute` rejects
99
- simulation tasks at the CLI: the dialog reads criteria results to decide whether to
100
- keep talking, so an ungraded dialog would silently change its own stopping behavior.
101
- An empty-list "defensive no-op" here would be worse than a refusal — both callers go
102
- straight on to the gate, which treats an empty criteria list as a vacuous pass.
133
+ 3. **The dialog loop** checks criteria only on a graded run. Its end-of-dialog and
134
+ budget-gate checks are skipped when ungraded, so a scripted dialog finalizes
135
+ NOT_GRADED. The per-turn check still RAISES, and is unreachable today because
136
+ `execute` rejects LLM-simulated tasks at the CLI: that dialog reads criteria results to
137
+ decide whether to keep talking, so an ungraded run would silently change its own
138
+ stopping behavior. An empty-list "defensive no-op" there would be worse than a
139
+ refusal — the gate treats an empty criteria list as a vacuous pass.
103
140
  4. **The diagnostics path** records nothing: a `not_evaluated` vector would imply criteria
104
141
  we were supposed to run and could not.
105
142
 
@@ -632,10 +669,37 @@ unchanged.
632
669
  § Gate selection is fired-only — so `result.early_stop` is never assigned here and an armed
633
670
  simulation task gates strict-AND on a possibly truncated trajectory.
634
671
 
635
- `execute` rejects simulation tasks at the CLI, because the loop reads criteria results to
672
+ `execute` rejects LLM-simulated tasks at the CLI, because the loop reads criteria results to
636
673
  decide whether to keep talking: an ungraded dialog would silently change its own stopping
637
674
  behaviour rather than merely skipping the score.
638
675
 
676
+ ### Scripted dialogs
677
+
678
+ `simulation.turns` swaps the LLM user for `ScriptedUser`, which answers the loop's own
679
+ `next_user_message` call. `_evaluation_loop` composes it and hands it to the loop as
680
+ `user=`; the loop never branches on the kind afterwards, so the stop, telemetry and logging
681
+ paths are shared.
682
+
683
+ - **The cursor is the loop's history.** `ScriptedUser` returns `turns[len(dialog_pairs)]`
684
+ and keeps no counter, so it cannot drift from the exchanges the loop actually completed.
685
+ The dialog ends in `evaluate_stop` (`script_exhausted`) before the user is asked past the
686
+ last turn.
687
+ - **`turns[0]` is the pinned opener.** `_evaluation_loop` hands it to the loop as
688
+ `initial_prompt`, so turn 1 is recorded like any pinned opener (no simulator timing, an
689
+ accurate `conversation.log` label) and the task carries one source of truth for its
690
+ first prompt: `initial_prompt` beside `turns` is rejected.
691
+ - **The fields a script ignores are compared by value, not by `model_fields_set`.**
692
+ `evaluate` rebuilds the task from a full `model_dump()`, which marks every field as set,
693
+ so a "was it set" test would reject every recorded scripted task.
694
+ - **Script length owns the dialog length.** Derive `max_turns` after simulation config
695
+ validation, including merged variant scripts, so a replacement cannot inherit a stale cap.
696
+ Prompt overrides are rejected before mutation because a script owns every user turn.
697
+ - **No criteria steer a script.** `check_criteria` and `stop_on_criteria_pass` stay at their
698
+ defaults, so the one criteria check is the end-of-dialog verdict. That is also why
699
+ `execute` can accept it: nothing the dialog does depends on a verdict it lacks.
700
+ - **No simulator, no simulator egress.** `isolation/egress.py` adds the simulator's model
701
+ route only for a simulated user.
702
+
639
703
  ## Embedded commands
640
704
 
641
705
  A recorded config is UNTRUSTED INPUT. `evaluate <run_dir>` rebuilds the task from the
@@ -167,8 +167,7 @@ render still sees it; the JSON dump excludes it.
167
167
 
168
168
  The sibling is YAML rather than JSON because the transcript carries multi-line text, which
169
169
  YAML's literal block scalar renders as readable paragraphs instead of one line full of `\n`
170
- escapes. Its consumers are humans. The reader accepts `.json` too, so previously-spilled runs
171
- keep rendering, and a row with no path at all is a no-op, so old inline records keep working.
170
+ escapes. Its consumers are humans. A row with no path at all is a no-op.
172
171
 
173
172
  FILE ORDER IS LOAD-BEARING. Each filename is keyed off the criterion's position in its result
174
173
  list, and the reader resolves the stored path, so each list must retain its order through
@@ -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 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
126
+ run: .venv/bin/pip-audit --desc --skip-editable
127
127
 
128
128
  - name: Security - OSV vulnerability scan (osv-scanner)
129
129
  # Complements pip-audit: pip-audit queries the PyPI advisory DB;