coder-eval 0.9.4__tar.gz → 0.9.6__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 (609) hide show
  1. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/harness-candidates.md +99 -0
  2. coder_eval-0.9.6/.github/actionlint.yaml +11 -0
  3. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/claude-pr-review.yml +1 -1
  4. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/codeql.yml +1 -1
  5. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/conventional-commits.yml +1 -1
  6. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/docker-publish.yml +6 -6
  7. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/docs.yml +5 -2
  8. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/pr-checks.yml +72 -19
  9. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/publish-testpypi.yml +4 -1
  10. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/workflows/release.yml +14 -13
  11. {coder_eval-0.9.4 → coder_eval-0.9.6}/CHANGELOG.md +167 -0
  12. {coder_eval-0.9.4 → coder_eval-0.9.6}/CLAUDE.md +13 -6
  13. {coder_eval-0.9.4 → coder_eval-0.9.6}/CONTRIBUTING.md +19 -0
  14. {coder_eval-0.9.4 → coder_eval-0.9.6}/Makefile +9 -1
  15. {coder_eval-0.9.4 → coder_eval-0.9.6}/PKG-INFO +18 -10
  16. {coder_eval-0.9.4 → coder_eval-0.9.6}/README.md +17 -9
  17. {coder_eval-0.9.4 → coder_eval-0.9.6}/action.yml +1 -1
  18. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/AB_EXPERIMENTS.md +7 -7
  19. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/CI_GATE.md +23 -13
  20. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/DIALOG_MODE.md +4 -3
  21. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/EXTENDING.md +2 -2
  22. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/REPORT_SCHEMA.md +3 -2
  23. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/TASK_DEFINITION_GUIDE.md +314 -102
  24. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/agents/CLAUDE_CODE.md +4 -3
  25. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/index.md +1 -1
  26. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/llms.txt +1 -1
  27. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/02-ci-pipeline.md +4 -2
  28. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/04-writing-a-task.md +1 -1
  29. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/README.md +18 -0
  30. coder_eval-0.9.6/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +138 -0
  31. coder_eval-0.9.6/evalboard/app/path-to-ga/page.tsx +132 -0
  32. coder_eval-0.9.6/evalboard/app/path-to-ga/task-table.tsx +197 -0
  33. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/package.json +1 -1
  34. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/pnpm-lock.yaml +42 -75
  35. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/early-stop-ab.yaml +8 -8
  36. {coder_eval-0.9.4 → coder_eval-0.9.6}/mkdocs.yml +1 -1
  37. {coder_eval-0.9.4 → coder_eval-0.9.6}/pyproject.toml +1 -1
  38. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/__init__.py +1 -1
  39. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/plan_command.py +1 -1
  40. coder_eval-0.9.6/src/coder_eval/criteria/cli_called.py +309 -0
  41. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/command_executed.py +144 -13
  42. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/file_check.py +7 -1
  43. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/file_contains.py +3 -0
  44. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/file_exists.py +6 -1
  45. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/file_matches_regex.py +4 -0
  46. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/json_check.py +7 -1
  47. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/reference_comparison.py +6 -6
  48. coder_eval-0.9.6/src/coder_eval/invocation_log.py +151 -0
  49. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/__init__.py +14 -1
  50. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/criteria.py +436 -86
  51. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/limits.py +49 -32
  52. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/results.py +20 -17
  53. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/sandbox.py +105 -0
  54. coder_eval-0.9.6/src/coder_eval/orchestration/early_stop.py +713 -0
  55. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/experiment.py +1 -1
  56. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestrator.py +49 -64
  57. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/pricing.py +10 -4
  58. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/reports.py +37 -9
  59. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/reports_experiment.py +1 -1
  60. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/reports_html.py +5 -8
  61. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/resources/default_ignore_patterns.yaml +7 -0
  62. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/sandbox.py +245 -15
  63. coder_eval-0.9.6/tasks/early_stop_decision_budget_exceeded.yaml +43 -0
  64. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/early_stop_weighted_high_weight_kills_run.yaml +14 -14
  65. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/early_stop_weighted_low_weight_absorbed.yaml +17 -16
  66. coder_eval-0.9.6/tests/lint/action_docs.py +232 -0
  67. coder_eval-0.9.6/tests/lint/rules/ce032_criteria_path_seam.py +50 -0
  68. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/runner.py +2 -0
  69. coder_eval-0.9.6/tests/test_cli_called_criterion.py +743 -0
  70. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_command_executed.py +354 -0
  71. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_custom_lint.py +203 -0
  72. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_early_stop.py +911 -342
  73. coder_eval-0.9.6/tests/test_glob_paths_in_file_criteria.py +253 -0
  74. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_merge_strategy_annotations.py +1 -0
  75. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reference_comparison_scoring.py +3 -0
  76. coder_eval-0.9.6/tests/test_sandbox_record_cli.py +506 -0
  77. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_success_criterion_union.py +1 -0
  78. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_threshold_enforcement.py +3 -2
  79. {coder_eval-0.9.4 → coder_eval-0.9.6}/uv.lock +1 -1
  80. coder_eval-0.9.4/evalboard/app/path-to-ga/page.tsx +0 -218
  81. coder_eval-0.9.4/src/coder_eval/orchestration/early_stop.py +0 -614
  82. coder_eval-0.9.4/tasks/early_stop_decision_budget_exceeded.yaml +0 -40
  83. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-code-review-full.md +0 -0
  84. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  85. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-code-review.md +0 -0
  86. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-create-plan.md +0 -0
  87. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-implement-plan.md +0 -0
  88. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-review.md +0 -0
  89. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-run-analysis.md +0 -0
  90. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/commands/coder-eval-task-create.md +0 -0
  91. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/shared/axes.md +0 -0
  92. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/shared/multi-model-review.md +0 -0
  93. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/shared/review-rubric.md +0 -0
  94. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/shared/run-layout.md +0 -0
  95. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/workflows/cr-axis.js +0 -0
  96. {coder_eval-0.9.4 → coder_eval-0.9.6}/.claude/workflows/cr-parent.js +0 -0
  97. {coder_eval-0.9.4 → coder_eval-0.9.6}/.env.example +0 -0
  98. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/CODEOWNERS +0 -0
  99. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  100. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  101. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  102. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/code_review.md +0 -0
  103. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/dependabot.yml +0 -0
  104. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/pages-stub/index.html +0 -0
  105. {coder_eval-0.9.4 → coder_eval-0.9.6}/.github/scripts/release_notes.py +0 -0
  106. {coder_eval-0.9.4 → coder_eval-0.9.6}/.gitignore +0 -0
  107. {coder_eval-0.9.4 → coder_eval-0.9.6}/.pre-commit-config.yaml +0 -0
  108. {coder_eval-0.9.4 → coder_eval-0.9.6}/.python-version +0 -0
  109. {coder_eval-0.9.4 → coder_eval-0.9.6}/ADOPTERS.md +0 -0
  110. {coder_eval-0.9.4 → coder_eval-0.9.6}/CODE_OF_CONDUCT.md +0 -0
  111. {coder_eval-0.9.4 → coder_eval-0.9.6}/LICENSE +0 -0
  112. {coder_eval-0.9.4 → coder_eval-0.9.6}/NOTICE +0 -0
  113. {coder_eval-0.9.4 → coder_eval-0.9.6}/SECURITY.md +0 -0
  114. {coder_eval-0.9.4 → coder_eval-0.9.6}/docker/Dockerfile +0 -0
  115. {coder_eval-0.9.4 → coder_eval-0.9.6}/docker/Dockerfile.runtime +0 -0
  116. {coder_eval-0.9.4 → coder_eval-0.9.6}/docker/coder_eval_entrypoint.sh +0 -0
  117. {coder_eval-0.9.4 → coder_eval-0.9.6}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  118. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/DATASETS.md +0 -0
  119. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/DOCKER_ISOLATION.md +0 -0
  120. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/USER_GUIDE.md +0 -0
  121. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/agents/ANTIGRAVITY.md +0 -0
  122. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/agents/CODEX.md +0 -0
  123. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/assets/hero.gif +0 -0
  124. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/comparison.md +0 -0
  125. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/01-first-evaluation.md +0 -0
  126. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/03-evalboard-local.md +0 -0
  127. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/05-comparing-models.md +0 -0
  128. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/06-use-docker-isolation.md +0 -0
  129. {coder_eval-0.9.4 → coder_eval-0.9.6}/docs/tutorials/README.md +0 -0
  130. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/.gitignore +0 -0
  131. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  132. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  133. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  134. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/col-help.tsx +0 -0
  135. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  136. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/harness-badge.tsx +0 -0
  137. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/harness-selector.tsx +0 -0
  138. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/scroll-table.tsx +0 -0
  139. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/search-box.tsx +0 -0
  140. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/unit-toggle.tsx +0 -0
  141. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_components/version-list.tsx +0 -0
  142. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  143. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  144. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/daily-chart.tsx +0 -0
  145. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/harness-legend.tsx +0 -0
  146. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/harness-series.ts +0 -0
  147. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/tag-rail.tsx +0 -0
  148. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  149. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/_overview/window-summary.tsx +0 -0
  150. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/api/download/route.ts +0 -0
  151. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/api/file/route.ts +0 -0
  152. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  153. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/api/refresh/route.ts +0 -0
  154. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/error.tsx +0 -0
  155. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/globals.css +0 -0
  156. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/icon.png +0 -0
  157. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/layout.tsx +0 -0
  158. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/page.tsx +0 -0
  159. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  160. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/trends/actions.ts +0 -0
  161. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/trends/page.tsx +0 -0
  162. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/trends/trends-view.tsx +0 -0
  163. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  164. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/watchlist/page.tsx +0 -0
  165. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  166. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/next-env.d.ts +0 -0
  167. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/next.config.mjs +0 -0
  168. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/postcss.config.mjs +0 -0
  169. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/public/harness/antigravity.png +0 -0
  170. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/public/harness/claude-code.png +0 -0
  171. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/public/harness/codex.png +0 -0
  172. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/public/uipath.png +0 -0
  173. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/tailwind.config.ts +0 -0
  174. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/tsconfig.json +0 -0
  175. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/vitest.config.ts +0 -0
  176. {coder_eval-0.9.4 → coder_eval-0.9.6}/evalboard/vitest.setup.ts +0 -0
  177. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/default.yaml +0 -0
  178. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/model-comparison.yaml +0 -0
  179. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/permissions-smoke.yaml +0 -0
  180. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/plugin-comparison.yaml +0 -0
  181. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/prompt-mutations-example.yaml +0 -0
  182. {coder_eval-0.9.4 → coder_eval-0.9.6}/experiments/smoke_variants.yaml +0 -0
  183. {coder_eval-0.9.4 → coder_eval-0.9.6}/litellm/README.md +0 -0
  184. {coder_eval-0.9.4 → coder_eval-0.9.6}/litellm/cost_logger.py +0 -0
  185. {coder_eval-0.9.4 → coder_eval-0.9.6}/litellm/litellm-config.yaml +0 -0
  186. {coder_eval-0.9.4 → coder_eval-0.9.6}/litellm/start-litellm.sh +0 -0
  187. {coder_eval-0.9.4 → coder_eval-0.9.6}/osv-scanner.toml +0 -0
  188. {coder_eval-0.9.4 → coder_eval-0.9.6}/scripts/check_commit_msg.sh +0 -0
  189. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/.gitattributes +0 -0
  190. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agent.py +0 -0
  191. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/__init__.py +0 -0
  192. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/_logging.py +0 -0
  193. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/antigravity_agent.py +0 -0
  194. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/claude_code_agent.py +0 -0
  195. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/codex_agent.py +0 -0
  196. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/noop_agent.py +0 -0
  197. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/registry.py +0 -0
  198. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/agents/watchdog.py +0 -0
  199. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/analysis.py +0 -0
  200. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/__init__.py +0 -0
  201. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/aggregate_command.py +0 -0
  202. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/console.py +0 -0
  203. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/evaluate_command.py +0 -0
  204. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/report_command.py +0 -0
  205. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/run_command.py +0 -0
  206. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/run_helpers.py +0 -0
  207. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  208. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/cli/utils.py +0 -0
  209. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/config.py +0 -0
  210. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/__init__.py +0 -0
  211. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  212. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/agent_judge.py +0 -0
  213. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/base.py +0 -0
  214. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/classification_match.py +0 -0
  215. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  216. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/llm_judge.py +0 -0
  217. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/run_command.py +0 -0
  218. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/skill_triggered.py +0 -0
  219. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/criteria/uipath_eval.py +0 -0
  220. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/__init__.py +0 -0
  221. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/agent.py +0 -0
  222. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/budget.py +0 -0
  223. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/categories.py +0 -0
  224. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/categorization.py +0 -0
  225. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/checker_misuse.py +0 -0
  226. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/executor.py +0 -0
  227. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/judge.py +0 -0
  228. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/retry.py +0 -0
  229. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/errors/timeout.py +0 -0
  230. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/__init__.py +0 -0
  231. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/checker.py +0 -0
  232. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  233. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  234. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_context.py +0 -0
  235. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_models.py +0 -0
  236. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  237. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/judge_usage.py +0 -0
  238. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/sub_agent.py +0 -0
  239. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/summaries.py +0 -0
  240. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  241. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/formatting.py +0 -0
  242. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/isolation/__init__.py +0 -0
  243. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/isolation/docker_runner.py +0 -0
  244. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/litellm_cost.py +0 -0
  245. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/logging_config.py +0 -0
  246. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/agent_config.py +0 -0
  247. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/container_paths.py +0 -0
  248. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/enums.py +0 -0
  249. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/experiment.py +0 -0
  250. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/judge.py +0 -0
  251. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/judge_defaults.py +0 -0
  252. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/merge_strategy.py +0 -0
  253. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/mutations.py +0 -0
  254. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/routing.py +0 -0
  255. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/tasks.py +0 -0
  256. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/telemetry.py +0 -0
  257. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/models/templates.py +0 -0
  258. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/__init__.py +0 -0
  259. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/batch.py +0 -0
  260. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/config.py +0 -0
  261. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/config_merge.py +0 -0
  262. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/evaluation.py +0 -0
  263. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/overrides.py +0 -0
  264. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/orchestration/task_loader.py +0 -0
  265. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/path_utils.py +0 -0
  266. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/plugins.py +0 -0
  267. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/py.typed +0 -0
  268. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/reports_junit.py +0 -0
  269. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/reports_stats.py +0 -0
  270. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/resources/__init__.py +0 -0
  271. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/resources/tags.yaml +0 -0
  272. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/__init__.py +0 -0
  273. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/ast_similarity.py +0 -0
  274. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/complexity.py +0 -0
  275. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/quality.py +0 -0
  276. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/signature_similarity.py +0 -0
  277. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/similarity.py +0 -0
  278. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/scoring/token_similarity.py +0 -0
  279. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/simulation/__init__.py +0 -0
  280. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/simulation/termination.py +0 -0
  281. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/simulation/user_simulator.py +0 -0
  282. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/__init__.py +0 -0
  283. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/callbacks.py +0 -0
  284. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/collector.py +0 -0
  285. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/events.py +0 -0
  286. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/renderers.py +0 -0
  287. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/streaming/wire.py +0 -0
  288. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/telemetry.py +0 -0
  289. {coder_eval-0.9.4 → coder_eval-0.9.6}/src/coder_eval/utils.py +0 -0
  290. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/README.md +0 -0
  291. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agentless_smoke_test.yaml +0 -0
  292. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/antigravity_hello_world.yaml +0 -0
  293. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  294. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/claude_hello_world.yaml +0 -0
  295. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  296. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  297. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/claude_subagent_test.yaml +0 -0
  298. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  299. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_hello_world.yaml +0 -0
  300. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_parallel_commands.yaml +0 -0
  301. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  302. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_skills_test.yaml +0 -0
  303. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_string_utils.yaml +0 -0
  304. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/codex_subagent_test.yaml +0 -0
  305. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  306. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/agents/subagent_merge_sort.yaml +0 -0
  307. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/byod_smoke_test.yaml +0 -0
  308. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dataset_example.yaml +0 -0
  309. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/datasets/sentiment.jsonl +0 -0
  310. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  311. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  312. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  313. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  314. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  315. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  316. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/fibonacci_with_template.yaml +0 -0
  317. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/hello_date.yaml +0 -0
  318. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/inline_starter_example.yaml +0 -0
  319. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/internal/session_resumption.yaml +0 -0
  320. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_smoke.yaml +0 -0
  321. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  322. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  323. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  324. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  325. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  326. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  327. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  328. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  329. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  330. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  331. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  332. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  333. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/README.md +0 -0
  334. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  335. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  336. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  337. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  338. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  339. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  340. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  341. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  342. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  343. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  344. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/sentiment_classification.yaml +0 -0
  345. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_agent_judge.yaml +0 -0
  346. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_budget_exceeded.yaml +0 -0
  347. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  348. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_llm_judge.yaml +0 -0
  349. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_negative_path.yaml +0 -0
  350. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_task_timeout.yaml +0 -0
  351. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/smoke_variants.yaml +0 -0
  352. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/test_sandbox.yaml +0 -0
  353. {coder_eval-0.9.4 → coder_eval-0.9.6}/tasks/token_check.yaml +0 -0
  354. {coder_eval-0.9.4 → coder_eval-0.9.6}/templates/byod_smoke_test/Dockerfile +0 -0
  355. {coder_eval-0.9.4 → coder_eval-0.9.6}/templates/fibonacci-starter/README.md +0 -0
  356. {coder_eval-0.9.4 → coder_eval-0.9.6}/templates/fibonacci-starter/src/main.py +0 -0
  357. {coder_eval-0.9.4 → coder_eval-0.9.6}/templates/fibonacci-starter/tests/test_main.py +0 -0
  358. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/__init__.py +0 -0
  359. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/__init__.py +0 -0
  360. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/__init__.py +0 -0
  361. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  362. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  363. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  364. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  365. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  366. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  367. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  368. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  369. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  370. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  371. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  372. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  373. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  374. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  375. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  376. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  377. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  378. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  379. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  380. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  381. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  382. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  383. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  384. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  385. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  386. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  387. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  388. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  389. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/_path_helpers.py +0 -0
  390. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/conftest.py +0 -0
  391. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/__init__.py +0 -0
  392. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  393. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  394. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/mock_agent.py +0 -0
  395. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  396. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  397. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  398. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/fixtures/text_stub_agent.py +0 -0
  399. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/__init__.py +0 -0
  400. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/dead_config_fields.py +0 -0
  401. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/doc_env_parity.py +0 -0
  402. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/doc_examples.py +0 -0
  403. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/doc_indexes.py +0 -0
  404. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/doc_schema_parity.py +0 -0
  405. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/__init__.py +0 -0
  406. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/base.py +0 -0
  407. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  408. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  409. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  410. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  411. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  412. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  413. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  414. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  415. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  416. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  417. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  418. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_agent_timing_access.py +0 -0
  419. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  420. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  421. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_silent_except.py +0 -0
  422. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  423. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  424. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  425. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  426. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/open_explicit_encoding.py +0 -0
  427. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  428. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/register_criterion_required.py +0 -0
  429. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  430. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  431. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/lint/violation.py +0 -0
  432. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_action_version_pin.py +0 -0
  433. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent.py +0 -0
  434. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_config_no_timing_fields.py +0 -0
  435. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_config_optional_type.py +0 -0
  436. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_config_registry_dispatch.py +0 -0
  437. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_config_sdk_decoupling.py +0 -0
  438. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_golden_master.py +0 -0
  439. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_judge_criterion.py +0 -0
  440. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_telemetry.py +0 -0
  441. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_telemetry_advanced.py +0 -0
  442. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agent_timeout.py +0 -0
  443. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_agentless.py +0 -0
  444. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_aggregate.py +0 -0
  445. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_antigravity_agent.py +0 -0
  446. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_byoa_plugin.py +0 -0
  447. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_byoa_plugin_live.py +0 -0
  448. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_byod_feature.py +0 -0
  449. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_check_all_async.py +0 -0
  450. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_checker_logging.py +0 -0
  451. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_classification_match.py +0 -0
  452. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_claude_settings_enforcement_live.py +0 -0
  453. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cleanup_preservation_guard.py +0 -0
  454. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_backend_flag.py +0 -0
  455. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_empty_glob.py +0 -0
  456. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_sdk_options.py +0 -0
  457. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_set_overrides.py +0 -0
  458. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_telemetry.py +0 -0
  459. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cli_type_flag.py +0 -0
  460. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_code_review_bugs.py +0 -0
  461. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_codex_agent.py +0 -0
  462. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_codex_agent_live.py +0 -0
  463. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_codex_agent_unit.py +0 -0
  464. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_codex_token_mapping.py +0 -0
  465. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_command_statistics.py +0 -0
  466. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_command_telemetry_result_data.py +0 -0
  467. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_commands_efficiency.py +0 -0
  468. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_config_lineage.py +0 -0
  469. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_config_merge_engine.py +0 -0
  470. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_config_precedence.py +0 -0
  471. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_continuous_scoring.py +0 -0
  472. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_cost_accounting_paths.py +0 -0
  473. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_criterion_result_round_trip.py +0 -0
  474. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_dataset_expansion.py +0 -0
  475. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_debug_logging.py +0 -0
  476. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_build_failure.py +0 -0
  477. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_litellm_env.py +0 -0
  478. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_runner_container_death.py +0 -0
  479. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_runner_mounts.py +0 -0
  480. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_runner_stream_limit.py +0 -0
  481. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_wildcard_env.py +0 -0
  482. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_docker_workdir_live.py +0 -0
  483. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_driver_resolver.py +0 -0
  484. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_error_handling.py +0 -0
  485. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_evaluate_command.py +0 -0
  486. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_evaluator.py +0 -0
  487. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_event_collector.py +0 -0
  488. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_cli.py +0 -0
  489. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_loader.py +0 -0
  490. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_models.py +0 -0
  491. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_reports.py +0 -0
  492. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_resolver.py +0 -0
  493. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_experiment_runner.py +0 -0
  494. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_file_check.py +0 -0
  495. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_file_contains_scoring.py +0 -0
  496. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_formatting.py +0 -0
  497. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_git_clone_failure.py +0 -0
  498. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_heartbeat_watchdog.py +0 -0
  499. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_ignore_patterns_negation.py +0 -0
  500. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_image_from_dockerfiles.py +0 -0
  501. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_integration.py +0 -0
  502. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_json_check.py +0 -0
  503. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_anthropic.py +0 -0
  504. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_bedrock.py +0 -0
  505. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_burn_in_live.py +0 -0
  506. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_context_builder.py +0 -0
  507. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_models.py +0 -0
  508. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_judge_persistence.py +0 -0
  509. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_lint_no_top_level_run_limits.py +0 -0
  510. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_lint_runner.py +0 -0
  511. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_litellm_config.py +0 -0
  512. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_litellm_cost.py +0 -0
  513. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_litellm_cost_logger.py +0 -0
  514. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_litellm_route.py +0 -0
  515. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_llm_judge_criterion.py +0 -0
  516. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_log_tail_buffer.py +0 -0
  517. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_logging.py +0 -0
  518. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_logging_isolation.py +0 -0
  519. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_merge_characterization.py +0 -0
  520. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_merge_unification.py +0 -0
  521. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_models.py +0 -0
  522. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_mutations.py +0 -0
  523. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_new_criteria.py +0 -0
  524. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_node_env_config.py +0 -0
  525. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_optional_dependencies.py +0 -0
  526. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_orchestrator.py +0 -0
  527. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_orchestrator_error_log_tail.py +0 -0
  528. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_orchestrator_telemetry.py +0 -0
  529. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_overrides_engine.py +0 -0
  530. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_parallel.py +0 -0
  531. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_path_utils.py +0 -0
  532. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_plan_command.py +0 -0
  533. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_plugin_processing.py +0 -0
  534. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_plugins.py +0 -0
  535. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_post_run.py +0 -0
  536. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_pr_review_workflow.py +0 -0
  537. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_pre_run.py +0 -0
  538. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_preservation_mode.py +0 -0
  539. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_pricing_registry.py +0 -0
  540. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reference_evaluator.py +0 -0
  541. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reference_missing_file.py +0 -0
  542. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reference_models.py +0 -0
  543. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reference_orchestrator.py +0 -0
  544. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_registry.py +0 -0
  545. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_release_notes.py +0 -0
  546. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_replicate_stats.py +0 -0
  547. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_report_command.py +0 -0
  548. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports.py +0 -0
  549. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports_experiment.py +0 -0
  550. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports_html.py +0 -0
  551. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports_junit.py +0 -0
  552. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports_stats.py +0 -0
  553. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_reports_stats_nonfinite.py +0 -0
  554. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_resolve_task_files.py +0 -0
  555. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_resume.py +0 -0
  556. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_retry_logic_comprehensive.py +0 -0
  557. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_route_seam_exhaustiveness.py +0 -0
  558. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_routing.py +0 -0
  559. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_command_junit.py +0 -0
  560. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_command_stdout.py +0 -0
  561. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_limits_models.py +0 -0
  562. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_limits_orchestrator.py +0 -0
  563. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_limits_resolver.py +0 -0
  564. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_run_metrics.py +0 -0
  565. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_runtime_tool_versions.py +0 -0
  566. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox.py +0 -0
  567. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox_layer_builder.py +0 -0
  568. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox_optional.py +0 -0
  569. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox_security.py +0 -0
  570. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox_symlink_preservation.py +0 -0
  571. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sandbox_templates.py +0 -0
  572. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_scorers.py +0 -0
  573. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_scoring_quality.py +0 -0
  574. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sdk_option_classification.py +0 -0
  575. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_simulation_config.py +0 -0
  576. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_simulation_integration.py +0 -0
  577. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_simulation_termination.py +0 -0
  578. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_simulation_trials.py +0 -0
  579. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_skill_triggered.py +0 -0
  580. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_agent_integration.py +0 -0
  581. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_batch.py +0 -0
  582. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_callbacks.py +0 -0
  583. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_cli.py +0 -0
  584. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_events.py +0 -0
  585. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_orchestrator.py +0 -0
  586. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_renderers.py +0 -0
  587. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_streaming_wire.py +0 -0
  588. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_sub_agent_runner.py +0 -0
  589. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_suite_rollup.py +0 -0
  590. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_summaries.py +0 -0
  591. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_tags.py +0 -0
  592. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_task_definition_unknown_fields.py +0 -0
  593. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_teardown_interrupt.py +0 -0
  594. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_telemetry.py +0 -0
  595. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_template_env_expansion.py +0 -0
  596. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_timeout_batch.py +0 -0
  597. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_timeout_categorization.py +0 -0
  598. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_timeout_exceptions.py +0 -0
  599. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_timeout_models.py +0 -0
  600. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_timeout_orchestrator.py +0 -0
  601. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_token_usage.py +0 -0
  602. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_uipath_eval.py +0 -0
  603. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_user_simulator.py +0 -0
  604. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_utils.py +0 -0
  605. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_utterance_extraction.py +0 -0
  606. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_variant_prompt_file.py +0 -0
  607. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_verdict_tool.py +0 -0
  608. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_watchdog.py +0 -0
  609. {coder_eval-0.9.4 → coder_eval-0.9.6}/tests/test_yaml_migration.py +0 -0
@@ -107,3 +107,102 @@ Deferred lint/test guardrails surfaced during reviews. Promote to a `CExxx` rule
107
107
  caught them. The cleanup plan explicitly deferred this as YAGNI for the
108
108
  one-time purge, but any future doc rename/deletion re-opens the same blind
109
109
  spot — caught in the 2026-07-03 open-source-docs-cleanup implementation run.
110
+
111
+ ## From PR #77 (command-executed shell-normalize) — CE030-to-criteria deferred
112
+
113
+ - [ ] **Extend CE030 doc/schema-parity to the `SuccessCriterion` union** so a new
114
+ criterion (or field) can't ship undocumented. Attempted in PR #77 and reverted:
115
+ CI installs `--extra uipath`, and in that environment `coder_eval.models.criteria`
116
+ gains a `CliCalledCriterion` (fields `log`/`positional`) that is NOT present in a
117
+ plain checkout (it did not reproduce on macOS, whose lockfile resolution omits the
118
+ contributing linux-only component). It defeated every discriminator tried — union
119
+ membership, a `__module__` string filter (it is spoofed to `coder_eval.models.criteria`),
120
+ a genuine-module-attribute scan (it is `setattr` onto the module), and even an AST
121
+ parse of the `SuccessCriterion` union literal in `criteria.py` source (CI's imported
122
+ criteria module resolves to a file whose union literal already contains it). No
123
+ runtime OR source signal available in the lint could separate the injected criterion
124
+ from an in-tree one. Revisit only with a way to identify the in-tree criterion set that
125
+ is provably immune to the uipath integration — e.g. a hardcoded name allowlist of the
126
+ in-tree criteria (losing auto-coverage of new ones), or first understanding exactly how
127
+ that environment injects the criterion. Until then CE030 stays scoped to the four
128
+ top-level models; the `command_pattern`/`exclude_pattern` contract this PR changed is
129
+ documented in the Field descriptions and TASK_DEFINITION_GUIDE regardless.
130
+
131
+ ## From the evalboard Path-to-GA de-tag / mature-passes fix (4e5bbc4…dd5f7e9) — TS-side guards deferred
132
+
133
+ Context: the CExxx harness is a **Python** AST runner over `src/coder_eval/`, so none
134
+ of the invariants below are mechanizable in it. Each would need a TypeScript lint
135
+ harness (eslint config + custom rules) that `evalboard/` does not have today —
136
+ standing one up for three call sites fails the KISS/YAGNI gate. Deferring rather
137
+ than dropping; promote if a fourth TS-side invariant appears, and stand up the
138
+ harness once for all of them.
139
+
140
+ > **Update (PR #94 review round 2).** The *execution* half of this gap is closed:
141
+ > `evalboard/` is now gated by the `evalboard` job in `.github/workflows/pr-checks.yml`
142
+ > and reachable locally via `make evalboard-verify`, so the vitest suite (including
143
+ > the pricing drift guard) is enforcement rather than documentation. What remains
144
+ > deferred below is the *static-analysis* half — eslint has still not been stood up.
145
+ > The review that prompted this round names four more candidate TS rules (raw
146
+ > `status === "SUCCESS"` outside `lib/status.ts`; DOM-global shadowing in props;
147
+ > inline copies of the tag predicate; per-run tooltip copy reused on aggregate
148
+ > surfaces), which meets the "fourth invariant" promotion bar stated above —
149
+ > **stand up eslint next time `evalboard/` is touched substantively.**
150
+
151
+ - [ ] **"Every consumer of `RunOverviewTask.matureSkipped` must decide explicitly
152
+ whether a carry-forward row counts."** Four consumers now, and they deliberately
153
+ DISAGREE: `lib/trends.ts` and `app/runs/[id]/run-view.tsx` count a mature skip as
154
+ a pass; `lib/overview.ts::buildTagTaskRows` excludes it from both terms
155
+ (`/path-to-ga` is a GA-readiness page). A new consumer silently inheriting either
156
+ convention is a real hazard. Guard shape: flag a file that reads `.matureSkipped`
157
+ without a nearby comment naming its convention — weak, hence the deferral. Closed
158
+ for now by unit tests that assert the exclusion from BOTH numerator and denominator
159
+ (`lib/__tests__/overview.test.ts` → `describe("buildTagTaskRows")`).
160
+
161
+ - [x] ~~**`taskCarriesRepoTag` is the single repo-provenance tag predicate — but one
162
+ duplicate survives.**~~ **RESOLVED in PR #94 review round 2.** The predicate moved to
163
+ a dependency-free `lib/tags.ts` (structurally typed on `{skill, tags}` so
164
+ `RunOverviewTask`, `TaskResultSummary` and `TaskTrend` all satisfy it), re-exported
165
+ from `lib/overview.ts` for existing callers. Both inline copies now import it:
166
+ `app/runs/[id]/run-view.tsx` (the `"use client"` one that could not before) and
167
+ `lib/trends.ts::trendMatchesTag` (a third copy the original deferral missed).
168
+ Still worth a lint rule ("no inline `tags.includes(x) || skill === x`") to catch
169
+ future copies — folded into the eslint promotion noted above.
170
+
171
+ - [ ] **The de-tag rule fails CLOSED on a newest run that loads fine but stamps no
172
+ `tags`** (`lib/overview.ts::buildTagTaskRows`): every tagged task would read as
173
+ de-tagged and the table would empty, rendering an empty state indistinguishable from
174
+ a genuine full de-tagging. Its sibling failure mode (`overview == null`, a transient
175
+ blob read failure) IS guarded, with exactly this rationale. Currently unreachable —
176
+ 0 of ~116k date-shaped non-ad-hoc task rows in `runs-remote/` lack `tags`, and the
177
+ six zero-tag runs found are all ad-hoc (filtered upstream by id shape + `meta.adhoc`)
178
+ — so the barrier is two upstream filters rather than a check at the seam. Left
179
+ unguarded on purpose: a `if (taggedInRun.size === 0) skip the de-tag signal` guard
180
+ would also mask a real, total de-tagging. Revisit if the pipeline ever stops
181
+ stamping tags, or if a non-ad-hoc run legitimately carries zero tagged rows.
182
+
183
+ - [ ] **Discriminating-test discipline for predicate narrowings.** Two tests in this
184
+ change passed for the wrong reason — a downstream rule (the de-tag drop) masked the
185
+ mutation they claimed to catch — and the plan leaned on a `grep` acceptance criterion
186
+ that CI never runs. Both were found by mutation-testing the suite and fixed. No
187
+ mechanizable guard; the durable lesson is: when a test names a narrowing, construct
188
+ the fixture so the row SURVIVES every other rule, or the assertion proves nothing.
189
+
190
+ - [ ] **CE034 — runner-label registry + dogfood runner parity** over
191
+ `.github/workflows/*.yml`. Two clauses: (a) every label a job can land on must appear
192
+ in `.github/actionlint.yaml`'s `self-hosted-runner.labels` or a stock GitHub-hosted
193
+ allowlist — including *both* branches of an expression-valued `runs-on:`, which
194
+ actionlint treats as opaque; (b) `action-dogfood`'s label must equal the one the
195
+ consumer snippet in `docs/tutorials/02-ci-pipeline.md` advertises. Nothing guards
196
+ either today: actionlint is not wired into `make verify` or pre-commit (grep: the
197
+ config file is its only mention), and CE026 parses that job's prerequisite *steps*
198
+ but never its `runs-on:`. Why it matters: an undeclared label is not a runtime error,
199
+ the job queues until GitHub cancels it hours later — indistinguishable from a pool
200
+ outage; and a repo-wide `runs-on:` migration has twice swept up `action-dogfood`
201
+ (#306, then 027121e in this PR), which exists precisely to prove the published Action
202
+ works on the image external integrators use. Implemented and verified once (both
203
+ clauses caught their regression class on the real tree) but reverted as out of
204
+ proportion to a 16-line runner migration — ~240 lines including tests. Note when
205
+ writing it: discriminate labels from expression operands structurally, on the
206
+ preceding `&&`/`||`, NOT on the string's shape — a "contains 'ubuntu'" heuristic
207
+ silently fails on `uipath-ubunut-latest`, the exact transposition typo the rule is
208
+ for. Caught in the multi-model review of PR #86.
@@ -0,0 +1,11 @@
1
+ # Declares this repo's custom runner labels so actionlint stops reporting them as
2
+ # unknown. Advisory only: nothing in `make verify` runs actionlint, so this file helps
3
+ # a local run or an editor integration and is not a gate.
4
+ #
5
+ # These are UiPath's centralized managed GitHub pool labels. Jobs that deliberately
6
+ # stay on stock `ubuntu-latest` say why at their own `runs-on:`.
7
+ self-hosted-runner:
8
+ labels:
9
+ - uipath-ubuntu-latest
10
+ - uipath-ubuntu-24.04
11
+ - uipath-windows-latest
@@ -22,7 +22,7 @@ permissions: {}
22
22
  jobs:
23
23
  claude-review:
24
24
  name: Claude Code Review
25
- runs-on: ubuntu-latest
25
+ runs-on: uipath-ubuntu-latest
26
26
  timeout-minutes: 15
27
27
 
28
28
  # Trusted triggers only — this repo is public.
@@ -16,7 +16,7 @@ permissions:
16
16
  jobs:
17
17
  analyze:
18
18
  name: Analyze Python code
19
- runs-on: ubuntu-latest
19
+ runs-on: uipath-ubuntu-latest
20
20
  timeout-minutes: 15
21
21
  permissions:
22
22
  security-events: write
@@ -16,7 +16,7 @@ permissions:
16
16
  jobs:
17
17
  check-conventional-commits:
18
18
  name: Check PR Title & Commit Messages
19
- runs-on: ubuntu-latest
19
+ runs-on: uipath-ubuntu-latest
20
20
  timeout-minutes: 5
21
21
 
22
22
  steps:
@@ -41,13 +41,13 @@ env:
41
41
  jobs:
42
42
  publish:
43
43
  name: Build and push to GHCR
44
- runs-on: ubuntu-latest
44
+ runs-on: uipath-ubuntu-latest
45
45
  # Skip semantic-release's own commit so we don't double-build on the
46
46
  # version-bump push.
47
47
  if: "!contains(github.event.head_commit.message, 'chore(release):')"
48
48
  timeout-minutes: 30
49
- env:
50
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: "openai-codex-cli-bin,openai-codex"
49
+ # No SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS on purpose: nothing installs on the
50
+ # host here, and the Docker build doesn't inherit job env (it uses its own ARG).
51
51
 
52
52
  steps:
53
53
  - name: Checkout code
@@ -65,17 +65,17 @@ jobs:
65
65
  echo "owner_lc=${OWNER_LC}" >> "$GITHUB_OUTPUT"
66
66
 
67
67
  - name: Set up Docker Buildx
68
- uses: docker/setup-buildx-action@v3
68
+ uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
69
69
 
70
70
  - name: Log in to GHCR
71
- uses: docker/login-action@v3
71
+ uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
72
72
  with:
73
73
  registry: ${{ env.REGISTRY }}
74
74
  username: ${{ github.actor }}
75
75
  password: ${{ secrets.GITHUB_TOKEN }}
76
76
 
77
77
  - name: Build and push image
78
- uses: docker/build-push-action@v6
78
+ uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2
79
79
  with:
80
80
  context: .
81
81
  file: docker/Dockerfile
@@ -35,9 +35,12 @@ concurrency:
35
35
 
36
36
  jobs:
37
37
  publish:
38
- runs-on: ubuntu-latest
38
+ runs-on: uipath-ubuntu-latest
39
+ # Without a budget, a hang in the unattended `git push --force` below would hold a
40
+ # shared-pool runner slot for GitHub's 6h default.
41
+ timeout-minutes: 10
39
42
  steps:
40
- - uses: actions/checkout@v4
43
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
41
44
 
42
45
  - name: Assemble the published tree
43
46
  run: |
@@ -26,17 +26,26 @@ permissions:
26
26
  # here — TELEMETRY_ENABLED is the single canonical disable gate.
27
27
  env:
28
28
  TELEMETRY_ENABLED: "false"
29
+ # The `uipath-*` pool enforces a minimum package-age safe-chain check on installs.
30
+ # Workflow-level so every installing job inherits it; per-job copies are how some
31
+ # jobs previously ended up with no exclusions at all. The literal is the operative
32
+ # value — no secret of that name exists at repo or org level, so the bare `secrets.`
33
+ # reference this replaced resolved to an empty list. (Image builds carry their own
34
+ # list in docker/Dockerfile; deliberately not the same set.)
35
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
29
36
 
30
37
  jobs:
31
38
  quality-gate:
32
39
  name: Quality Gate (Format, Lint, Type, Test, Security)
33
- runs-on: ubuntu-latest
40
+ # Fork PRs go to stock GitHub-hosted runners: this job runs the PR's own
41
+ # `uv.lock` build hooks and test files, and the repo is public, so untrusted code
42
+ # must not land on the shared pool image. Everything else uses the pool.
43
+ runs-on: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) && 'ubuntu-latest' || 'uipath-ubuntu-latest' }}
34
44
  timeout-minutes: 10
35
45
 
36
- # Shared env for all steps: safe-chain min-age exclusions and a dummy
37
- # Anthropic key so CI tests that construct a client don't fail on a missing key.
46
+ # A dummy Anthropic key so CI tests that construct a client don't fail on a
47
+ # missing key.
38
48
  env:
39
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
40
49
  ANTHROPIC_API_KEY: "sk-ant-test-dummy-key-for-ci-tests-only"
41
50
 
42
51
  steps:
@@ -157,20 +166,62 @@ jobs:
157
166
  echo "✅ Quality gate complete!"
158
167
  echo "📊 All checks passed: formatting, linting, types, security, tests"
159
168
 
169
+ evalboard:
170
+ # The dashboard's own gate. `evalboard/` ships ~460 vitest assertions,
171
+ # including the pricing drift guard that asserts lib/pricing.ts still agrees
172
+ # with src/coder_eval/pricing.py — and until this job existed NOTHING ran
173
+ # them: not a workflow, not a Makefile target, not a pre-commit hook. The
174
+ # guard was consequently red on `main` for weeks while a 3x-wrong Opus rate
175
+ # and five unpriced in-use models shipped to the board. An unrun assertion is
176
+ # documentation, not enforcement.
177
+ #
178
+ # Deliberately NOT path-filtered. `paths:` is workflow-scoped in GitHub
179
+ # Actions, and the parity guard's whole point is that a reprice in
180
+ # src/coder_eval/pricing.py — a pure-Python diff touching no evalboard file —
181
+ # must trip it. A `evalboard/**`-only filter would skip exactly the change
182
+ # class this job exists to catch.
183
+ name: Evalboard (Types, Tests, Build)
184
+ # Fork-PR carve-out — see `quality-gate`. `pnpm install --frozen-lockfile` runs
185
+ # the PR's own lockfile install scripts, same untrusted-code class.
186
+ runs-on: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) && 'ubuntu-latest' || 'uipath-ubuntu-latest' }}
187
+ timeout-minutes: 15
188
+ steps:
189
+ - name: Checkout code
190
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
191
+
192
+ - name: Set up Node.js 20
193
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
194
+ with:
195
+ node-version: "20"
196
+
197
+ - name: Enable pnpm
198
+ # The version comes from evalboard/package.json's `packageManager` field,
199
+ # so corepack pins it without a second place to keep in sync.
200
+ run: corepack enable
201
+
202
+ - name: Install dependencies (lockfile-pinned)
203
+ working-directory: evalboard
204
+ run: pnpm install --frozen-lockfile
205
+
206
+ - name: Verify (tsc --noEmit && vitest run && next build)
207
+ working-directory: evalboard
208
+ run: pnpm verify
209
+
160
210
  no-uipath-extra:
161
211
  # Proves that `pip install coder-eval` (without the optional `[uipath]`
162
212
  # extra) yields a working framework: imports succeed, the criterion
163
213
  # registry validates, and the uipath-specific code paths fail with a
164
214
  # clear hint instead of an import error.
165
215
  name: No-Extra Install (uipath optional)
166
- runs-on: ubuntu-latest
216
+ # Fork-PR carve-out — see the comment on `quality-gate` above.
217
+ runs-on: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) && 'ubuntu-latest' || 'uipath-ubuntu-latest' }}
167
218
  timeout-minutes: 5
168
219
  steps:
169
220
  - name: Checkout code
170
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
221
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
171
222
 
172
223
  - name: Set up Python 3.13
173
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
224
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
174
225
  with:
175
226
  python-version: "3.13"
176
227
 
@@ -208,7 +259,7 @@ jobs:
208
259
 
209
260
  windows-smoke:
210
261
  name: Windows Smoke Test
211
- runs-on: windows-latest
262
+ runs-on: uipath-windows-latest
212
263
  # 15min headroom: the smoke task itself completes in ~7min, but the
213
264
  # actions/cache post-step on Windows is slow when ``.venv`` is large.
214
265
  # We also exclude ``.venv`` from the cached paths (uv re-creates it
@@ -222,7 +273,6 @@ jobs:
222
273
  shell: bash
223
274
 
224
275
  env:
225
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
226
276
  # Job-level dummy key keeps the unit-test step deterministic and isolated
227
277
  # from real-API leakage. The e2e step below overrides to Bedrock at step scope.
228
278
  ANTHROPIC_API_KEY: "sk-ant-test-dummy-key-for-ci-tests-only"
@@ -326,7 +376,7 @@ jobs:
326
376
 
327
377
  e2e-smoke:
328
378
  name: E2E Smoke Tests (Real API)
329
- runs-on: ubuntu-latest
379
+ runs-on: uipath-ubuntu-latest
330
380
  timeout-minutes: 10
331
381
  # Skip on fork PRs where secrets aren't available
332
382
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
@@ -341,7 +391,6 @@ jobs:
341
391
  AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
342
392
  AWS_REGION: ${{ secrets.AWS_REGION }}
343
393
  BEDROCK_MODEL: ${{ secrets.BEDROCK_MODEL }}
344
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
345
394
  # tasks_run for --tags smoke-pass. 6 task files (hello_date, dataset_example,
346
395
  # smoke_llm_judge, smoke_agent_judge, byod_smoke_test, agentless_smoke_test);
347
396
  # dataset_example fans out to 2 inline rows, so 7 sub-tasks. If you add/remove a
@@ -509,7 +558,7 @@ jobs:
509
558
 
510
559
  live-tests:
511
560
  name: Live Integration Tests (Settings Enforcement + Cost Budget)
512
- runs-on: ubuntu-24.04
561
+ runs-on: uipath-ubuntu-24.04
513
562
  timeout-minutes: 15
514
563
  # Skip on fork PRs where secrets aren't available
515
564
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
@@ -519,7 +568,6 @@ jobs:
519
568
  # settings-enforcement and cost-budget steps use this. The Bedrock
520
569
  # settings-enforcement step adds API_BACKEND=bedrock at step scope only.
521
570
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
522
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
523
571
  # Bedrock backend for the third settings-enforcement run. Job-level so
524
572
  # the preflight secrets check can validate them; the BedrockRoute is
525
573
  # only engaged via API_BACKEND=bedrock at step scope.
@@ -582,10 +630,12 @@ jobs:
582
630
  # `-ra` surfaces skipped tests in the summary so CI logs show what ran vs skipped.
583
631
  # `--strict-markers` rejects unregistered @pytest.mark.* (cheap typo insurance).
584
632
  # JUnit XML feeds the post-run "tests actually passed" assertion below.
633
+ # `-n 4` overrides pyproject's `-n auto`: these hit the real API, so
634
+ # concurrency must not vary with the runner's vCPU count. 4 = the old shape.
585
635
  run: |
586
636
  mkdir -p tmp
587
637
  .venv/bin/pytest tests/test_claude_settings_enforcement_live.py \
588
- -m live -v --tb=short --strict-markers -ra -n auto \
638
+ -m live -v --tb=short --strict-markers -ra -n 4 \
589
639
  --junit-xml=tmp/junit-settings.xml
590
640
 
591
641
  - name: Run claude-settings enforcement live tests (BedrockRoute)
@@ -597,7 +647,7 @@ jobs:
597
647
  API_BACKEND: "bedrock"
598
648
  run: |
599
649
  .venv/bin/pytest tests/test_claude_settings_enforcement_live.py \
600
- -m live -v --tb=short --strict-markers -ra -n auto \
650
+ -m live -v --tb=short --strict-markers -ra -n 4 \
601
651
  --junit-xml=tmp/junit-settings-bedrock.xml
602
652
 
603
653
  - name: Assert live tests actually ran (not silently skipped)
@@ -680,7 +730,7 @@ jobs:
680
730
 
681
731
  codex-live-tests:
682
732
  name: Live Integration Tests (Codex)
683
- runs-on: ubuntu-24.04
733
+ runs-on: uipath-ubuntu-24.04
684
734
  timeout-minutes: 15
685
735
  # Skip on fork PRs where secrets aren't available.
686
736
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
@@ -692,7 +742,6 @@ jobs:
692
742
  CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
693
743
  CODEX_BASE_URL: ${{ secrets.CODEX_BASE_URL }}
694
744
  CODEX_MODEL: ${{ secrets.CODEX_MODEL }}
695
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
696
745
 
697
746
  steps:
698
747
  - name: Checkout code
@@ -756,7 +805,7 @@ jobs:
756
805
 
757
806
  byoa-live-tests:
758
807
  name: Live Integration Tests (BYOA Plugin)
759
- runs-on: ubuntu-24.04
808
+ runs-on: uipath-ubuntu-24.04
760
809
  timeout-minutes: 15
761
810
  # Skip on fork PRs where secrets aren't available.
762
811
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
@@ -764,7 +813,6 @@ jobs:
764
813
  env:
765
814
  # DirectRoute: a plugin agent that subclasses ClaudeCodeAgent uses ANTHROPIC_API_KEY.
766
815
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
767
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS }}
768
816
 
769
817
  steps:
770
818
  - name: Checkout code
@@ -834,6 +882,11 @@ jobs:
834
882
 
835
883
  action-dogfood:
836
884
  name: Action Dogfood (composite action, real API)
885
+ # Deliberately NOT on the `uipath-*` pool, and keep it that way: this job is the
886
+ # executable proof of the published Action, and docs/tutorials/02-ci-pipeline.md
887
+ # (the one consumer snippet naming a runner) says `ubuntu-latest`. Nothing else in
888
+ # CI exercises the image integrators actually use. A bulk `runs-on:` migration has
889
+ # swept this up twice — check it by hand.
837
890
  runs-on: ubuntu-latest
838
891
  timeout-minutes: 15
839
892
  # Skip on fork PRs where secrets aren't available (matches e2e-smoke).
@@ -34,8 +34,11 @@ permissions:
34
34
  jobs:
35
35
  publish-testpypi:
36
36
  name: Build and publish to TestPyPI
37
- runs-on: ubuntu-latest
37
+ runs-on: uipath-ubuntu-latest
38
38
  timeout-minutes: 10
39
+ env:
40
+ # `uv build` resolves build deps under the pool's safe-chain gate.
41
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
39
42
  environment:
40
43
  name: testpypi
41
44
  url: https://test.pypi.org/project/coder-eval/
@@ -49,21 +49,22 @@ permissions:
49
49
  jobs:
50
50
  release:
51
51
  name: Bump version and publish
52
- # GitHub-hosted so cutting a release does not depend on the self-hosted
53
- # `uipath-ubuntu-latest` pool. semantic-release, uv, twine, and the docker
54
- # buildx -> GHCR push all run fine here.
55
- runs-on: ubuntu-latest
52
+ # KNOWINGLY reverses PR #6, which moved this job to a GitHub-hosted runner because
53
+ # "cutting a release was blocked whenever that pool was unavailable". The pool's
54
+ # availability is what changed; the accepted trade-off is that the release path has
55
+ # no GitHub-hosted fallback again. Both jobs here are `workflow_dispatch`-only, so
56
+ # no PR check exercises them -- dry-run publish-testpypi.yml after editing this file.
57
+ runs-on: uipath-ubuntu-latest
56
58
  timeout-minutes: 15
57
59
  outputs:
58
60
  # Exposed so the downstream publish-pypi job gates on a version having been
59
61
  # produced (real release on main, or a stamped prerelease on a branch).
60
62
  version: ${{ steps.ver.outputs.version }}
61
63
  env:
62
- # The self-hosted `uipath-ubuntu-latest` runners enforce a minimum
63
- # package-age safe-chain check on uv installs; on GitHub-hosted runners
64
- # this is a no-op. Kept (matching pr-checks.yml) so parity is preserved
65
- # if the job ever moves back to the self-hosted pool.
66
- SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: "openai-codex-cli-bin,openai-codex"
64
+ # Load-bearing on the release path: the pool enforces a package-age safe-chain
65
+ # check on uv installs. Same expression as pr-checks.yml (see the comment there),
66
+ # so a package can't pass PR CI and then fail the release install.
67
+ SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: ${{ secrets.SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS || 'openai-codex-cli-bin,openai-codex' }}
67
68
 
68
69
  steps:
69
70
  # Only a real release (main) needs the app token: semantic-release pushes the
@@ -409,14 +410,14 @@ jobs:
409
410
  cache-from: type=registry,ref=ghcr.io/${{ steps.img.outputs.owner_lc }}/coder-eval-agent:buildcache
410
411
 
411
412
  # Publish the wheel+sdist to public PyPI. This runs as its own job so OIDC
412
- # Trusted Publishing is scoped to a dedicated, environment-gated context on
413
- # GitHub-hosted runners -- no PyPI token/secret is stored. Gated on the
414
- # release job having actually cut a version.
413
+ # Trusted Publishing is scoped to a dedicated, environment-gated context --
414
+ # no PyPI token/secret is stored. Gated on the release job having actually
415
+ # cut a version.
415
416
  publish-pypi:
416
417
  name: Publish to PyPI
417
418
  needs: release
418
419
  if: needs.release.outputs.version != ''
419
- runs-on: ubuntu-latest
420
+ runs-on: uipath-ubuntu-latest
420
421
  timeout-minutes: 10
421
422
  environment:
422
423
  name: pypi
@@ -2,6 +2,173 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.9.6 (2026-08-11)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Code review fixes for evalboard path-to-ga stale tags and mature passes
10
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
11
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
12
+
13
+ - Review round 2 — gate evalboard in CI, correct GPT-5.6 rates
14
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
15
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
16
+
17
+ - **ci**: Correct defects in the uipath runner migration
18
+ ([#86](https://github.com/UiPath/coder_eval/pull/86),
19
+ [`57556af`](https://github.com/UiPath/coder_eval/commit/57556af6e47bffcd5fbbb708b9f8b399cceea4c7))
20
+
21
+ - **criteria**: Make glob path resolution literal-first and ignore-filtered
22
+ ([#65](https://github.com/UiPath/coder_eval/pull/65),
23
+ [`b3bba2b`](https://github.com/UiPath/coder_eval/commit/b3bba2b6c00e3772351b28bf63d5cde9e97b8e7e))
24
+
25
+ - **criteria**: Split clustered short flags and keep negative numbers positional
26
+ ([#73](https://github.com/UiPath/coder_eval/pull/73),
27
+ [`a7ec3ea`](https://github.com/UiPath/coder_eval/commit/a7ec3eababc907a0220a598d974540eb579a538c))
28
+
29
+ - **evalboard**: 1/3 — drop de-tagged tasks and score only executed runs
30
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
31
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
32
+
33
+ - **evalboard**: Path-to-GA shows only still-tagged tasks, scored on runs that executed
34
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
35
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
36
+
37
+ - **evalboard**: Resync lib/pricing.ts with the authoritative pricing.py table
38
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
39
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
40
+
41
+ - **sandbox**: Close the remaining record_cli findings from #73
42
+ ([#73](https://github.com/UiPath/coder_eval/pull/73),
43
+ [`a7ec3ea`](https://github.com/UiPath/coder_eval/commit/a7ec3eababc907a0220a598d974540eb579a538c))
44
+
45
+ - **sandbox**: Repair record_cli defects found reviewing #73
46
+ ([#73](https://github.com/UiPath/coder_eval/pull/73),
47
+ [`a7ec3ea`](https://github.com/UiPath/coder_eval/commit/a7ec3eababc907a0220a598d974540eb579a538c))
48
+
49
+ - **sandbox**: Stop the recorder dir defeating the PLUGIN_TOOLS_DIR pin
50
+ ([#73](https://github.com/UiPath/coder_eval/pull/73),
51
+ [`a7ec3ea`](https://github.com/UiPath/coder_eval/commit/a7ec3eababc907a0220a598d974540eb579a538c))
52
+
53
+ ### Chores
54
+
55
+ - Change to centralized managed GitHub pool ([#86](https://github.com/UiPath/coder_eval/pull/86),
56
+ [`57556af`](https://github.com/UiPath/coder_eval/commit/57556af6e47bffcd5fbbb708b9f8b399cceea4c7))
57
+
58
+ ### Documentation
59
+
60
+ - **harness**: Defer four TS-side evalboard invariants from the path-to-ga fix
61
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
62
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
63
+
64
+ ### Features
65
+
66
+ - **criteria**: Accept glob patterns in criterion path fields
67
+ ([#65](https://github.com/UiPath/coder_eval/pull/65),
68
+ [`b3bba2b`](https://github.com/UiPath/coder_eval/commit/b3bba2b6c00e3772351b28bf63d5cde9e97b8e7e))
69
+
70
+ - **evalboard**: 2/3 — surface last-seen and maturity on the Path-to-GA table
71
+ ([#94](https://github.com/UiPath/coder_eval/pull/94),
72
+ [`ce006c1`](https://github.com/UiPath/coder_eval/commit/ce006c19b594701e90aec1d63cae15b337c0e06d))
73
+
74
+ - **sandbox**: Generate CLI recording shims via record_cli
75
+ ([#73](https://github.com/UiPath/coder_eval/pull/73),
76
+ [`a7ec3ea`](https://github.com/UiPath/coder_eval/commit/a7ec3eababc907a0220a598d974540eb579a538c))
77
+
78
+
79
+ ## v0.9.5 (2026-08-05)
80
+
81
+ ### Bug Fixes
82
+
83
+ - **command-executed**: Keep whole argv-joined payload in shell unwrap
84
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
85
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
86
+
87
+ - **command-executed**: Match patterns against shell-normalized commands
88
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
89
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
90
+
91
+ - **command-executed**: Narrow command param to str before shell-normalizing
92
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
93
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
94
+
95
+ - **command-executed**: Recognize shell wrappers by predicate, not allowlist
96
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
97
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
98
+
99
+ - **criteria**: Add present predicate so asserting a switch cannot weaken a guard
100
+ ([#72](https://github.com/UiPath/coder_eval/pull/72),
101
+ [`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
102
+
103
+ - **criteria**: Make cli_called guards fail loud instead of vacuously passing
104
+ ([#72](https://github.com/UiPath/coder_eval/pull/72),
105
+ [`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
106
+
107
+ - **criteria**: Stop ignore_flags re-opening the guard false-PASS
108
+ ([#72](https://github.com/UiPath/coder_eval/pull/72),
109
+ [`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
110
+
111
+ - **early-stop**: Address PR review — trajectory parity, reason determinism, doc restore
112
+ ([#78](https://github.com/UiPath/coder_eval/pull/78),
113
+ [`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
114
+
115
+ - **lint**: Derive CE030 criteria from the source union literal, not runtime
116
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
117
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
118
+
119
+ - **lint**: Enumerate in-tree criteria by module attribute, not the union
120
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
121
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
122
+
123
+ - **lint**: Scope CE030 criterion parity to in-tree criteria only
124
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
125
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
126
+
127
+ - **reports**: Explicit return on every early_stop_gate_note path (CodeQL py/mixed-returns)
128
+ ([#78](https://github.com/UiPath/coder_eval/pull/78),
129
+ [`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
130
+
131
+ - **reports**: Pre-initialize the gate note so CodeQL sees it bound on every path
132
+ ([#78](https://github.com/UiPath/coder_eval/pull/78),
133
+ [`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
134
+
135
+ ### Chores
136
+
137
+ - **deps-dev**: Bump postcss from 8.5.18 to 8.5.23 in /evalboard
138
+ ([#75](https://github.com/UiPath/coder_eval/pull/75),
139
+ [`cdced15`](https://github.com/UiPath/coder_eval/commit/cdced152dea732096dcff939c45e7d7c927c2a5a))
140
+
141
+ ### Documentation
142
+
143
+ - Surface the Marketplace listing and make the Action quickstarts self-sufficient
144
+ ([#80](https://github.com/UiPath/coder_eval/pull/80),
145
+ [`401245a`](https://github.com/UiPath/coder_eval/commit/401245ad14055c1da5d7b594e506686c59cedce7))
146
+
147
+ - **command-executed**: Document shell-normalization contract + gate it (CE030)
148
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
149
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
150
+
151
+ ### Features
152
+
153
+ - **criteria**: Add cli_called for structured invocation matching
154
+ ([#72](https://github.com/UiPath/coder_eval/pull/72),
155
+ [`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
156
+
157
+ - **criteria**: Match a flag across spellings with FlagMatch.aliases
158
+ ([#72](https://github.com/UiPath/coder_eval/pull/72),
159
+ [`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
160
+
161
+ - **early-stop**: Per-criterion arming via stop_early blocks on live criteria
162
+ ([#78](https://github.com/UiPath/coder_eval/pull/78),
163
+ [`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
164
+
165
+ ### Refactoring
166
+
167
+ - **command-executed**: Total _match_haystacks, shared window, memoized
168
+ ([#77](https://github.com/UiPath/coder_eval/pull/77),
169
+ [`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
170
+
171
+
5
172
  ## v0.9.4 (2026-08-04)
6
173
 
7
174
  ### Bug Fixes