coder-eval 0.12.3__tar.gz → 0.12.4__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 (813) hide show
  1. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/orchestration.md +19 -0
  2. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/persistence.md +88 -0
  3. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/reporting.md +19 -0
  4. {coder_eval-0.12.3 → coder_eval-0.12.4}/CHANGELOG.md +23 -0
  5. {coder_eval-0.12.3 → coder_eval-0.12.4}/PKG-INFO +1 -1
  6. {coder_eval-0.12.3 → coder_eval-0.12.4}/action.yml +1 -1
  7. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  8. {coder_eval-0.12.3 → coder_eval-0.12.4}/pyproject.toml +1 -1
  9. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/__init__.py +1 -1
  10. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/execute_command.py +28 -1
  11. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/run_command.py +94 -16
  12. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/agent.py +17 -8
  13. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/atif_emit.py +15 -11
  14. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/packager.py +23 -16
  15. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/isolation/docker_runner.py +1 -3
  16. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/logging_config.py +18 -5
  17. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/batch.py +52 -13
  18. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/config.py +77 -2
  19. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/experiment.py +6 -5
  20. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/regrade.py +20 -15
  21. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestrator.py +31 -9
  22. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/path_utils.py +71 -2
  23. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/sandbox.py +20 -2
  24. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/task.toml +3 -0
  25. coder_eval-0.12.4/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +37 -0
  26. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_atif_emit.py +52 -0
  27. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cleanup_preservation_guard.py +57 -9
  28. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_telemetry.py +2 -2
  29. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_detached_grading_boundaries.py +4 -2
  30. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_agent.py +19 -4
  31. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_packager.py +53 -5
  32. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_models.py +3 -0
  33. coder_eval-0.12.4/tests/test_parallel.py +463 -0
  34. coder_eval-0.12.4/tests/test_path_utils.py +305 -0
  35. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_preservation_mode.py +14 -6
  36. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_command_junit.py +1 -1
  37. {coder_eval-0.12.3 → coder_eval-0.12.4}/uv.lock +1 -1
  38. coder_eval-0.12.3/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -32
  39. coder_eval-0.12.3/tests/test_parallel.py +0 -267
  40. coder_eval-0.12.3/tests/test_path_utils.py +0 -131
  41. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-code-review-full.md +0 -0
  42. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  43. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-code-review.md +0 -0
  44. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-create-plan.md +0 -0
  45. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-implement-plan.md +0 -0
  46. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/commands/coder-eval-review.md +0 -0
  47. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/harness-candidates.md +0 -0
  48. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/README.md +0 -0
  49. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/agents.md +0 -0
  50. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/contracts.md +0 -0
  51. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/isolation.md +0 -0
  52. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/lint-rules.md +0 -0
  53. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/permissions.md +0 -0
  54. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/notes/timing.md +0 -0
  55. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/shared/axes.md +0 -0
  56. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/shared/multi-model-review.md +0 -0
  57. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/shared/review-rubric.md +0 -0
  58. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/shared/run-layout.md +0 -0
  59. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/workflows/cr-axis.js +0 -0
  60. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude/workflows/cr-parent.js +0 -0
  61. {coder_eval-0.12.3 → coder_eval-0.12.4}/.claude-plugin/marketplace.json +0 -0
  62. {coder_eval-0.12.3 → coder_eval-0.12.4}/.env.example +0 -0
  63. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/CODEOWNERS +0 -0
  64. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  65. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  66. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  67. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/actionlint.yaml +0 -0
  68. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/code_review.md +0 -0
  69. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/dependabot.yml +0 -0
  70. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/pages-stub/index.html +0 -0
  71. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/scripts/harbor_e2e.py +0 -0
  72. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/scripts/release_notes.py +0 -0
  73. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/claude-pr-review.yml +0 -0
  74. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/codeql.yml +0 -0
  75. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/conventional-commits.yml +0 -0
  76. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/docker-publish.yml +0 -0
  77. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/docs.yml +0 -0
  78. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/harbor-e2e.yml +0 -0
  79. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/pr-checks.yml +0 -0
  80. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/publish-testpypi.yml +0 -0
  81. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/release.yml +0 -0
  82. {coder_eval-0.12.3 → coder_eval-0.12.4}/.github/workflows/verify-published-action.yml +0 -0
  83. {coder_eval-0.12.3 → coder_eval-0.12.4}/.gitignore +0 -0
  84. {coder_eval-0.12.3 → coder_eval-0.12.4}/.pre-commit-config.yaml +0 -0
  85. {coder_eval-0.12.3 → coder_eval-0.12.4}/.python-version +0 -0
  86. {coder_eval-0.12.3 → coder_eval-0.12.4}/ADOPTERS.md +0 -0
  87. {coder_eval-0.12.3 → coder_eval-0.12.4}/CLAUDE.md +0 -0
  88. {coder_eval-0.12.3 → coder_eval-0.12.4}/CODE_OF_CONDUCT.md +0 -0
  89. {coder_eval-0.12.3 → coder_eval-0.12.4}/CONTRIBUTING.md +0 -0
  90. {coder_eval-0.12.3 → coder_eval-0.12.4}/LICENSE +0 -0
  91. {coder_eval-0.12.3 → coder_eval-0.12.4}/Makefile +0 -0
  92. {coder_eval-0.12.3 → coder_eval-0.12.4}/NOTICE +0 -0
  93. {coder_eval-0.12.3 → coder_eval-0.12.4}/README.md +0 -0
  94. {coder_eval-0.12.3 → coder_eval-0.12.4}/SECURITY.md +0 -0
  95. {coder_eval-0.12.3 → coder_eval-0.12.4}/comparison.md +0 -0
  96. {coder_eval-0.12.3 → coder_eval-0.12.4}/docker/Dockerfile +0 -0
  97. {coder_eval-0.12.3 → coder_eval-0.12.4}/docker/Dockerfile.runtime +0 -0
  98. {coder_eval-0.12.3 → coder_eval-0.12.4}/docker/coder_eval_entrypoint.sh +0 -0
  99. {coder_eval-0.12.3 → coder_eval-0.12.4}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  100. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/AB_EXPERIMENTS.md +0 -0
  101. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/CI_GATE.md +0 -0
  102. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/DATASETS.md +0 -0
  103. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/DIALOG_MODE.md +0 -0
  104. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/DOCKER_ISOLATION.md +0 -0
  105. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/EXTENDING.md +0 -0
  106. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/PLUGIN.md +0 -0
  107. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/REPORT_SCHEMA.md +0 -0
  108. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/TASK_DEFINITION_GUIDE.md +0 -0
  109. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/USER_GUIDE.md +0 -0
  110. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/ANTIGRAVITY.md +0 -0
  111. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/CLAUDE_CODE.md +0 -0
  112. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/CODEX.md +0 -0
  113. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/HARNESS_PARITY.md +0 -0
  114. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/OPENCODE.md +0 -0
  115. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/agents/PI.md +0 -0
  116. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/assets/hero.gif +0 -0
  117. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/comparison.md +0 -0
  118. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/index.md +0 -0
  119. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/llms.txt +0 -0
  120. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/01-first-evaluation.md +0 -0
  121. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/02-ci-pipeline.md +0 -0
  122. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/03-evalboard-local.md +0 -0
  123. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/04-writing-a-task.md +0 -0
  124. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/05-comparing-models.md +0 -0
  125. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/06-use-docker-isolation.md +0 -0
  126. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  127. {coder_eval-0.12.3 → coder_eval-0.12.4}/docs/tutorials/README.md +0 -0
  128. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/.gitignore +0 -0
  129. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/README.md +0 -0
  130. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  131. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  132. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  133. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  134. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/col-help.tsx +0 -0
  135. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  136. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/harness-badge.tsx +0 -0
  137. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/harness-selector.tsx +0 -0
  138. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/scroll-table.tsx +0 -0
  139. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/search-box.tsx +0 -0
  140. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/skeleton.tsx +0 -0
  141. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/unit-toggle.tsx +0 -0
  142. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_components/version-list.tsx +0 -0
  143. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  144. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_lib/source-param.ts +0 -0
  145. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  146. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  147. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  148. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/daily-chart.tsx +0 -0
  149. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  150. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/harness-legend.tsx +0 -0
  151. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/harness-series.ts +0 -0
  152. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/tag-rail.tsx +0 -0
  153. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  154. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  155. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/_overview/window-summary.tsx +0 -0
  156. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/api/download/route.ts +0 -0
  157. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/api/file/route.ts +0 -0
  158. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  159. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/api/refresh/route.ts +0 -0
  160. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/error.tsx +0 -0
  161. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/globals.css +0 -0
  162. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/icon.png +0 -0
  163. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/layout.tsx +0 -0
  164. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/loading.tsx +0 -0
  165. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/page.tsx +0 -0
  166. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  167. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/path-to-ga/page.tsx +0 -0
  168. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  169. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/scribe/page.tsx +0 -0
  170. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/scribe/run-table.tsx +0 -0
  171. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  172. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/trends/actions.ts +0 -0
  173. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/trends/page.tsx +0 -0
  174. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/trends/trends-view.tsx +0 -0
  175. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  176. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/watchlist/page.tsx +0 -0
  177. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  178. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/next-env.d.ts +0 -0
  179. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/next.config.mjs +0 -0
  180. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/package.json +0 -0
  181. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/pnpm-lock.yaml +0 -0
  182. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/postcss.config.mjs +0 -0
  183. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/public/harness/antigravity.png +0 -0
  184. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/public/harness/claude-code.png +0 -0
  185. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/public/harness/codex.png +0 -0
  186. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/public/harness/pi.png +0 -0
  187. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/public/uipath.png +0 -0
  188. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/tailwind.config.ts +0 -0
  189. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/tsconfig.json +0 -0
  190. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/vitest.config.ts +0 -0
  191. {coder_eval-0.12.3 → coder_eval-0.12.4}/evalboard/vitest.setup.ts +0 -0
  192. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/default.yaml +0 -0
  193. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/early-stop-ab.yaml +0 -0
  194. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/model-comparison.yaml +0 -0
  195. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/permissions-smoke.yaml +0 -0
  196. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/plugin-comparison.yaml +0 -0
  197. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/prompt-mutations-example.yaml +0 -0
  198. {coder_eval-0.12.3 → coder_eval-0.12.4}/experiments/smoke_variants.yaml +0 -0
  199. {coder_eval-0.12.3 → coder_eval-0.12.4}/litellm/README.md +0 -0
  200. {coder_eval-0.12.3 → coder_eval-0.12.4}/litellm/cost_logger.py +0 -0
  201. {coder_eval-0.12.3 → coder_eval-0.12.4}/litellm/litellm-config.yaml +0 -0
  202. {coder_eval-0.12.3 → coder_eval-0.12.4}/litellm/start-litellm.sh +0 -0
  203. {coder_eval-0.12.3 → coder_eval-0.12.4}/mkdocs.yml +0 -0
  204. {coder_eval-0.12.3 → coder_eval-0.12.4}/osv-scanner.toml +0 -0
  205. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/README.md +0 -0
  206. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/cli-setup.md +0 -0
  207. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/criteria.md +0 -0
  208. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/repo-layout.md +0 -0
  209. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/run-layout.md +0 -0
  210. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/task-rubric.md +0 -0
  211. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  212. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  213. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  214. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  215. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  216. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  217. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  218. {coder_eval-0.12.3 → coder_eval-0.12.4}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  219. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/check_commit_msg.sh +0 -0
  220. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/README.md +0 -0
  221. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/antigravity.json +0 -0
  222. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/claude-code.json +0 -0
  223. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/codex.json +0 -0
  224. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/opencode.json +0 -0
  225. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/corpus/pi.json +0 -0
  226. {coder_eval-0.12.3 → coder_eval-0.12.4}/scripts/timing/decompose_run.py +0 -0
  227. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/.gitattributes +0 -0
  228. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agent.py +0 -0
  229. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/__init__.py +0 -0
  230. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/_logging.py +0 -0
  231. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/_skills.py +0 -0
  232. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/antigravity_agent.py +0 -0
  233. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/claude_code_agent.py +0 -0
  234. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/codex_agent.py +0 -0
  235. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/noop_agent.py +0 -0
  236. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/opencode_agent.py +0 -0
  237. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/pi_agent.py +0 -0
  238. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/registry.py +0 -0
  239. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/agents/watchdog.py +0 -0
  240. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/analysis.py +0 -0
  241. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/argv_match.py +0 -0
  242. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/__init__.py +0 -0
  243. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/console.py +0 -0
  244. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/evaluate_command.py +0 -0
  245. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/evaluate_target.py +0 -0
  246. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/export_command.py +0 -0
  247. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/harbor_command.py +0 -0
  248. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/plan_command.py +0 -0
  249. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/report_command.py +0 -0
  250. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/run_helpers.py +0 -0
  251. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  252. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/cli/utils.py +0 -0
  253. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/config.py +0 -0
  254. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/__init__.py +0 -0
  255. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  256. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/agent_judge.py +0 -0
  257. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/base.py +0 -0
  258. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/classification_match.py +0 -0
  259. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/cli_called.py +0 -0
  260. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/command_executed.py +0 -0
  261. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  262. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/file_check.py +0 -0
  263. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/file_contains.py +0 -0
  264. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/file_exists.py +0 -0
  265. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  266. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/json_check.py +0 -0
  267. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/llm_judge.py +0 -0
  268. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/reference_comparison.py +0 -0
  269. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/run_command.py +0 -0
  270. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/skill_triggered.py +0 -0
  271. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/criteria/uipath_eval.py +0 -0
  272. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/durations.py +0 -0
  273. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/__init__.py +0 -0
  274. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/agent.py +0 -0
  275. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/budget.py +0 -0
  276. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/categories.py +0 -0
  277. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/categorization.py +0 -0
  278. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/checker_misuse.py +0 -0
  279. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/executor.py +0 -0
  280. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/judge.py +0 -0
  281. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/reference.py +0 -0
  282. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/retry.py +0 -0
  283. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/errors/timeout.py +0 -0
  284. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/__init__.py +0 -0
  285. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/checker.py +0 -0
  286. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  287. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  288. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_context.py +0 -0
  289. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  290. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_models.py +0 -0
  291. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  292. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/judge_usage.py +0 -0
  293. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/sub_agent.py +0 -0
  294. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/summaries.py +0 -0
  295. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  296. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/formatting.py +0 -0
  297. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/fs_permissions.py +0 -0
  298. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/__init__.py +0 -0
  299. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/agent_paths.py +0 -0
  300. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  301. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/atif_models.py +0 -0
  302. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/experiment_packager.py +0 -0
  303. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/portability.py +0 -0
  304. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/harbor/reward.py +0 -0
  305. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/invocation_log.py +0 -0
  306. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/isolation/__init__.py +0 -0
  307. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/litellm_cost.py +0 -0
  308. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/__init__.py +0 -0
  309. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/agent_config.py +0 -0
  310. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/cli_match.py +0 -0
  311. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/container_context.py +0 -0
  312. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/container_paths.py +0 -0
  313. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/criteria.py +0 -0
  314. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/enums.py +0 -0
  315. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/experiment.py +0 -0
  316. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/judge.py +0 -0
  317. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/judge_defaults.py +0 -0
  318. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/limits.py +0 -0
  319. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/merge_strategy.py +0 -0
  320. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/mutations.py +0 -0
  321. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/results.py +0 -0
  322. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/routing.py +0 -0
  323. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/sandbox.py +0 -0
  324. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/tasks.py +0 -0
  325. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/telemetry.py +0 -0
  326. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/models/templates.py +0 -0
  327. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/__init__.py +0 -0
  328. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/config_merge.py +0 -0
  329. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/early_stop.py +0 -0
  330. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/evaluation.py +0 -0
  331. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/overrides.py +0 -0
  332. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/run_limits.py +0 -0
  333. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  334. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/orchestration/task_loader.py +0 -0
  335. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/plugins.py +0 -0
  336. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/pricing.py +0 -0
  337. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/py.typed +0 -0
  338. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/__init__.py +0 -0
  339. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/experiment.py +0 -0
  340. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/helpers.py +0 -0
  341. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/html.py +0 -0
  342. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/junit.py +0 -0
  343. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/reports/markdown.py +0 -0
  344. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/resources/__init__.py +0 -0
  345. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  346. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/resources/tags.yaml +0 -0
  347. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/result_metrics.py +0 -0
  348. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/run_record.py +0 -0
  349. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/__init__.py +0 -0
  350. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/ast_similarity.py +0 -0
  351. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/complexity.py +0 -0
  352. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/quality.py +0 -0
  353. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/signature_similarity.py +0 -0
  354. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/similarity.py +0 -0
  355. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/scoring/token_similarity.py +0 -0
  356. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/simulation/__init__.py +0 -0
  357. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/simulation/termination.py +0 -0
  358. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/simulation/user_simulator.py +0 -0
  359. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/stats.py +0 -0
  360. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/__init__.py +0 -0
  361. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/callbacks.py +0 -0
  362. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/collector.py +0 -0
  363. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/events.py +0 -0
  364. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/renderers.py +0 -0
  365. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/streaming/wire.py +0 -0
  366. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/telemetry.py +0 -0
  367. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/timing.py +0 -0
  368. {coder_eval-0.12.3 → coder_eval-0.12.4}/src/coder_eval/utils.py +0 -0
  369. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/README.md +0 -0
  370. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agentless_smoke_test.yaml +0 -0
  371. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/antigravity_hello_world.yaml +0 -0
  372. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  373. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/claude_hello_world.yaml +0 -0
  374. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  375. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  376. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/claude_subagent_test.yaml +0 -0
  377. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  378. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_hello_world.yaml +0 -0
  379. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_parallel_commands.yaml +0 -0
  380. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  381. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_skills_test.yaml +0 -0
  382. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_string_utils.yaml +0 -0
  383. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/codex_subagent_test.yaml +0 -0
  384. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  385. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/agents/subagent_merge_sort.yaml +0 -0
  386. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  387. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  388. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/byod_smoke_test.yaml +0 -0
  389. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dataset_example.yaml +0 -0
  390. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/datasets/sentiment.jsonl +0 -0
  391. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  392. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  393. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  394. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  395. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  396. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  397. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  398. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  399. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  400. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/fibonacci_with_template.yaml +0 -0
  401. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/hello_date.yaml +0 -0
  402. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/inline_starter_example.yaml +0 -0
  403. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/internal/session_resumption.yaml +0 -0
  404. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_smoke.yaml +0 -0
  405. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  406. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  407. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  408. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  409. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  410. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/opencode_smoke_test.yaml +0 -0
  411. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/pi_smoke_test.yaml +0 -0
  412. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  413. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/record_cli_responses.yaml +0 -0
  414. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/run_limits/max_turns_cap.yaml +0 -0
  415. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/run_limits/turn_timeout.yaml +0 -0
  416. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  417. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  418. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  419. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  420. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  421. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  422. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/README.md +0 -0
  423. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  424. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  425. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  426. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  427. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  428. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  429. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  430. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  431. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  432. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  433. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/sentiment_classification.yaml +0 -0
  434. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_agent_judge.yaml +0 -0
  435. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_budget_exceeded.yaml +0 -0
  436. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  437. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_llm_judge.yaml +0 -0
  438. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_negative_path.yaml +0 -0
  439. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_task_timeout.yaml +0 -0
  440. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/smoke_variants.yaml +0 -0
  441. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/test_sandbox.yaml +0 -0
  442. {coder_eval-0.12.3 → coder_eval-0.12.4}/tasks/token_check.yaml +0 -0
  443. {coder_eval-0.12.3 → coder_eval-0.12.4}/templates/byod_smoke_test/Dockerfile +0 -0
  444. {coder_eval-0.12.3 → coder_eval-0.12.4}/templates/fibonacci-starter/README.md +0 -0
  445. {coder_eval-0.12.3 → coder_eval-0.12.4}/templates/fibonacci-starter/src/main.py +0 -0
  446. {coder_eval-0.12.3 → coder_eval-0.12.4}/templates/fibonacci-starter/tests/test_main.py +0 -0
  447. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/__init__.py +0 -0
  448. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_bracket_clock.py +0 -0
  449. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_container_contract.py +0 -0
  450. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/__init__.py +0 -0
  451. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/__init__.py +0 -0
  452. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  453. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  454. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  455. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  456. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
  457. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
  458. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
  459. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
  460. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
  461. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  462. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  463. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  464. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  465. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  466. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  467. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  468. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  469. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  470. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  471. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  472. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  473. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  474. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  475. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  476. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  477. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  478. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  479. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
  480. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
  481. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
  482. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
  483. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
  484. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
  485. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
  486. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
  487. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
  488. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
  489. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
  490. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  491. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  492. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  493. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  494. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  495. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  496. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  497. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  498. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  499. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  500. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  501. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/live_criteria.py +0 -0
  502. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  503. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  504. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  505. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  506. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  507. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  508. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  509. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_fixtures/timing_union_cases.json +0 -0
  510. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/_path_helpers.py +0 -0
  511. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/conftest.py +0 -0
  512. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/__init__.py +0 -0
  513. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  514. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  515. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  516. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/mock_agent.py +0 -0
  517. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  518. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  519. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  520. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  521. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/fixtures/text_stub_agent.py +0 -0
  522. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  523. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  524. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  525. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  526. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/__init__.py +0 -0
  527. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/action_docs.py +0 -0
  528. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/agent_roster_parity.py +0 -0
  529. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/dead_config_fields.py +0 -0
  530. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/doc_env_parity.py +0 -0
  531. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/doc_examples.py +0 -0
  532. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/doc_indexes.py +0 -0
  533. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/doc_schema_parity.py +0 -0
  534. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/generated.py +0 -0
  535. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/live_verdict_contract.py +0 -0
  536. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/plugin_manifest_parity.py +0 -0
  537. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/plugin_reference.py +0 -0
  538. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/pricing_mirror.py +0 -0
  539. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/prose_budget.py +0 -0
  540. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/pyright_config.py +0 -0
  541. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/__init__.py +0 -0
  542. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/_layers.py +0 -0
  543. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/_model_ctor.py +0 -0
  544. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/base.py +0 -0
  545. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  546. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  547. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  548. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  549. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  550. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  551. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  552. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  553. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  554. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  555. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  556. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  557. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  558. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  559. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  560. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  561. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  562. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  563. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  564. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  565. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  566. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  567. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  568. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  569. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  570. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  571. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  572. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  573. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  574. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  575. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  576. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  577. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_agent_timing_access.py +0 -0
  578. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  579. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  580. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_silent_except.py +0 -0
  581. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  582. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  583. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  584. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  585. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/open_explicit_encoding.py +0 -0
  586. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  587. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/register_criterion_required.py +0 -0
  588. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  589. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  590. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/runner.py +0 -0
  591. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/violation.py +0 -0
  592. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/lint/workflow_outputs.py +0 -0
  593. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_action_inputs.py +0 -0
  594. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_action_version_pin.py +0 -0
  595. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent.py +0 -0
  596. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_config_no_timing_fields.py +0 -0
  597. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_config_optional_type.py +0 -0
  598. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_config_registry_dispatch.py +0 -0
  599. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_config_sdk_decoupling.py +0 -0
  600. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_golden_master.py +0 -0
  601. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_judge_criterion.py +0 -0
  602. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_telemetry.py +0 -0
  603. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_telemetry_advanced.py +0 -0
  604. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agent_timeout.py +0 -0
  605. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_agentless.py +0 -0
  606. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_antigravity_agent.py +0 -0
  607. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_atif_hydrate.py +0 -0
  608. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_atif_models.py +0 -0
  609. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_byoa_plugin.py +0 -0
  610. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_byoa_plugin_live.py +0 -0
  611. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_byod_feature.py +0 -0
  612. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_check_all_async.py +0 -0
  613. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_checker_logging.py +0 -0
  614. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_classification_match.py +0 -0
  615. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_claude_settings_enforcement_live.py +0 -0
  616. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_backend_flag.py +0 -0
  617. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_called_criterion.py +0 -0
  618. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_empty_glob.py +0 -0
  619. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_match_parity.py +0 -0
  620. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_sdk_options.py +0 -0
  621. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_set_overrides.py +0 -0
  622. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cli_type_flag.py +0 -0
  623. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_code_review_bugs.py +0 -0
  624. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_codex_agent.py +0 -0
  625. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_codex_agent_live.py +0 -0
  626. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_codex_agent_unit.py +0 -0
  627. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_codex_token_mapping.py +0 -0
  628. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_command_executed.py +0 -0
  629. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_command_statistics.py +0 -0
  630. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_command_telemetry_result_data.py +0 -0
  631. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_commands_efficiency.py +0 -0
  632. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_config_lineage.py +0 -0
  633. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_config_merge_engine.py +0 -0
  634. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_config_precedence.py +0 -0
  635. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_container_context.py +0 -0
  636. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_continuous_scoring.py +0 -0
  637. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_cost_accounting_paths.py +0 -0
  638. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_criterion_result_round_trip.py +0 -0
  639. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_custom_lint.py +0 -0
  640. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_dataset_expansion.py +0 -0
  641. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_debug_logging.py +0 -0
  642. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_detached_grading_guards.py +0 -0
  643. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_build_failure.py +0 -0
  644. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_litellm_env.py +0 -0
  645. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_runner_container_death.py +0 -0
  646. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_runner_mounts.py +0 -0
  647. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_runner_stream_limit.py +0 -0
  648. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_wildcard_env.py +0 -0
  649. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_docker_workdir_live.py +0 -0
  650. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_driver_resolver.py +0 -0
  651. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_durations.py +0 -0
  652. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_early_stop.py +0 -0
  653. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_error_handling.py +0 -0
  654. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_evaluate_command.py +0 -0
  655. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_evaluate_format_harbor.py +0 -0
  656. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_evaluate_target.py +0 -0
  657. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_evaluator.py +0 -0
  658. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_event_collector.py +0 -0
  659. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_execute_command.py +0 -0
  660. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_execute_evaluate_loop.py +0 -0
  661. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_execute_format_harbor.py +0 -0
  662. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_cli.py +0 -0
  663. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_loader.py +0 -0
  664. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_models.py +0 -0
  665. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_reports.py +0 -0
  666. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_resolver.py +0 -0
  667. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_experiment_runner.py +0 -0
  668. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_file_check.py +0 -0
  669. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_file_contains_scoring.py +0 -0
  670. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_formatting.py +0 -0
  671. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_git_clone_failure.py +0 -0
  672. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_glob_paths_in_file_criteria.py +0 -0
  673. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_e2e_fixtures.py +0 -0
  674. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_experiment_packager.py +0 -0
  675. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_export_golden.py +0 -0
  676. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_portability.py +0 -0
  677. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_harbor_reward.py +0 -0
  678. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_heartbeat_watchdog.py +0 -0
  679. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_ignore_patterns_negation.py +0 -0
  680. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_image_from_dockerfiles.py +0 -0
  681. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_image_skew_refusal.py +0 -0
  682. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_integration.py +0 -0
  683. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_json_check.py +0 -0
  684. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_anthropic.py +0 -0
  685. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_bedrock.py +0 -0
  686. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_burn_in_live.py +0 -0
  687. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_context_builder.py +0 -0
  688. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_litellm.py +0 -0
  689. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_models.py +0 -0
  690. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_judge_persistence.py +0 -0
  691. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_lint_no_top_level_run_limits.py +0 -0
  692. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_lint_runner.py +0 -0
  693. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_litellm_config.py +0 -0
  694. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_litellm_cost.py +0 -0
  695. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_litellm_cost_logger.py +0 -0
  696. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_litellm_judge_live.py +0 -0
  697. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_litellm_route.py +0 -0
  698. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_llm_judge_criterion.py +0 -0
  699. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_log_tail_buffer.py +0 -0
  700. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_logging.py +0 -0
  701. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_logging_isolation.py +0 -0
  702. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_merge_characterization.py +0 -0
  703. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_merge_strategy_annotations.py +0 -0
  704. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_merge_unification.py +0 -0
  705. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_mutations.py +0 -0
  706. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_new_criteria.py +0 -0
  707. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_node_env_config.py +0 -0
  708. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_opencode_agent.py +0 -0
  709. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_optional_dependencies.py +0 -0
  710. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_orchestrator.py +0 -0
  711. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_orchestrator_error_log_tail.py +0 -0
  712. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_orchestrator_telemetry.py +0 -0
  713. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_overrides_engine.py +0 -0
  714. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pi_agent.py +0 -0
  715. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pi_agent_config.py +0 -0
  716. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pi_smoke_task.py +0 -0
  717. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_plan_command.py +0 -0
  718. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_plugin_processing.py +0 -0
  719. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_plugins.py +0 -0
  720. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_post_run.py +0 -0
  721. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pr_review_workflow.py +0 -0
  722. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pre_run.py +0 -0
  723. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pricing_mirror.py +0 -0
  724. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_pricing_registry.py +0 -0
  725. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_prose_budget.py +0 -0
  726. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_prose_budget_commands.py +0 -0
  727. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reference_comparison_scoring.py +0 -0
  728. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reference_evaluator.py +0 -0
  729. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reference_missing_file.py +0 -0
  730. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reference_models.py +0 -0
  731. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reference_permissions.py +0 -0
  732. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_registry.py +0 -0
  733. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_regrade.py +0 -0
  734. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_release_notes.py +0 -0
  735. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_replicate_stats.py +0 -0
  736. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_report_command.py +0 -0
  737. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reports.py +0 -0
  738. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reports_html.py +0 -0
  739. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reports_junit.py +0 -0
  740. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_reports_package.py +0 -0
  741. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_resolve_task_files.py +0 -0
  742. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_result_metrics.py +0 -0
  743. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_resume.py +0 -0
  744. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_retry_logic_comprehensive.py +0 -0
  745. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_route_seam_exhaustiveness.py +0 -0
  746. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_routing.py +0 -0
  747. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_command_stdout.py +0 -0
  748. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_helpers.py +0 -0
  749. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_limits_models.py +0 -0
  750. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_limits_orchestrator.py +0 -0
  751. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_limits_resolver.py +0 -0
  752. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_metrics.py +0 -0
  753. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_record.py +0 -0
  754. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_run_summary_rebuild.py +0 -0
  755. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_runtime_tool_versions.py +0 -0
  756. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox.py +0 -0
  757. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_adopt.py +0 -0
  758. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_layer_builder.py +0 -0
  759. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_optional.py +0 -0
  760. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_record_cli.py +0 -0
  761. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_security.py +0 -0
  762. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_symlink_preservation.py +0 -0
  763. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_templates.py +0 -0
  764. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sandbox_venv_live.py +0 -0
  765. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_scorers.py +0 -0
  766. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_scoring_quality.py +0 -0
  767. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sdk_option_classification.py +0 -0
  768. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_seed_from_prior_result.py +0 -0
  769. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_simulation_config.py +0 -0
  770. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_simulation_integration.py +0 -0
  771. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_simulation_termination.py +0 -0
  772. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_simulation_trials.py +0 -0
  773. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_skill_triggered.py +0 -0
  774. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_stats.py +0 -0
  775. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_stats_nonfinite.py +0 -0
  776. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_agent_integration.py +0 -0
  777. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_batch.py +0 -0
  778. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_callbacks.py +0 -0
  779. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_cli.py +0 -0
  780. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_events.py +0 -0
  781. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_orchestrator.py +0 -0
  782. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_renderers.py +0 -0
  783. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_streaming_wire.py +0 -0
  784. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_sub_agent_runner.py +0 -0
  785. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_success_criterion_union.py +0 -0
  786. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_suite_rollup.py +0 -0
  787. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_summaries.py +0 -0
  788. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_tags.py +0 -0
  789. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_task_definition_unknown_fields.py +0 -0
  790. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_teardown_interrupt.py +0 -0
  791. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_telemetry.py +0 -0
  792. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_template_env_expansion.py +0 -0
  793. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_threshold_enforcement.py +0 -0
  794. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timeout_batch.py +0 -0
  795. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timeout_categorization.py +0 -0
  796. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timeout_exceptions.py +0 -0
  797. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timeout_models.py +0 -0
  798. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timeout_orchestrator.py +0 -0
  799. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timing_close_window.py +0 -0
  800. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timing_identity_contract.py +0 -0
  801. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_timing_union_parity.py +0 -0
  802. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_token_usage.py +0 -0
  803. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_uipath_eval.py +0 -0
  804. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_ungraded_reporting.py +0 -0
  805. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_user_simulator.py +0 -0
  806. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_utils.py +0 -0
  807. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_utterance_extraction.py +0 -0
  808. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_variant_prompt_file.py +0 -0
  809. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_verdict_tool.py +0 -0
  810. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_verify_published_workflow.py +0 -0
  811. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_visible_turn_cap.py +0 -0
  812. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_watchdog.py +0 -0
  813. {coder_eval-0.12.3 → coder_eval-0.12.4}/tests/test_yaml_migration.py +0 -0
@@ -759,6 +759,25 @@ It RAISES rather than guessing when neither is conclusive. Guessing is worse tha
759
759
  grading the wrong directory makes every path-relative criterion fail as a locating
760
760
  artifact rather than as a verdict, and reports that as an ordinary score.
761
761
 
762
+ A resolved `artifacts_dir_template` is passed in as a SECOND TRUSTED ROOT and preferred as
763
+ the candidate, since that template may place artifacts outside `run_dir` entirely. Note the
764
+ direction: the roots were WIDENED, never the check relaxed — roots stay operator-supplied,
765
+ candidates stay untrusted. Without it, `--resume` over a decoupled layout failed the
766
+ containment check, fell through to a `run_dir/artifacts` that did not exist, and raised
767
+ `RegradeError`. An artifacts dir that exists outranks the recorded `sandbox_path`, which is
768
+ merely what the run claimed.
769
+
770
+ Only `--resume` (`run_command.py`'s `_grade_resumed_tasks`) passes the resolved
771
+ `artifacts_dir` — it has the run's own `BatchRunConfig` in hand, so `resolve_artifacts_dir`
772
+ needs no new state. Detached `coder-eval evaluate <run_dir>` does not: it has no
773
+ `BatchRunConfig` to resolve a template from, only the untrusted `task.json` it's grading, and
774
+ trusting THAT to widen its own containment root would defeat the check the widening exists
775
+ to keep intact. A run made with a non-default `artifacts_dir_template` therefore still needs
776
+ `--workspace` passed explicitly to `evaluate` — the same escape hatch `RegradeError` already
777
+ names. Not a regression: `evaluate` never auto-located such a workspace before this template
778
+ existed either, and the alternative (trusting the recorded path) reopens the class of bug the
779
+ previous paragraph describes.
780
+
762
781
  **Every return goes through the containment check, rooted at the RUN DIRECTORY.** Both
763
782
  `sandbox_path` and `task_id` are unvalidated strings out of the run's own `task.json`, so
764
783
  `"../../../../home/victim"` joins to a real directory `is_dir()` happily confirms. The
@@ -69,6 +69,94 @@ trajectory log the run had already paid for. `grade.docker.log` exists for the s
69
69
  one layer down: on the `run --resume` path `docker.log` is already the executed
70
70
  container's log.
71
71
 
72
+ ## The run layout as two directory templates
73
+
74
+ `logging_dir_template` and `artifacts_dir_template` (`BatchRunConfig`, resolved by
75
+ `path_utils.resolve_dir_template`) describe where a task's bookkeeping and its artifacts
76
+ go. They are resolved LATE — per task, which is the only point where `${variant}`,
77
+ `${task}` and `${repeat}` exist at all — and they are INDEPENDENT: artifacts nesting under
78
+ the logging dir is a default, not a law.
79
+
80
+ That independence is the point. Harbor puts logs in its own agent logs dir and artifacts at
81
+ the container's WORKDIR, two unrelated parts of the filesystem, and because artifacts were
82
+ never a child of the logging dir there is nothing to copy and nothing lands twice. The
83
+ previous design reached the same end state with a `--workspace-dir`/`--artifacts-dir` pair
84
+ that had to be passed the SAME path so an equality check could infer "don't copy"; a
85
+ coincidence standing in for an intention.
86
+
87
+ An override needs no special-casing anywhere, because substituting a template that contains
88
+ no placeholders is the identity function: `/work/output` in, `/work/output` out, down the
89
+ same code path as the default. The defaults spell out the historical layout, so an
90
+ unspecified run writes byte-identical paths — asserted in `test_path_utils.py` against the
91
+ literal old layout rather than against `build_task_run_dir`, which now calls the resolver
92
+ and would make the test vacuous.
93
+
94
+ Two implementation constraints, both load-bearing:
95
+
96
+ - **`string.Template`, never `re.sub`.** `re.sub` interprets backslashes in the
97
+ REPLACEMENT, so a Windows `run_dir` of `C:\runs\2026` comes out mangled.
98
+ - **`${task}` may contain a separator.** A dataset-expanded `task_id` is
99
+ `"<task>/<row>"` (`expand_dataset`, whose row ids are validated precisely because they
100
+ become directories), so it nests — on Windows too, where `pathlib` splits on both
101
+ separators.
102
+
103
+ `${task}` appears twice in the artifacts default (`.../${task}/${repeat}/artifacts/${task}`)
104
+ because that IS the layout on disk: the per-task run dir carries it, and
105
+ `preserve_to`/`capture_to`/DIRECT_WRITE each appended it again. Kept for compatibility, and
106
+ now one string to change rather than five call sites. The `*_as` variants
107
+ (`preserve_as`/`capture_as`) exist so a caller-supplied artifacts dir is used as the FINAL
108
+ path instead of having `task_id` appended to it a second time; `preserve_to`/`capture_to`
109
+ remain as the parent-relative wrappers.
110
+
111
+ ### What run_dir still owns
112
+
113
+ `${run_dir}` is only a placeholder VALUE. But run-LEVEL files — `run.json`, `run.md`,
114
+ `experiment.*`, `resume_fingerprint.json` — still follow `--run-dir`, and its default is
115
+ CWD-RELATIVE (`runs/<timestamp>`, `config.py`). Omitting `--run-dir` therefore does not
116
+ leave those files harmlessly uncollected; when cwd is the agent's WORKDIR it writes them
117
+ INSIDE the workspace, polluting the very directory `artifacts_dir_template` names.
118
+ Confirmed live: `artifacts/work/runs/<timestamp>/run.json` in a collected Harbor trial.
119
+ Harbor consequently passes `--run-dir /tmp/coder-eval-run`, a throwaway path outside the
120
+ workspace.
121
+
122
+ Anything that used to DISCOVER per-task files by walking `run_dir` had to be given the
123
+ resolved logging dirs instead, because they need not live under `run_dir` at all and the
124
+ walk silently finds nothing: `atif_emit.emit_trajectories_for_run` (which would emit no
125
+ trajectory, leaving Harbor's token/cost totals empty) and
126
+ `logging_config.aggregate_task_logs` (which would write an empty `experiment.log`).
127
+
128
+ ### A static template is single-task only
129
+
130
+ A placeholder-free template is the identity function, so every task in a multi-task
131
+ `run`/`execute` would resolve `--logging-dir`/`--artifacts-dir` to the SAME directory and
132
+ overwrite each other's `task.json`/artifacts. `run_batch` refuses this loud
133
+ (`ValueError`) when `len(resolved_tasks) > 1` and either template has no `${...}`
134
+ placeholders (`path_utils.dir_template_is_static`), mirroring the pre-existing
135
+ `--workspace-dir` + multi-task rejection. Static paths exist for exactly the single-task
136
+ case below.
137
+
138
+ ### A flat run_dir needs no special case in run_batch
139
+
140
+ Harbor's single-task, static-template mode writes `task.json`/`task.html`/`task.log`/
141
+ artifacts flat at the top-level `run_dir` instead of the usual
142
+ `<variant>/<task_id>/<NN>` nesting -- the multi-task guard above already guarantees
143
+ exactly one resolved task here, so that nesting only exists to disambiguate siblings that
144
+ can't occur. A flat `run_dir` also means `trajectory.json` (`emit_trajectories_for_run`'s
145
+ sibling write) lands at a fixed, predictable path instead of requiring a recursive glob.
146
+ `run_batch`'s `run_single` needs no `workspace_dir` special case for this: `rt.run_dir` IS
147
+ the resolved `logging_dir_template`, so "flat" is simply what a static template resolves
148
+ to, not a mode this seam has to detect.
149
+
150
+ ### CoderEvalAgent passes both templates as static paths
151
+
152
+ `harbor/agent.py`'s `CoderEvalAgent.run()` passes `--logging-dir`/`--artifacts-dir` as two
153
+ STATIC paths (Harbor's own agent logs dir, and the container's WORKDIR via `$(pwd)`) rather
154
+ than templates with placeholders — the case the identity-function property above exists for.
155
+ Because artifacts are no longer a child of the logging dir, nothing lands twice; because the
156
+ artifacts destination IS the workspace, `capture_as`'s self-referential guard makes the copy
157
+ a no-op. `--run-dir` still points at `_THROWAWAY_RUN_DIR` (`/tmp/coder-eval-run`), never
158
+ substituted into either template, for the reason in "What run_dir still owns" above.
159
+
72
160
  ## Judge persistence
73
161
 
74
162
  A judge transcript — tool calls, raw verdict, rendered prompt, system prompt — runs 10-100
@@ -453,6 +453,25 @@ container, never where the verifier looks. Confirmed live — the agent's output
453
453
  every criterion scored 0 as "file does not exist". `$(pwd)` is resolved by the container's
454
454
  shell at exec time and equals the WORKDIR because the exec is given no explicit cwd.
455
455
 
456
+ ### The artifacts default is CONTAINER_WORK_DIR, not a required field
457
+
458
+ Harbor's own artifact collection runs after the agent phase but before the verifier and
459
+ container teardown, snapshotting `task.toml`'s `artifacts` source to
460
+ `<trial>/artifacts/<source stripped of its leading slash>/` on the host.
461
+ `CoderEvalAgent`'s `--workspace-dir "$(pwd)"` runs the agent in-place at the container's
462
+ WORKDIR and skips coder-eval's own copy-out, so without an `artifacts` entry nothing the
463
+ agent produced would ever be visible on the host.
464
+
465
+ Defaults to `CONTAINER_WORK_DIR` (`/work`, coder-eval's own image WORKDIR) rather than
466
+ requiring every task/experiment to restate it — a package exported by coder-eval needs
467
+ coder-eval installed in the image, which in practice means derived from
468
+ `coder-eval-agent` (a mismatch already warns; see `_MISSING_CODER_EVAL_WARNING`). Unlike
469
+ `[environment].workdir` above — deliberately left unset so the container's own WORKDIR
470
+ decides `docker exec -w` — guessing wrong here is not fatal: a nonexistent source is a
471
+ best-effort collection miss recorded in the artifact manifest, not an exit 127. Declared
472
+ as a plain string, not an `ArtifactConfig` table, because Harbor normalizes
473
+ `artifacts = ["/x"]` to `ArtifactConfig(source="/x")` itself.
474
+
456
475
  ### What the export carries, and what it refuses to carry
457
476
 
458
477
  No Dockerfile is written unless the task sets `sandbox.docker.dockerfile_path` — only
@@ -2,6 +2,29 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.4 (2026-09-18)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **ci**: Silence bandit B108 on the throwaway Harbor run-dir path
10
+ ([#189](https://github.com/UiPath/coder_eval/pull/189),
11
+ [`db7f27c`](https://github.com/UiPath/coder_eval/commit/db7f27c7137fdb173c71948af8ec0389becd84e9))
12
+
13
+ - **orchestration**: Close blockers from the dir-template review round 2
14
+ ([#189](https://github.com/UiPath/coder_eval/pull/189),
15
+ [`db7f27c`](https://github.com/UiPath/coder_eval/commit/db7f27c7137fdb173c71948af8ec0389becd84e9))
16
+
17
+ - **orchestration**: Close code-review gaps in the dir-template split
18
+ ([#189](https://github.com/UiPath/coder_eval/pull/189),
19
+ [`db7f27c`](https://github.com/UiPath/coder_eval/commit/db7f27c7137fdb173c71948af8ec0389becd84e9))
20
+
21
+ ### Features
22
+
23
+ - **orchestration**: Describe the run layout as two independent directory templates
24
+ ([#189](https://github.com/UiPath/coder_eval/pull/189),
25
+ [`db7f27c`](https://github.com/UiPath/coder_eval/commit/db7f27c7137fdb173c71948af8ec0389becd84e9))
26
+
27
+
5
28
  ## v0.12.3 (2026-09-17)
6
29
 
7
30
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.12.3
3
+ Version: 0.12.4
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi) with sandboxed, reproducible YAML task suites.
5
5
  Project-URL: Homepage, https://coder-eval.com
6
6
  Project-URL: Repository, https://github.com/UiPath/coder_eval
@@ -25,7 +25,7 @@ inputs:
25
25
  version:
26
26
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
27
27
  required: false
28
- default: "0.12.3" # <-- kept in sync with releases by release.yml
28
+ default: "0.12.4" # <-- kept in sync with releases by release.yml
29
29
  extras:
30
30
  description: >-
31
31
  Comma-separated coder-eval extras (`codex`, `antigravity,litellm`), composed
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "coder-eval",
4
4
  "displayName": "Coder Eval",
5
- "version": "0.12.3",
5
+ "version": "0.12.4",
6
6
  "description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
7
7
  "author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
8
8
  "homepage": "https://coder-eval.com",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.12.3"
3
+ version = "0.12.4"
4
4
  description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi) with sandboxed, reproducible YAML task suites."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """coder_eval - A framework for evaluating AI coding agents."""
2
2
 
3
- __version__ = "0.12.3"
3
+ __version__ = "0.12.4"
@@ -189,13 +189,38 @@ def execute_command(
189
189
  "--workspace-dir",
190
190
  help=(
191
191
  "Run the single resolved task's agent in-place at this absolute path instead of the "
192
- "standard run_dir/artifacts workspace (copied out to run_dir/artifacts/<task> at "
192
+ "standard artifacts workspace named by --artifacts-dir (copied out there at "
193
193
  "cleanup). Requires exactly one resolved task; refused for sandbox.driver: docker "
194
194
  "(the docker driver already aligns automatically via sandbox.docker.working_dir). "
195
195
  "Meant for a Harbor `CoderEvalAgent` invocation, so the agent's writes land at the "
196
196
  "container's own WORKDIR, where Harbor's verifier phase looks for them."
197
197
  ),
198
198
  ),
199
+ logging_dir: str | None = typer.Option(
200
+ None,
201
+ "--logging-dir",
202
+ help=(
203
+ "Where task.json/task.log go, as a path template. Placeholders: ${run_dir}, "
204
+ "${variant}, ${task}, ${repeat}. Default reproduces <run_dir>/<variant>/<task>/<NN>. "
205
+ "A static path (e.g. /logs/agent) resolves every task to itself, so it is only for a "
206
+ "single-task run (e.g. Harbor); refused for sandbox.driver: docker and for more than "
207
+ "one resolved task."
208
+ ),
209
+ ),
210
+ artifacts_dir: str | None = typer.Option(
211
+ None,
212
+ "--artifacts-dir",
213
+ help=(
214
+ "Where the agent's artifacts go -- the FINAL directory, same placeholders as "
215
+ "--logging-dir, and independent of it (Harbor puts logs at /logs/agent and "
216
+ "artifacts at the container's WORKDIR). When it already holds the workspace "
217
+ "there is nothing to copy. Default reproduces <run_dir>/<variant>/<task>/<NN>/"
218
+ "artifacts/<task>. A static path is only for a single-task run; refused for "
219
+ "sandbox.driver: docker (the in-container Orchestrator has no way to receive it) "
220
+ "and for more than one resolved task, and refused together with --resume (it would "
221
+ "clear an operator-supplied tree the harness did not create)."
222
+ ),
223
+ ),
199
224
  ) -> None:
200
225
  """Run evaluation tasks WITHOUT checking their success criteria.
201
226
 
@@ -250,4 +275,6 @@ def execute_command(
250
275
  set_overrides=set_overrides,
251
276
  format=format,
252
277
  workspace_dir=workspace_dir,
278
+ logging_dir=logging_dir,
279
+ artifacts_dir=artifacts_dir,
253
280
  )
@@ -3,7 +3,6 @@
3
3
  import asyncio
4
4
  import logging
5
5
  import os
6
- import shutil
7
6
  import sys
8
7
  import urllib.error
9
8
  import urllib.parse
@@ -365,13 +364,38 @@ def run_command(
365
364
  "--workspace-dir",
366
365
  help=(
367
366
  "Run the single resolved task's agent in-place at this absolute path instead of the "
368
- "standard run_dir/artifacts workspace (copied out to run_dir/artifacts/<task> at "
367
+ "standard artifacts workspace named by --artifacts-dir (copied out there at "
369
368
  "cleanup). Requires exactly one resolved task; refused for sandbox.driver: docker "
370
369
  "(the docker driver already aligns automatically via sandbox.docker.working_dir). "
371
370
  "Meant for a Harbor `CoderEvalAgent` invocation, so the agent's writes land at the "
372
371
  "container's own WORKDIR, where Harbor's verifier phase looks for them."
373
372
  ),
374
373
  ),
374
+ logging_dir: str | None = typer.Option(
375
+ None,
376
+ "--logging-dir",
377
+ help=(
378
+ "Where task.json/task.log go, as a path template. Placeholders: ${run_dir}, "
379
+ "${variant}, ${task}, ${repeat}. Default reproduces <run_dir>/<variant>/<task>/<NN>. "
380
+ "A static path (e.g. /logs/agent) resolves every task to itself, so it is only for a "
381
+ "single-task run (e.g. Harbor); refused for sandbox.driver: docker and for more than "
382
+ "one resolved task."
383
+ ),
384
+ ),
385
+ artifacts_dir: str | None = typer.Option(
386
+ None,
387
+ "--artifacts-dir",
388
+ help=(
389
+ "Where the agent's artifacts go -- the FINAL directory, same placeholders as "
390
+ "--logging-dir, and independent of it (Harbor puts logs at /logs/agent and "
391
+ "artifacts at the container's WORKDIR). When it already holds the workspace "
392
+ "there is nothing to copy. Default reproduces <run_dir>/<variant>/<task>/<NN>/"
393
+ "artifacts/<task>. A static path is only for a single-task run; refused for "
394
+ "sandbox.driver: docker (the in-container Orchestrator has no way to receive it) "
395
+ "and for more than one resolved task, and refused together with --resume (it would "
396
+ "clear an operator-supplied tree the harness did not create)."
397
+ ),
398
+ ),
375
399
  ) -> None:
376
400
  """Run evaluation tasks (optionally in parallel).
377
401
 
@@ -424,9 +448,25 @@ def run_command(
424
448
  set_overrides=set_overrides,
425
449
  format=format,
426
450
  workspace_dir=workspace_dir,
451
+ logging_dir=logging_dir,
452
+ artifacts_dir=artifacts_dir,
427
453
  )
428
454
 
429
455
 
456
+ def _dir_template_overrides(logging_dir: str | None, artifacts_dir: str | None) -> dict[str, str]:
457
+ """Map the two CLI flags onto BatchRunConfig's template fields.
458
+
459
+ ``None`` is omitted rather than forwarded, so an unpassed flag leaves the
460
+ model default (today's layout) authoritative in exactly one place.
461
+ """
462
+ overrides: dict[str, str] = {}
463
+ if logging_dir is not None:
464
+ overrides["logging_dir_template"] = logging_dir
465
+ if artifacts_dir is not None:
466
+ overrides["artifacts_dir_template"] = artifacts_dir
467
+ return overrides
468
+
469
+
430
470
  def run_pipeline(
431
471
  *,
432
472
  grade: bool,
@@ -454,6 +494,8 @@ def run_pipeline(
454
494
  set_overrides: list[str],
455
495
  format: str | None = None,
456
496
  workspace_dir: Path | None = None,
497
+ logging_dir: str | None = None,
498
+ artifacts_dir: str | None = None,
457
499
  ) -> None:
458
500
  """The shared body of ``coder-eval run`` and ``coder-eval execute``.
459
501
 
@@ -474,6 +516,16 @@ def run_pipeline(
474
516
  # resumed workspace-dir run would never recognize its own prior result.
475
517
  if resume and workspace_dir is not None:
476
518
  raise typer.BadParameter("--resume is not supported together with --workspace-dir.")
519
+ # clear_rerun_artifacts rmtree's whatever artifacts_dir_template resolves to for a
520
+ # re-running task. The default template is always a directory the harness itself
521
+ # created (run_dir/.../artifacts/<task>), which is what makes that safe -- an
522
+ # operator-supplied --artifacts-dir points at a pre-existing tree the harness did
523
+ # not create and has no way to prove it owns.
524
+ if resume and artifacts_dir is not None:
525
+ raise typer.BadParameter(
526
+ "--resume is not supported together with --artifacts-dir -- clearing a re-running "
527
+ + "task's stale artifacts would rmtree an operator-supplied tree the harness didn't create."
528
+ )
477
529
  # Without --resume this flag parsed, was accepted, and did nothing at all. Its
478
530
  # sibling mode-scoped flag (`evaluate --workspace`) hard-errors on exactly this.
479
531
  if allow_host_grading and not resume:
@@ -539,6 +591,8 @@ def run_pipeline(
539
591
  grade=grade,
540
592
  format=format,
541
593
  workspace_dir=workspace_dir,
594
+ logging_dir=logging_dir,
595
+ artifacts_dir=artifacts_dir,
542
596
  )
543
597
  )
544
598
  except KeyboardInterrupt:
@@ -568,6 +622,8 @@ async def _run_all_tasks(
568
622
  grade: bool = True,
569
623
  format: str | None = None,
570
624
  workspace_dir: Path | None = None,
625
+ logging_dir: str | None = None,
626
+ artifacts_dir: str | None = None,
571
627
  ) -> None:
572
628
  """Async entry point for running all tasks (optionally in parallel).
573
629
 
@@ -590,6 +646,7 @@ async def _run_all_tasks(
590
646
  promotes it to `<run_dir>/trajectory.json` when the run wrote exactly one
591
647
  (a multi-task run is left nested; there is nothing to promote)
592
648
  workspace_dir: Run the agent here instead of run_dir/artifacts
649
+ logging_dir / artifacts_dir: path templates for the run layout (see run_command options)
593
650
  """
594
651
  # Prepare run directory
595
652
  run_dir = prepare_run_directory(run_dir)
@@ -617,6 +674,7 @@ async def _run_all_tasks(
617
674
  include_skipped=include_skipped,
618
675
  grade=grade,
619
676
  workspace_dir=workspace_dir,
677
+ **_dir_template_overrides(logging_dir, artifacts_dir),
620
678
  )
621
679
 
622
680
  from ..telemetry import flush_telemetry, track_event
@@ -657,20 +715,32 @@ async def _run_all_tasks(
657
715
  )
658
716
 
659
717
  # Aggregate task logs into run.log
718
+
719
+ # Over the resolved logging dirs, not a run_dir walk: an overridden
720
+ # logging_dir_template need not live under run_dir, and the walk would
721
+ # silently aggregate nothing (empty experiment.log, no error).
722
+ # summary.task_results rows are plain dicts (RunSummary persists them
723
+ # that way), carrying the same variant/task/replicate the logging dir was
724
+ # built from.
725
+ task_dirs = [
726
+ config.resolve_logging_dir(
727
+ row.get("variant_id") or "default",
728
+ row["task_id"],
729
+ row.get("replicate_index") or 0,
730
+ )
731
+ for row in summary.task_results
732
+ if row.get("task_id")
733
+ ]
734
+
660
735
  from ..logging_config import aggregate_task_logs
661
736
 
662
- aggregate_task_logs(run_dir)
737
+ aggregate_task_logs(run_dir, task_dirs=task_dirs)
663
738
 
664
739
  if format == "harbor":
665
740
  from ..harbor.atif_emit import emit_trajectories_for_run
666
741
 
667
- written = emit_trajectories_for_run(run_dir)
668
- console.print(f"[dim]Wrote {len(written)} trajectory.json (ATIF) file(s) under {run_dir}[/dim]")
669
-
670
- flat_trajectory_path = run_dir / "trajectory.json"
671
- if len(written) == 1 and written[0] != flat_trajectory_path:
672
- await asyncio.to_thread(shutil.copy2, written[0], flat_trajectory_path)
673
- console.print(f"[dim]Copied the single trajectory to {flat_trajectory_path}[/dim]")
742
+ written = emit_trajectories_for_run(task_dirs)
743
+ console.print(f"[dim]Wrote {len(written)} trajectory.json (ATIF) file(s)[/dim]")
674
744
 
675
745
  # Print execution summary
676
746
  print_execution_summary(run_dir, summary)
@@ -764,7 +834,7 @@ def _unreadable_row_placeholder(rt: ResolvedTask, error: Exception) -> Evaluatio
764
834
 
765
835
 
766
836
  async def _grade_resumed_tasks(
767
- to_grade: list[ResolvedTask], *, allow_host_grading: bool = False
837
+ to_grade: list[ResolvedTask], *, config: BatchRunConfig, allow_host_grading: bool = False
768
838
  ) -> list[tuple[ResolvedTask, TaskResult]]:
769
839
  """Grade the rows ``coder-eval execute`` left NOT_GRADED, in place.
770
840
 
@@ -799,7 +869,15 @@ async def _grade_resumed_tasks(
799
869
  prior = load_prior_result(rt.run_dir)
800
870
  # The reference check lives inside regrade_in_place, so a caller
801
871
  # cannot forget it.
802
- workspace = default_workspace(rt.run_dir, prior)
872
+ # The same template the run wrote with, so a workspace the template
873
+ # placed OUTSIDE run_dir is a trusted root rather than a containment
874
+ # failure -- which is what previously made --resume unusable alongside
875
+ # an overridden artifacts dir.
876
+ workspace = default_workspace(
877
+ rt.run_dir,
878
+ prior,
879
+ artifacts_dir=config.resolve_artifacts_dir(rt.variant_id, rt.task.task_id, rt.replicate_index),
880
+ )
803
881
  # Preserve the ungraded record BEFORE the orchestrator overwrites
804
882
  # task.json in this same directory.
805
883
  back_up_pre_grade_record(rt.run_dir)
@@ -860,7 +938,7 @@ async def _grade_resumed_tasks(
860
938
 
861
939
 
862
940
  async def _apply_resume(
863
- resolved: list[ResolvedTask], *, grade: bool, allow_host_grading: bool
941
+ resolved: list[ResolvedTask], *, config: BatchRunConfig, grade: bool, allow_host_grading: bool
864
942
  ) -> tuple[list[ResolvedTask], list[TaskResult], list[ResolvedTask]]:
865
943
  """Split a resumed run into what still needs running, and what is carried in.
866
944
 
@@ -879,7 +957,7 @@ async def _apply_resume(
879
957
  # Leftover artifacts from a partial run could let a file-based criterion pass on
880
958
  # the old output. to_grade is deliberately NOT cleared: its artifacts are what is
881
959
  # being graded.
882
- cleared = clear_rerun_artifacts(part.to_run)
960
+ cleared = clear_rerun_artifacts(part.to_run, config=config)
883
961
  # Checked explicitly rather than left to regrade_in_place's own per-row guard,
884
962
  # so the whole batch is refused up front instead of one row at a time.
885
963
  # Rationale: .claude/notes/orchestration.md § Refusing a criteria-free task under grade
@@ -892,7 +970,7 @@ async def _apply_resume(
892
970
  )
893
971
  # Reusing the trajectory and workspace already on disk rather than paying for
894
972
  # the agent twice. Folded in as prior_results so the summary covers them.
895
- for rt, tr in await _grade_resumed_tasks(part.to_grade, allow_host_grading=allow_host_grading):
973
+ for rt, tr in await _grade_resumed_tasks(part.to_grade, config=config, allow_host_grading=allow_host_grading):
896
974
  prior_results.append(tr)
897
975
  prior_resolved.append(rt)
898
976
  return part.to_run, prior_results, prior_resolved
@@ -1051,7 +1129,7 @@ async def _run_with_experiment(
1051
1129
  prior_resolved: list[ResolvedTask] = []
1052
1130
  if resume:
1053
1131
  to_run, prior_results, prior_resolved = await _apply_resume(
1054
- resolved, grade=grade, allow_host_grading=allow_host_grading
1132
+ resolved, config=config, grade=grade, allow_host_grading=allow_host_grading
1055
1133
  )
1056
1134
 
1057
1135
  # Against `to_run`, not `resolved`: an already-finalized row is never re-graded,
@@ -45,6 +45,13 @@ except ImportError: # pragma: no cover - defensive; coder_eval always defines t
45
45
  __version__ = "0.0.0"
46
46
 
47
47
 
48
+ # Run-level bookkeeping goes here and is discarded with the container. Anywhere
49
+ # outside the WORKDIR would do; /tmp is the one path guaranteed writable in every
50
+ # task image. NOT a bare "/tmp": a dedicated subdirectory keeps run.json/run.md/
51
+ # experiment.* from littering a directory tasks themselves use.
52
+ _THROWAWAY_RUN_DIR = "/tmp/coder-eval-run" # nosec B108 -- predictable path is fine: single-use, single-tenant container, no other process/user shares /tmp to race or symlink-plant it
53
+
54
+
48
55
  class CoderEvalAgent(BaseInstalledAgent):
49
56
  """Runs coder-eval's own agent loop as a Harbor agent.
50
57
 
@@ -76,20 +83,22 @@ class CoderEvalAgent(BaseInstalledAgent):
76
83
  async def run(self, instruction: str, environment: BaseEnvironment, context: AgentContext) -> None:
77
84
  """Run ``coder-eval execute --format harbor`` inside the environment.
78
85
 
79
- ``instruction`` is NOT forwarded: the agent-phase task.yaml already carries
80
- the identical resolved prompt. Token and cost totals are filled in afterward
81
- by ``populate_context_post_run``.
82
-
83
- ``--workspace-dir "$(pwd)"`` is load-bearing without it the tempdir sandbox
84
- writes the agent's workspace somewhere Harbor's verifier never looks.
86
+ ``instruction`` is NOT forwarded: the agent-phase task.yaml already carries the
87
+ identical resolved prompt. Token and cost totals are filled in afterward by
88
+ ``populate_context_post_run``. ``--workspace-dir "$(pwd)"`` is load-bearing --
89
+ without it the tempdir sandbox writes the agent's workspace somewhere Harbor's
90
+ verifier never looks. ``--logging-dir``/``--artifacts-dir`` are static paths, not
91
+ templates; ``--run-dir`` is a throwaway path outside the workspace.
85
92
 
86
- Rationale: .claude/notes/reporting.md § The non-obvious constraint in the emitted task.yaml
93
+ Rationale: .claude/notes/persistence.md § CoderEvalAgent passes both templates as static paths
87
94
  """
88
95
  del instruction, context # nothing to forward; context is populated post-run
89
96
  run_dir = self.environment_logs_dir.as_posix()
90
97
  command = (
91
98
  f"coder-eval execute {shlex.quote(AGENT_TASK_YAML_PATH)} --format harbor "
92
- f'--run-dir {shlex.quote(run_dir)} --workspace-dir "$(pwd)"'
99
+ f"--run-dir {_THROWAWAY_RUN_DIR} "
100
+ f'--workspace-dir "$(pwd)" '
101
+ f'--logging-dir {shlex.quote(run_dir)} --artifacts-dir "$(pwd)"'
93
102
  )
94
103
  await self._exec(environment, command)
95
104
 
@@ -17,6 +17,7 @@ Rationale: .claude/notes/reporting.md § Emitting
17
17
  from __future__ import annotations
18
18
 
19
19
  import logging
20
+ from collections.abc import Iterable
20
21
  from pathlib import Path
21
22
  from typing import Any
22
23
 
@@ -385,21 +386,24 @@ def write_trajectory_json(result: EvaluationResult, path: Path) -> Path | None:
385
386
  return None
386
387
 
387
388
 
388
- def emit_trajectories_for_run(run_dir: Path) -> list[Path]:
389
- """Write a ``trajectory.json`` sibling for every ``task.json`` under ``run_dir``.
389
+ def emit_trajectories_for_run(task_dirs: Iterable[Path]) -> list[Path]:
390
+ """Write a ``trajectory.json`` sibling for every ``task.json`` in ``task_dirs``.
390
391
 
391
- The ``--format harbor`` post-pass for ``coder-eval execute``: ATIF emission
392
- is opt-in (unlike the old always-on design this module's predecessor
393
- shipped), so a plain ``run``/``execute`` never gains a new output file.
394
- Walks the run directory rather than hooking the orchestrator's finalize
395
- path, keeping this package's "translate coder-eval's own artifacts"
396
- scope (see ``coder_eval.harbor``'s module docstring) it needs no access
397
- to orchestrator internals, only the ``task.json`` files a run already
398
- wrote. Per-task failures are logged and skipped (see
392
+ ``task_dirs`` are the per-task logging directories, resolved from the same
393
+ ``logging_dir_template`` the run wrote ``task.json`` with -- taken as an argument
394
+ rather than discovered by walking a run directory, since an overridden logging dir
395
+ need not live under ``run_dir`` at all. The ``--format harbor`` post-pass for
396
+ ``coder-eval execute``; opt-in, so a plain ``run``/``execute`` never gains a new
397
+ output file. Per-task failures are logged and skipped (see
399
398
  :func:`write_trajectory_json`), never aborting the rest of the run's export.
399
+
400
+ Rationale: .claude/notes/persistence.md § What run_dir still owns
400
401
  """
401
402
  written: list[Path] = []
402
- for task_json in sorted(run_dir.glob(f"**/{TASK_JSON_FILENAME}")):
403
+ for task_json in sorted({d / TASK_JSON_FILENAME for d in task_dirs}):
404
+ if not task_json.is_file():
405
+ logger.warning("No %s at %s — skipping ATIF emission", TASK_JSON_FILENAME, task_json)
406
+ continue
403
407
  try:
404
408
  result = EvaluationResult.model_validate_json(task_json.read_text(encoding="utf-8"))
405
409
  except (OSError, ValueError):