coder-eval 0.8.8__tar.gz → 0.8.10__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 (578) hide show
  1. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-code-review.md +3 -3
  2. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/harness-candidates.md +16 -0
  3. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/shared/multi-model-review.md +1 -1
  4. coder_eval-0.8.10/.github/ISSUE_TEMPLATE/adopter.yml +84 -0
  5. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/docs.yml +11 -6
  6. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/pr-checks.yml +58 -0
  7. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/release.yml +33 -6
  8. coder_eval-0.8.10/ADOPTERS.md +13 -0
  9. {coder_eval-0.8.8 → coder_eval-0.8.10}/CHANGELOG.md +212 -0
  10. {coder_eval-0.8.8 → coder_eval-0.8.10}/CLAUDE.md +14 -6
  11. {coder_eval-0.8.8 → coder_eval-0.8.10}/Makefile +4 -1
  12. {coder_eval-0.8.8 → coder_eval-0.8.10}/PKG-INFO +93 -13
  13. {coder_eval-0.8.8 → coder_eval-0.8.10}/README.md +90 -11
  14. coder_eval-0.8.10/action.yml +209 -0
  15. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/AB_EXPERIMENTS.md +50 -12
  16. coder_eval-0.8.10/docs/CI_GATE.md +147 -0
  17. coder_eval-0.8.10/docs/DATASETS.md +276 -0
  18. coder_eval-0.8.10/docs/DIALOG_MODE.md +237 -0
  19. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/DOCKER_ISOLATION.md +58 -1
  20. coder_eval-0.8.10/docs/EXTENDING.md +239 -0
  21. coder_eval-0.8.10/docs/REPORT_SCHEMA.md +256 -0
  22. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/TASK_DEFINITION_GUIDE.md +265 -52
  23. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/USER_GUIDE.md +86 -7
  24. coder_eval-0.8.10/docs/agents/ANTIGRAVITY.md +203 -0
  25. coder_eval-0.8.10/docs/agents/CLAUDE_CODE.md +194 -0
  26. coder_eval-0.8.8/docs/CODEX_AGENT_GUIDE.md → coder_eval-0.8.10/docs/agents/CODEX.md +6 -6
  27. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/comparison.md +3 -3
  28. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/index.md +13 -5
  29. coder_eval-0.8.10/docs/llms.txt +56 -0
  30. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/02-ci-pipeline.md +75 -3
  31. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/03-evalboard-local.md +3 -3
  32. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/04-writing-a-task.md +2 -2
  33. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/05-comparing-models.md +1 -1
  34. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/06-use-docker-isolation.md +1 -1
  35. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/README.md +2 -2
  36. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/harness-badge.tsx +16 -3
  37. coder_eval-0.8.10/evalboard/app/_components/harness-selector.tsx +49 -0
  38. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_overview/tag-rail.tsx +15 -1
  39. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/page.tsx +30 -8
  40. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/path-to-ga/page.tsx +22 -7
  41. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/trends/__tests__/trends-view.test.tsx +11 -0
  42. coder_eval-0.8.10/evalboard/app/trends/actions.ts +18 -0
  43. coder_eval-0.8.10/evalboard/app/trends/page.tsx +163 -0
  44. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/trends/trends-view.tsx +30 -11
  45. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +27 -10
  46. coder_eval-0.8.10/evalboard/app/watchlist/page.tsx +87 -0
  47. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/watchlist/watchlist-view.tsx +23 -6
  48. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/early-stop-ab.yaml +5 -3
  49. {coder_eval-0.8.8 → coder_eval-0.8.10}/mkdocs.yml +36 -10
  50. {coder_eval-0.8.8 → coder_eval-0.8.10}/pyproject.toml +3 -2
  51. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/__init__.py +1 -1
  52. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/evaluate_command.py +14 -5
  53. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/report_command.py +21 -3
  54. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/run_command.py +19 -0
  55. coder_eval-0.8.10/src/coder_eval/criteria/skill_triggered.py +222 -0
  56. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/checker.py +9 -2
  57. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/formatting.py +6 -3
  58. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/criteria.py +46 -7
  59. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/limits.py +9 -6
  60. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/results.py +38 -10
  61. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/sandbox.py +3 -2
  62. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/tasks.py +5 -8
  63. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/early_stop.py +183 -49
  64. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/reports.py +5 -1
  65. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/reports_experiment.py +51 -82
  66. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/reports_html.py +67 -33
  67. coder_eval-0.8.10/src/coder_eval/reports_junit.py +431 -0
  68. coder_eval-0.8.10/src/coder_eval/reports_stats.py +498 -0
  69. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -1
  70. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/experiment_2variant.md +9 -4
  71. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/experiment_replicates.md +3 -1
  72. coder_eval-0.8.10/tests/conftest.py +108 -0
  73. coder_eval-0.8.10/tests/fixtures/tasks/test_task_informational_criterion.yaml +17 -0
  74. coder_eval-0.8.10/tests/lint/dead_config_fields.py +83 -0
  75. coder_eval-0.8.10/tests/lint/doc_env_parity.py +125 -0
  76. coder_eval-0.8.10/tests/lint/doc_examples.py +211 -0
  77. coder_eval-0.8.10/tests/lint/doc_indexes.py +283 -0
  78. coder_eval-0.8.10/tests/lint/doc_schema_parity.py +85 -0
  79. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent.py +12 -0
  80. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_custom_lint.py +535 -0
  81. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_early_stop.py +379 -44
  82. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_evaluate_command.py +21 -0
  83. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_evaluator.py +2 -0
  84. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_reports.py +372 -9
  85. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_replicate_stats.py +64 -42
  86. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_report_command.py +52 -0
  87. coder_eval-0.8.10/tests/test_reports_junit.py +863 -0
  88. coder_eval-0.8.10/tests/test_reports_stats_nonfinite.py +73 -0
  89. coder_eval-0.8.10/tests/test_run_command_junit.py +77 -0
  90. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_simulation_config.py +0 -1
  91. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_skill_triggered.py +209 -0
  92. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_suite_rollup.py +23 -0
  93. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_threshold_enforcement.py +102 -0
  94. {coder_eval-0.8.8 → coder_eval-0.8.10}/uv.lock +3 -1
  95. coder_eval-0.8.8/docs/BYOD.md +0 -210
  96. coder_eval-0.8.8/docs/IDEAS.md +0 -459
  97. coder_eval-0.8.8/docs/llms.txt +0 -46
  98. coder_eval-0.8.8/evalboard/app/trends/actions.ts +0 -10
  99. coder_eval-0.8.8/evalboard/app/trends/page.tsx +0 -88
  100. coder_eval-0.8.8/evalboard/app/watchlist/page.tsx +0 -12
  101. coder_eval-0.8.8/src/coder_eval/criteria/skill_triggered.py +0 -177
  102. coder_eval-0.8.8/src/coder_eval/reports_stats.py +0 -250
  103. coder_eval-0.8.8/tests/conftest.py +0 -56
  104. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-code-review-full.md +0 -0
  105. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  106. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-create-plan.md +0 -0
  107. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-implement-plan.md +0 -0
  108. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-review.md +0 -0
  109. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-run-analysis.md +0 -0
  110. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/commands/coder-eval-task-create.md +0 -0
  111. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/shared/axes.md +0 -0
  112. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/shared/review-rubric.md +0 -0
  113. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/shared/run-layout.md +0 -0
  114. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/workflows/cr-axis.js +0 -0
  115. {coder_eval-0.8.8 → coder_eval-0.8.10}/.claude/workflows/cr-parent.js +0 -0
  116. {coder_eval-0.8.8 → coder_eval-0.8.10}/.env.example +0 -0
  117. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/CODEOWNERS +0 -0
  118. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  119. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  120. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/code_review.md +0 -0
  121. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/dependabot.yml +0 -0
  122. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/claude-pr-review.yml +0 -0
  123. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/codeql.yml +0 -0
  124. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/conventional-commits.yml +0 -0
  125. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/docker-publish.yml +0 -0
  126. {coder_eval-0.8.8 → coder_eval-0.8.10}/.github/workflows/publish-testpypi.yml +0 -0
  127. {coder_eval-0.8.8 → coder_eval-0.8.10}/.gitignore +0 -0
  128. {coder_eval-0.8.8 → coder_eval-0.8.10}/.pre-commit-config.yaml +0 -0
  129. {coder_eval-0.8.8 → coder_eval-0.8.10}/.python-version +0 -0
  130. {coder_eval-0.8.8 → coder_eval-0.8.10}/CODE_OF_CONDUCT.md +0 -0
  131. {coder_eval-0.8.8 → coder_eval-0.8.10}/CONTRIBUTING.md +0 -0
  132. {coder_eval-0.8.8 → coder_eval-0.8.10}/LICENSE +0 -0
  133. {coder_eval-0.8.8 → coder_eval-0.8.10}/NOTICE +0 -0
  134. {coder_eval-0.8.8 → coder_eval-0.8.10}/SECURITY.md +0 -0
  135. {coder_eval-0.8.8 → coder_eval-0.8.10}/docker/Dockerfile +0 -0
  136. {coder_eval-0.8.8 → coder_eval-0.8.10}/docker/Dockerfile.runtime +0 -0
  137. {coder_eval-0.8.8 → coder_eval-0.8.10}/docker/coder_eval_entrypoint.sh +0 -0
  138. {coder_eval-0.8.8 → coder_eval-0.8.10}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  139. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/assets/hero.gif +0 -0
  140. {coder_eval-0.8.8 → coder_eval-0.8.10}/docs/tutorials/01-first-evaluation.md +0 -0
  141. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/.gitignore +0 -0
  142. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/README.md +0 -0
  143. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  144. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/col-help.tsx +0 -0
  145. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  146. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/scroll-table.tsx +0 -0
  147. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/search-box.tsx +0 -0
  148. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/unit-toggle.tsx +0 -0
  149. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/version-list.tsx +0 -0
  150. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_components/window-selector.tsx +0 -0
  151. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_overview/daily-chart.tsx +0 -0
  152. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  153. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/_overview/window-summary.tsx +0 -0
  154. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/api/download/route.ts +0 -0
  155. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/api/file/route.ts +0 -0
  156. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  157. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/api/refresh/route.ts +0 -0
  158. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/error.tsx +0 -0
  159. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/globals.css +0 -0
  160. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/icon.png +0 -0
  161. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/app/layout.tsx +0 -0
  162. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/next-env.d.ts +0 -0
  163. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/next.config.mjs +0 -0
  164. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/package.json +0 -0
  165. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/pnpm-lock.yaml +0 -0
  166. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/postcss.config.mjs +0 -0
  167. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/public/harness/antigravity.png +0 -0
  168. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/public/harness/claude-code.png +0 -0
  169. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/public/harness/codex.png +0 -0
  170. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/public/uipath.png +0 -0
  171. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/tailwind.config.ts +0 -0
  172. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/tsconfig.json +0 -0
  173. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/vitest.config.ts +0 -0
  174. {coder_eval-0.8.8 → coder_eval-0.8.10}/evalboard/vitest.setup.ts +0 -0
  175. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/default.yaml +0 -0
  176. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/model-comparison.yaml +0 -0
  177. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/permissions-smoke.yaml +0 -0
  178. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/plugin-comparison.yaml +0 -0
  179. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/prompt-mutations-example.yaml +0 -0
  180. {coder_eval-0.8.8 → coder_eval-0.8.10}/experiments/smoke_variants.yaml +0 -0
  181. {coder_eval-0.8.8 → coder_eval-0.8.10}/osv-scanner.toml +0 -0
  182. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/.gitattributes +0 -0
  183. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agent.py +0 -0
  184. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/__init__.py +0 -0
  185. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/_logging.py +0 -0
  186. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/antigravity_agent.py +0 -0
  187. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/claude_code_agent.py +0 -0
  188. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/codex_agent.py +0 -0
  189. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/noop_agent.py +0 -0
  190. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/registry.py +0 -0
  191. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/agents/watchdog.py +0 -0
  192. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/analysis.py +0 -0
  193. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/__init__.py +0 -0
  194. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/aggregate_command.py +0 -0
  195. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/console.py +0 -0
  196. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/plan_command.py +0 -0
  197. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/run_helpers.py +0 -0
  198. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  199. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/cli/utils.py +0 -0
  200. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/config.py +0 -0
  201. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/__init__.py +0 -0
  202. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  203. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/agent_judge.py +0 -0
  204. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/base.py +0 -0
  205. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/classification_match.py +0 -0
  206. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/command_executed.py +0 -0
  207. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  208. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/file_check.py +0 -0
  209. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/file_contains.py +0 -0
  210. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/file_exists.py +0 -0
  211. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  212. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/json_check.py +0 -0
  213. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/llm_judge.py +0 -0
  214. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/reference_comparison.py +0 -0
  215. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/run_command.py +0 -0
  216. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/criteria/uipath_eval.py +0 -0
  217. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/__init__.py +0 -0
  218. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/agent.py +0 -0
  219. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/budget.py +0 -0
  220. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/categories.py +0 -0
  221. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/categorization.py +0 -0
  222. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/executor.py +0 -0
  223. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/judge.py +0 -0
  224. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/retry.py +0 -0
  225. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/errors/timeout.py +0 -0
  226. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/__init__.py +0 -0
  227. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  228. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  229. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_context.py +0 -0
  230. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_models.py +0 -0
  231. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  232. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/judge_usage.py +0 -0
  233. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/sub_agent.py +0 -0
  234. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/summaries.py +0 -0
  235. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  236. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/isolation/__init__.py +0 -0
  237. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/isolation/docker_runner.py +0 -0
  238. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/logging_config.py +0 -0
  239. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/__init__.py +0 -0
  240. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/agent_config.py +0 -0
  241. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/container_paths.py +0 -0
  242. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/enums.py +0 -0
  243. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/experiment.py +0 -0
  244. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/judge.py +0 -0
  245. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/judge_defaults.py +0 -0
  246. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/merge_strategy.py +0 -0
  247. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/mutations.py +0 -0
  248. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/routing.py +0 -0
  249. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/telemetry.py +0 -0
  250. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/models/templates.py +0 -0
  251. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/__init__.py +0 -0
  252. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/batch.py +0 -0
  253. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/config.py +0 -0
  254. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/config_merge.py +0 -0
  255. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/evaluation.py +0 -0
  256. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/experiment.py +0 -0
  257. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/overrides.py +0 -0
  258. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestration/task_loader.py +0 -0
  259. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/orchestrator.py +0 -0
  260. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/path_utils.py +0 -0
  261. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/plugins.py +0 -0
  262. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/pricing.py +0 -0
  263. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/py.typed +0 -0
  264. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/resources/__init__.py +0 -0
  265. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  266. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/resources/tags.yaml +0 -0
  267. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/sandbox.py +0 -0
  268. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/__init__.py +0 -0
  269. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/ast_similarity.py +0 -0
  270. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/complexity.py +0 -0
  271. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/quality.py +0 -0
  272. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/signature_similarity.py +0 -0
  273. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/similarity.py +0 -0
  274. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/scoring/token_similarity.py +0 -0
  275. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/simulation/__init__.py +0 -0
  276. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/simulation/termination.py +0 -0
  277. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/simulation/user_simulator.py +0 -0
  278. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/__init__.py +0 -0
  279. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/callbacks.py +0 -0
  280. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/collector.py +0 -0
  281. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/events.py +0 -0
  282. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/renderers.py +0 -0
  283. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/streaming/wire.py +0 -0
  284. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/telemetry.py +0 -0
  285. {coder_eval-0.8.8 → coder_eval-0.8.10}/src/coder_eval/utils.py +0 -0
  286. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/README.md +0 -0
  287. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agentless_smoke_test.yaml +0 -0
  288. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/antigravity_hello_world.yaml +0 -0
  289. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  290. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/claude_hello_world.yaml +0 -0
  291. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  292. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  293. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/claude_subagent_test.yaml +0 -0
  294. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  295. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_hello_world.yaml +0 -0
  296. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_parallel_commands.yaml +0 -0
  297. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  298. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_skills_test.yaml +0 -0
  299. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_string_utils.yaml +0 -0
  300. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/codex_subagent_test.yaml +0 -0
  301. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  302. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/agents/subagent_merge_sort.yaml +0 -0
  303. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/byod_smoke_test.yaml +0 -0
  304. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dataset_example.yaml +0 -0
  305. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/datasets/sentiment.jsonl +0 -0
  306. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  307. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  308. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  309. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  310. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  311. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  312. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/fibonacci_with_template.yaml +0 -0
  313. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/hello_date.yaml +0 -0
  314. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/inline_starter_example.yaml +0 -0
  315. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/internal/session_resumption.yaml +0 -0
  316. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_smoke.yaml +0 -0
  317. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  318. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  319. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  320. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  321. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  322. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  323. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  324. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  325. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  326. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  327. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  328. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/README.md +0 -0
  329. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  330. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  331. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  332. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  333. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  334. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  335. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  336. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  337. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  338. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  339. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/sentiment_classification.yaml +0 -0
  340. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_agent_judge.yaml +0 -0
  341. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_budget_exceeded.yaml +0 -0
  342. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  343. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_llm_judge.yaml +0 -0
  344. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_negative_path.yaml +0 -0
  345. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_task_timeout.yaml +0 -0
  346. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/smoke_variants.yaml +0 -0
  347. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/test_sandbox.yaml +0 -0
  348. {coder_eval-0.8.8 → coder_eval-0.8.10}/tasks/token_check.yaml +0 -0
  349. {coder_eval-0.8.8 → coder_eval-0.8.10}/templates/byod_smoke_test/Dockerfile +0 -0
  350. {coder_eval-0.8.8 → coder_eval-0.8.10}/templates/fibonacci-starter/README.md +0 -0
  351. {coder_eval-0.8.8 → coder_eval-0.8.10}/templates/fibonacci-starter/src/main.py +0 -0
  352. {coder_eval-0.8.8 → coder_eval-0.8.10}/templates/fibonacci-starter/tests/test_main.py +0 -0
  353. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/__init__.py +0 -0
  354. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/__init__.py +0 -0
  355. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/__init__.py +0 -0
  356. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  357. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  358. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  359. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  360. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  361. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  362. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  363. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  364. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  365. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  366. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  367. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  368. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  369. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  370. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  371. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  372. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  373. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  374. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  375. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  376. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  377. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  378. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  379. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  380. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  381. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  382. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/_path_helpers.py +0 -0
  383. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/__init__.py +0 -0
  384. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  385. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  386. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/mock_agent.py +0 -0
  387. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  388. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  389. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/fixtures/text_stub_agent.py +0 -0
  390. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/__init__.py +0 -0
  391. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/__init__.py +0 -0
  392. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/base.py +0 -0
  393. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  394. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  395. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  396. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  397. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  398. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  399. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  400. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  401. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  402. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  403. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  404. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/ce025_live_verdict_consistency.py +0 -0
  405. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_agent_timing_access.py +0 -0
  406. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  407. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  408. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_silent_except.py +0 -0
  409. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  410. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  411. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  412. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  413. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/open_explicit_encoding.py +0 -0
  414. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  415. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/register_criterion_required.py +0 -0
  416. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  417. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  418. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/runner.py +0 -0
  419. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/lint/violation.py +0 -0
  420. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_config_no_timing_fields.py +0 -0
  421. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_config_optional_type.py +0 -0
  422. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_config_registry_dispatch.py +0 -0
  423. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_config_sdk_decoupling.py +0 -0
  424. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_golden_master.py +0 -0
  425. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_judge_criterion.py +0 -0
  426. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_telemetry.py +0 -0
  427. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_telemetry_advanced.py +0 -0
  428. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agent_timeout.py +0 -0
  429. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_agentless.py +0 -0
  430. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_aggregate.py +0 -0
  431. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_antigravity_agent.py +0 -0
  432. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_byoa_plugin.py +0 -0
  433. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_byoa_plugin_live.py +0 -0
  434. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_byod_feature.py +0 -0
  435. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_checker_logging.py +0 -0
  436. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_classification_match.py +0 -0
  437. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_claude_settings_enforcement_live.py +0 -0
  438. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cleanup_preservation_guard.py +0 -0
  439. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_backend_flag.py +0 -0
  440. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_empty_glob.py +0 -0
  441. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_sdk_options.py +0 -0
  442. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_set_overrides.py +0 -0
  443. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_telemetry.py +0 -0
  444. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_cli_type_flag.py +0 -0
  445. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_code_review_bugs.py +0 -0
  446. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_codex_agent.py +0 -0
  447. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_codex_agent_live.py +0 -0
  448. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_codex_agent_unit.py +0 -0
  449. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_codex_token_mapping.py +0 -0
  450. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_command_executed.py +0 -0
  451. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_command_statistics.py +0 -0
  452. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_command_telemetry_result_data.py +0 -0
  453. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_commands_efficiency.py +0 -0
  454. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_config_lineage.py +0 -0
  455. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_config_merge_engine.py +0 -0
  456. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_config_precedence.py +0 -0
  457. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_continuous_scoring.py +0 -0
  458. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_criterion_result_round_trip.py +0 -0
  459. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_dataset_expansion.py +0 -0
  460. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_debug_logging.py +0 -0
  461. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_build_failure.py +0 -0
  462. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_runner_container_death.py +0 -0
  463. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_runner_mounts.py +0 -0
  464. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_runner_stream_limit.py +0 -0
  465. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_wildcard_env.py +0 -0
  466. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_docker_workdir_live.py +0 -0
  467. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_driver_resolver.py +0 -0
  468. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_error_handling.py +0 -0
  469. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_event_collector.py +0 -0
  470. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_cli.py +0 -0
  471. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_loader.py +0 -0
  472. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_models.py +0 -0
  473. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_resolver.py +0 -0
  474. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_experiment_runner.py +0 -0
  475. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_file_check.py +0 -0
  476. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_file_contains_scoring.py +0 -0
  477. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_formatting.py +0 -0
  478. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_git_clone_failure.py +0 -0
  479. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_heartbeat_watchdog.py +0 -0
  480. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_ignore_patterns_negation.py +0 -0
  481. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_image_from_dockerfiles.py +0 -0
  482. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_integration.py +0 -0
  483. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_json_check.py +0 -0
  484. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_anthropic.py +0 -0
  485. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_bedrock.py +0 -0
  486. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_burn_in_live.py +0 -0
  487. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_context_builder.py +0 -0
  488. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_models.py +0 -0
  489. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_judge_persistence.py +0 -0
  490. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_lint_no_top_level_run_limits.py +0 -0
  491. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_lint_runner.py +0 -0
  492. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_llm_judge_criterion.py +0 -0
  493. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_log_tail_buffer.py +0 -0
  494. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_logging.py +0 -0
  495. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_logging_isolation.py +0 -0
  496. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_merge_characterization.py +0 -0
  497. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_merge_strategy_annotations.py +0 -0
  498. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_merge_unification.py +0 -0
  499. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_models.py +0 -0
  500. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_mutations.py +0 -0
  501. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_new_criteria.py +0 -0
  502. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_node_env_config.py +0 -0
  503. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_optional_dependencies.py +0 -0
  504. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_orchestrator.py +0 -0
  505. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_orchestrator_error_log_tail.py +0 -0
  506. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_orchestrator_telemetry.py +0 -0
  507. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_overrides_engine.py +0 -0
  508. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_parallel.py +0 -0
  509. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_path_utils.py +0 -0
  510. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_plan_command.py +0 -0
  511. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_plugin_processing.py +0 -0
  512. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_plugins.py +0 -0
  513. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_post_run.py +0 -0
  514. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_pr_review_workflow.py +0 -0
  515. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_pre_run.py +0 -0
  516. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_preservation_mode.py +0 -0
  517. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_pricing_registry.py +0 -0
  518. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reference_comparison_scoring.py +0 -0
  519. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reference_evaluator.py +0 -0
  520. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reference_missing_file.py +0 -0
  521. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reference_models.py +0 -0
  522. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reference_orchestrator.py +0 -0
  523. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_registry.py +0 -0
  524. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reports.py +0 -0
  525. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reports_experiment.py +0 -0
  526. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reports_html.py +0 -0
  527. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_reports_stats.py +0 -0
  528. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_resolve_task_files.py +0 -0
  529. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_resume.py +0 -0
  530. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_retry_logic_comprehensive.py +0 -0
  531. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_routing.py +0 -0
  532. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_run_command_stdout.py +0 -0
  533. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_run_limits_models.py +0 -0
  534. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_run_limits_orchestrator.py +0 -0
  535. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_run_limits_resolver.py +0 -0
  536. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_runtime_tool_versions.py +0 -0
  537. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox.py +0 -0
  538. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox_layer_builder.py +0 -0
  539. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox_optional.py +0 -0
  540. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox_security.py +0 -0
  541. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox_symlink_preservation.py +0 -0
  542. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sandbox_templates.py +0 -0
  543. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_scorers.py +0 -0
  544. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_scoring_quality.py +0 -0
  545. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sdk_option_classification.py +0 -0
  546. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_simulation_integration.py +0 -0
  547. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_simulation_termination.py +0 -0
  548. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_simulation_trials.py +0 -0
  549. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_agent_integration.py +0 -0
  550. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_batch.py +0 -0
  551. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_callbacks.py +0 -0
  552. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_cli.py +0 -0
  553. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_events.py +0 -0
  554. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_orchestrator.py +0 -0
  555. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_renderers.py +0 -0
  556. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_streaming_wire.py +0 -0
  557. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_sub_agent_runner.py +0 -0
  558. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_success_criterion_union.py +0 -0
  559. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_summaries.py +0 -0
  560. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_tags.py +0 -0
  561. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_task_definition_unknown_fields.py +0 -0
  562. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_teardown_interrupt.py +0 -0
  563. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_telemetry.py +0 -0
  564. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_template_env_expansion.py +0 -0
  565. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_timeout_batch.py +0 -0
  566. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_timeout_categorization.py +0 -0
  567. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_timeout_exceptions.py +0 -0
  568. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_timeout_models.py +0 -0
  569. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_timeout_orchestrator.py +0 -0
  570. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_token_usage.py +0 -0
  571. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_uipath_eval.py +0 -0
  572. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_user_simulator.py +0 -0
  573. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_utils.py +0 -0
  574. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_utterance_extraction.py +0 -0
  575. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_variant_prompt_file.py +0 -0
  576. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_verdict_tool.py +0 -0
  577. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_watchdog.py +0 -0
  578. {coder_eval-0.8.8 → coder_eval-0.8.10}/tests/test_yaml_migration.py +0 -0
@@ -12,7 +12,7 @@ description: Run a multi-model code review on uncommitted changes or a described
12
12
 
13
13
  Run a thorough code review using multiple AI models in parallel, then fix all high-confidence medium-severity and above findings.
14
14
 
15
- **Cost note**: This command runs `make verify` + a multi-model review (`gemini-3` + `codex` via MCP, plus an Opus sub-agent) + automatic fixes. Expensive in time and tokens. Use this for changes you're about to ship; for broad codebase audits use `/coder-eval-code-review-full`; for quick local checks, run targeted tools (`ruff`, `pyright`, `pytest`) directly.
15
+ **Cost note**: This command runs `make verify` + a multi-model review (`gemini-3` + `gpt-5` via MCP, plus an Opus sub-agent) + automatic fixes. Expensive in time and tokens. Use this for changes you're about to ship; for broad codebase audits use `/coder-eval-code-review-full`; for quick local checks, run targeted tools (`ruff`, `pyright`, `pytest`) directly.
16
16
 
17
17
  Input: $ARGUMENTS
18
18
 
@@ -65,7 +65,7 @@ If it fails, report what's failing and stop — code review on broken code is pr
65
65
 
66
66
  Launch two reviews **in parallel**:
67
67
 
68
- **Review A — Multi-model (via `mcp__multi__codereview`)**: run it per the shared procedure in `.claude/shared/multi-model-review.md` — `models: ["gemini-3", "codex"]`, `relevant_files` = absolute paths of all changed files, `content` = a review request citing the Severity Standard, Review Principles, and Checklist. **Heed the multi-step protocol described there** (the step-1 response is usually an `in_progress` checklist, not findings — you must make the `step_number: 2` follow-up call with the same `thread_id`). Falls back to two Opus sub-agents if the tool is unavailable.
68
+ **Review A — Multi-model (via `mcp__multi__codereview`)**: run it per the shared procedure in `.claude/shared/multi-model-review.md` — `models: ["gemini-3", "gpt-5"]`, `relevant_files` = absolute paths of all changed files, `content` = a review request citing the Severity Standard, Review Principles, and Checklist. **Heed the multi-step protocol described there** (the step-1 response is usually an `in_progress` checklist, not findings — you must make the `step_number: 2` follow-up call with the same `thread_id`). Falls back to two Opus sub-agents if the tool is unavailable.
69
69
 
70
70
  **Review B — Opus sub-agent**: Use the `Agent` tool with `model: "opus"`. Give it the list of changed files and the following specialized tasks to run in parallel internally:
71
71
 
@@ -120,7 +120,7 @@ across sessions and provides forensic context if a fix later proves wrong:
120
120
  - Git SHA: <`git rev-parse HEAD`>
121
121
  - Branch: <`git rev-parse --abbrev-ref HEAD`>
122
122
  - Scope: <uncommitted | described "<input>" | last commit>
123
- - Reviewers: <e.g. gemini-3, codex, opus-fallback-1, opus-fallback-2 — list actual reviewers used>
123
+ - Reviewers: <e.g. gemini-3, gpt-5, opus-fallback-1, opus-fallback-2 — list actual reviewers used>
124
124
 
125
125
  ### Scope
126
126
  - Files reviewed: (list)
@@ -27,6 +27,22 @@ Deferred lint/test guardrails surfaced during reviews. Promote to a `CExxx` rule
27
27
  reachable (needs a live run).
28
28
  - [ ] CE-rule: `type: Literal[...]` fields on models in `coder_eval/models/` must declare their tag default (`type: Literal["x"] = "x"`) — a member without the default degrades `validate_registry` diagnostics (PydanticUndefined in expected_types) and breaks direct construction. Nothing guards it today; needs a rule-design call (second violation class inside CE024 vs. a new CExxx at the next free id), and the failure is already double-caught by the MINIMAL_PAYLOADS parity test + direct-construction tests — caught in the 2026-07-03 top5-review-fixes run (Phase 1 quality review).
29
29
 
30
+ ## From 2026-07-23 stop_when:auto early-stop review
31
+
32
+ - [ ] CE-rule: the early-stop watcher stop rule must decide polarity via the
33
+ resolved `_armed_polarities`, never a raw `criterion.stop_when` comparison —
34
+ forbid `.stop_when` attribute reads inside `EarlyStopWatcher._evaluate` /
35
+ `_resolve_armed_polarities`'s callers in `orchestration/early_stop.py`. This
36
+ diff *was* the fix for exactly that class of bug (the old rule compared
37
+ `stop_when in ("pass","decided")` and so vetoed every mixed `auto` pass-stop).
38
+ Deferred, not cheap: existing CE rules scope by file/module, not by a specific
39
+ method, so a method-scoped attribute-ban needs a new AST-walk shape (and risks
40
+ false positives on the legitimate `is not None` membership reads elsewhere in
41
+ the file). Claim the next free id in `tests/lint/rules/`. Caught in the
42
+ 2026-07-23 stop_when:auto review; the behavior itself is guarded by
43
+ `test_auto_mixed_pass_stops_ignoring_undecided_distractors` +
44
+ `test_mixed_static_arming_pass_stops_ignoring_fail_armed`.
45
+
30
46
  ## From 2026-07-03 open-source docs cleanup
31
47
 
32
48
  - [ ] **Dead-relative-link checker for `docs/**/*.md`** — resolve every relative
@@ -14,7 +14,7 @@ If `mcp__multi__codereview` is available (check the deferred-tools list; if list
14
14
  but not loaded, load it with `ToolSearch` → `select:mcp__multi__codereview`), call
15
15
  it with:
16
16
 
17
- - `models`: the strongest available (e.g. `["gemini-3", "codex"]`)
17
+ - `models`: the strongest available (e.g. `["gemini-3", "gpt-5"]` — as of July 2026 these resolve to `gemini-3.1-pro-preview` and `gpt-5.6-sol`; check `mcp__multi__models` if unsure)
18
18
  - `relevant_files`: absolute paths of every changed / in-scope file
19
19
  - `content`: the review request, citing the consumer's rubric (the shared **Review Criteria**, the **Severity Standard**, etc.)
20
20
  - `base_path`: project root
@@ -0,0 +1,84 @@
1
+ name: Adopter — we're using coder_eval
2
+ description: Tell us your team uses coder_eval so we can add you to ADOPTERS.md
3
+ title: "[adopter] <organization>"
4
+ labels: ["adopter"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for using coder_eval! Adopter entries help other teams see the project is
10
+ real and in production, and they tell us which use cases to keep supporting.
11
+
12
+ Everything below is optional except the organization and how you use it. We only
13
+ publish what you explicitly allow here.
14
+ - type: input
15
+ id: organization
16
+ attributes:
17
+ label: Organization
18
+ description: The name you'd like listed.
19
+ placeholder: Acme Corp
20
+ validations:
21
+ required: true
22
+ - type: input
23
+ id: website
24
+ attributes:
25
+ label: Website
26
+ placeholder: https://example.com
27
+ validations:
28
+ required: false
29
+ - type: textarea
30
+ id: usage
31
+ attributes:
32
+ label: How do you use coder_eval?
33
+ description: |
34
+ A sentence or two. What do you evaluate — Claude Code skills, agent A/B tests,
35
+ CI quality gates, your own repos — and roughly at what scale?
36
+ placeholder: |
37
+ We gate CI on a suite of ~40 YAML tasks that check our internal Claude Code
38
+ skills still trigger, and A/B Claude Code against Codex each release.
39
+ validations:
40
+ required: true
41
+ - type: dropdown
42
+ id: listing
43
+ attributes:
44
+ label: How may we list you?
45
+ description: |
46
+ Pick the most you're comfortable with. **Logo use needs someone who can approve
47
+ trademark use for your organization** — if that isn't you, choose a name-only or
48
+ private option and we'll follow up.
49
+ options:
50
+ - Name only, in ADOPTERS.md
51
+ - Name in ADOPTERS.md and on the project website
52
+ - Name and logo in ADOPTERS.md and on the project website
53
+ - Please don't list us publicly — this is just for the maintainers
54
+ default: 0
55
+ validations:
56
+ required: true
57
+ - type: checkboxes
58
+ id: logo-permission
59
+ attributes:
60
+ label: Trademark permission
61
+ description: Only required if you selected a logo option above.
62
+ options:
63
+ - label: >-
64
+ I am authorized to grant this permission on behalf of my organization, and I
65
+ grant the coder_eval maintainers a non-exclusive, revocable license to display
66
+ our name and logo as an adopter in ADOPTERS.md and on the project website. We
67
+ can withdraw it at any time by commenting on this issue.
68
+ required: false
69
+ - type: input
70
+ id: contact
71
+ attributes:
72
+ label: Contact
73
+ description: GitHub handle or email, so we can reach you before publishing anything.
74
+ validations:
75
+ required: false
76
+ - type: checkboxes
77
+ id: case-study
78
+ attributes:
79
+ label: Anything else?
80
+ options:
81
+ - label: We'd be open to a short case study or a talk about our setup.
82
+ required: false
83
+ - label: We'd like to hear about breaking changes before they ship.
84
+ required: false
@@ -10,12 +10,17 @@ name: Docs
10
10
  # Source: "Deploy from a branch" → branch `gh-pages` / `/ (root)`. That's the same
11
11
  # (legacy, branch-based) configuration uipath-python already runs on.
12
12
  on:
13
- push:
14
- branches: [main]
15
- paths:
16
- - "docs/**"
17
- - "mkdocs.yml"
18
- - ".github/workflows/docs.yml"
13
+ # Auto-publish on push is DISABLED: GitHub Pages is not yet enabled for this
14
+ # repo on uipath.github.io (org owner must switch it on once — Settings → Pages
15
+ # → Deploy from a branch → gh-pages / root). The published docs currently serve
16
+ # from coder-eval.com/docs (synced separately by the website), so the gh-pages
17
+ # deploy is not needed yet. Re-enable by uncommenting the `push:` trigger below.
18
+ # push:
19
+ # branches: [main]
20
+ # paths:
21
+ # - "docs/**"
22
+ # - "mkdocs.yml"
23
+ # - ".github/workflows/docs.yml"
19
24
  workflow_dispatch:
20
25
 
21
26
  permissions:
@@ -831,3 +831,61 @@ jobs:
831
831
  name: byoa-live-output
832
832
  path: tmp/
833
833
  retention-days: 7
834
+
835
+ action-dogfood:
836
+ name: Action Dogfood (composite action, real API)
837
+ runs-on: ubuntu-latest
838
+ timeout-minutes: 15
839
+ # Skip on fork PRs where secrets aren't available (matches e2e-smoke).
840
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
841
+ steps:
842
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
843
+
844
+ # The composite action is agent-agnostic and does NOT install a coding-agent
845
+ # runtime. The dogfood task uses the default claude-code agent, so provide
846
+ # Node + the Claude CLI here (as e2e-smoke does), before invoking the action.
847
+ - name: Set up Node.js 20
848
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
849
+ with:
850
+ node-version: "20"
851
+ - name: Install Claude CLI
852
+ run: npm install -g @anthropic-ai/claude-code
853
+
854
+ - name: Run coder-eval via local action
855
+ id: dogfood
856
+ uses: ./
857
+ with:
858
+ version: local
859
+ tasks: tasks/hello_date.yaml
860
+ model: claude-haiku-4-5-20251001
861
+ run-dir: runs/ci-action-dogfood
862
+ junit-path: runs/ci-action-dogfood/junit.xml
863
+ # Credentials go through the generic env passthrough (the only channel);
864
+ # ANTHROPIC_API_KEY reaching the run is proven by the API-backed task
865
+ # succeeding. A floor of 0.0 passes for any produced score (exercises
866
+ # the gate path green in CI without flakiness); the second line
867
+ # exercises multi-line env parsing.
868
+ minimum-task-score: "0.0"
869
+ env: |
870
+ ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
871
+ CE_DOGFOOD_MARKER=1
872
+
873
+ - name: Verify outputs and JUnit file
874
+ env:
875
+ JUNIT: ${{ steps.dogfood.outputs.junit-path }}
876
+ RUNDIR: ${{ steps.dogfood.outputs.run-dir }}
877
+ run: |
878
+ set -euo pipefail
879
+ test -n "$JUNIT" && test -f "$JUNIT" || { echo "junit output missing"; exit 1; }
880
+ # Well-formedness check on a file this job just generated (trusted input;
881
+ # our writer emits no DTDs/entities) — stdlib ET is fine here.
882
+ python3 -c "import sys, xml.etree.ElementTree as ET; ET.parse(sys.argv[1])" "$JUNIT"
883
+ test -f "$RUNDIR/run.json" || { echo "run.json missing"; exit 1; }
884
+
885
+ - name: Upload dogfood run on failure
886
+ if: failure()
887
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
888
+ with:
889
+ name: action-dogfood-runs
890
+ path: runs/ci-action-dogfood/
891
+ retention-days: 7
@@ -182,23 +182,50 @@ jobs:
182
182
  echo "version=$V" >> "$GITHUB_OUTPUT"
183
183
  echo "Publishing version: $V"
184
184
 
185
- - name: Regenerate uv.lock and amend release commit
185
+ - name: Regenerate uv.lock, bump action.yml pin, and amend release commit
186
186
  if: steps.mode.outputs.prerelease != 'true' && steps.release.outputs.version != ''
187
+ env:
188
+ # Passed via env (not interpolated into the script) per GitHub's
189
+ # injection guidance.
190
+ VERSION: ${{ steps.release.outputs.version }}
187
191
  run: |
192
+ set -euo pipefail
193
+ git config user.email "github-actions[bot]@users.noreply.github.com"
194
+ git config user.name "github-actions[bot]"
195
+ # Bump the composite action's default `version:` pin to the just-released
196
+ # version so `UiPath/coder_eval@vX.Y.Z` installs `coder-eval==X.Y.Z`. The
197
+ # anchor is indentation-tolerant and keyed on the unique trailing
198
+ # "# <-- kept in sync" comment; the grep guard fails the release loudly
199
+ # if a reformat ever detaches it (rather than shipping a stale pin).
200
+ sed -i -E 's/^([[:space:]]*default: ")[0-9]+\.[0-9]+\.[0-9]+(" # <-- kept in sync)/\1'"${VERSION}"'\2/' action.yml
201
+ grep -q "default: \"${VERSION}\"" action.yml || { echo "action.yml version bump failed"; exit 1; }
202
+ git add action.yml
203
+ # Regenerate the lock too; stage it (a no-op if unchanged).
188
204
  uv lock
189
- if ! git diff --quiet uv.lock; then
190
- git config user.email "github-actions[bot]@users.noreply.github.com"
191
- git config user.name "github-actions[bot]"
192
- git add uv.lock
205
+ git add uv.lock
206
+ # Amend only if action.yml/uv.lock actually changed the tree.
207
+ if ! git diff --cached --quiet; then
193
208
  git commit --amend --no-edit
194
209
  # Amend replaced the commit the tag points at; re-point it before pushing.
195
- git tag -f "v${{ steps.release.outputs.version }}"
210
+ git tag -f "v${VERSION}"
196
211
  fi
197
212
 
198
213
  - name: Push release commit and tags
199
214
  if: steps.mode.outputs.prerelease != 'true' && steps.release.outputs.version != ''
200
215
  run: git push origin main "v${{ steps.release.outputs.version }}"
201
216
 
217
+ - name: Move major action tag (vN -> this release)
218
+ if: steps.release.outputs.version != ''
219
+ env:
220
+ VERSION: ${{ steps.release.outputs.version }}
221
+ run: |
222
+ set -euo pipefail
223
+ # Consumers pin `UiPath/coder_eval@v0` (becomes `@v1` at 1.0.0). Force-move
224
+ # the moving major tag to this release. Force on a missing tag creates it.
225
+ MAJOR="v${VERSION%%.*}"
226
+ git tag -f "$MAJOR" "v${VERSION}"
227
+ git push -f origin "$MAJOR"
228
+
202
229
  - name: Build wheel + sdist
203
230
  if: steps.ver.outputs.version != ''
204
231
  run: uv build
@@ -0,0 +1,13 @@
1
+ # Adopters
2
+
3
+ Teams and organizations using `coder_eval` in their development or CI workflows.
4
+
5
+ Using it? [Open an adopter issue](https://github.com/UiPath/coder_eval/issues/new?template=adopter.yml)
6
+ and we'll add you here. Name-only listings are welcome — a logo is never required.
7
+
8
+ Every entry below is published with the organization's permission, and any of them can be
9
+ removed on request by opening an issue.
10
+
11
+ | Organization | How they use it |
12
+ |---|---|
13
+ | [UiPath](https://www.uipath.com) | Nightly evaluation of internal Claude Code skills and agent A/B experiments; maintains `coder_eval`. |
@@ -2,6 +2,218 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.8.10 (2026-07-24)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Remove dead SimulationConfig.parallel_trials; add CE031 to guard the class
10
+ ([`947acd3`](https://github.com/UiPath/coder_eval/commit/947acd34a4f0451c69cb7bf0eb863127b9995f76))
11
+
12
+ - **early-stop**: Add stop_when 'auto' — per-instance arming + pass-armed-subset stop rule
13
+ ([#51](https://github.com/UiPath/coder_eval/pull/51),
14
+ [`08e21e6`](https://github.com/UiPath/coder_eval/commit/08e21e67b67fdab84d26b8a0e5551e04289d92a8))
15
+
16
+ - **early-stop**: Defer fail-stop while a pass-armed criterion is undecided
17
+ ([#51](https://github.com/UiPath/coder_eval/pull/51),
18
+ [`08e21e6`](https://github.com/UiPath/coder_eval/commit/08e21e67b67fdab84d26b8a0e5551e04289d92a8))
19
+
20
+ - **early-stop**: Return assert_never explicitly to satisfy CodeQL
21
+ ([#51](https://github.com/UiPath/coder_eval/pull/51),
22
+ [`08e21e6`](https://github.com/UiPath/coder_eval/commit/08e21e67b67fdab84d26b8a0e5551e04289d92a8))
23
+
24
+ - **reports**: Code review fixes for the JUnit CI gate
25
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
26
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
27
+
28
+ - **reports**: JUnit CI-gate review fixes + CE027 env-var lint
29
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
30
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
31
+
32
+ - **reports**: Make skipped-task JUnit names platform-independent
33
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
34
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
35
+
36
+ ### Chores
37
+
38
+ - Re-trigger CI (GitHub dropped the force-push event)
39
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
40
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
41
+
42
+ - **deps**: Lock defusedxml (dev-only, test-side XML parsing)
43
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
44
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
45
+
46
+ ### Continuous Integration
47
+
48
+ - Disable Docs gh-pages auto-publish on push (Pages not enabled yet)
49
+ ([`c289d46`](https://github.com/UiPath/coder_eval/commit/c289d46c5cec269f205224e4dfce27affab5557e))
50
+
51
+ ### Documentation
52
+
53
+ - 1/8 — add DATASETS.md and a task-schema dataset: section
54
+ ([`e3d37ac`](https://github.com/UiPath/coder_eval/commit/e3d37ac793e6f12c020b71a4ed19df2279b4b2c1))
55
+
56
+ - 2/8 — retire BYOD.md into DOCKER_ISOLATION.md
57
+ ([`1a4a2a5`](https://github.com/UiPath/coder_eval/commit/1a4a2a5893639d14832dbd1614163aa7c18bf70a))
58
+
59
+ - 3/8 — one complete run_limits reference; document skip
60
+ ([`bcb7e24`](https://github.com/UiPath/coder_eval/commit/bcb7e24132c229114efe9a38281a37e736d83312))
61
+
62
+ - 4/8 — add DIALOG_MODE.md and correct four stale simulation claims
63
+ ([`18dcbe9`](https://github.com/UiPath/coder_eval/commit/18dcbe95d156856149538406ededc8c75ec594f8))
64
+
65
+ - 5/8 — fix prompt_mutations example; add CE029
66
+ ([`b524009`](https://github.com/UiPath/coder_eval/commit/b5240099c58f5b50c7b5fe531a12f1f8b98aec29))
67
+
68
+ - 7/8 — generate flat indexes from the mkdocs nav; add CE028
69
+ ([`1514bcb`](https://github.com/UiPath/coder_eval/commit/1514bcb8f075ed48f2857a84269513c60878ea81))
70
+
71
+ - Add CI Gate reference (GitHub Action + JUnit) and wire into indexes
72
+ ([`b8c6301`](https://github.com/UiPath/coder_eval/commit/b8c63018bd93ba91751511d95f4af96a444d9873))
73
+
74
+ - Agent guides, extending & report-schema references, and fixes
75
+ ([`ce74824`](https://github.com/UiPath/coder_eval/commit/ce74824bde2b5322dc745bace045e1806f77324b))
76
+
77
+ - Fold nav long tail into one Advanced group; align index ordering
78
+ ([`e2ff053`](https://github.com/UiPath/coder_eval/commit/e2ff0539af8c9e3e6deb85c0a0124c0232224033))
79
+
80
+ - Point docs links to coder-eval.com/docs; drop Ruff badge
81
+ ([`60430e5`](https://github.com/UiPath/coder_eval/commit/60430e5e857f0af6fbf08cde00f0621de4610562))
82
+
83
+ - Point pyproject Documentation URL to coder-eval.com/docs
84
+ ([`be39df2`](https://github.com/UiPath/coder_eval/commit/be39df23c8ba1a0f6f945dc99e3827eb5d6f2772))
85
+
86
+ - Reword CODER_EVAL_RAW_SDK_LOG to prose form (satisfy CE027)
87
+ ([`d7d5b59`](https://github.com/UiPath/coder_eval/commit/d7d5b59b990127810fcfe33272f3ff733a9498cd))
88
+
89
+ - Use the brand name "Coder Eval" in prose and titles
90
+ ([`821f11b`](https://github.com/UiPath/coder_eval/commit/821f11bf94762f6578913090568f5b092e237596))
91
+
92
+ ### Features
93
+
94
+ - Packaged CI gate — JUnit XML output + composite GitHub Action
95
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
96
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
97
+
98
+ - **action**: Generic env passthrough + minimum-task-score gate
99
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
100
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
101
+
102
+ - **ci**: 3/3 — publish composite action, release automation, PR dogfood
103
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
104
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
105
+
106
+ - **cli**: 2/3 — wire run --junit-xml and report -f junit
107
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
108
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
109
+
110
+ - **reports**: 1/3 — add reports_junit.py disk-driven JUnit XML writer
111
+ ([#37](https://github.com/UiPath/coder_eval/pull/37),
112
+ [`74db6fa`](https://github.com/UiPath/coder_eval/commit/74db6facfea6f898af4db6709e563d90af0d7b30))
113
+
114
+ ### Testing
115
+
116
+ - 6/8 — CE030 documents-or-exempts model fields
117
+ ([`c9a3b16`](https://github.com/UiPath/coder_eval/commit/c9a3b160deeec385386a7009812025bc26021363))
118
+
119
+
120
+ ## v0.8.9 (2026-07-23)
121
+
122
+ ### Bug Fixes
123
+
124
+ - Code review fixes for welch-t-test-exact ([#38](https://github.com/UiPath/coder_eval/pull/38),
125
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
126
+
127
+ - Render weight:0 criteria as informational on every display surface
128
+ ([#34](https://github.com/UiPath/coder_eval/pull/34),
129
+ [`9a34e90`](https://github.com/UiPath/coder_eval/commit/9a34e90bba2854316149cad61613a75dd3bd91e4))
130
+
131
+ - Weight:0 un-gates criteria (informational criteria)
132
+ ([#34](https://github.com/UiPath/coder_eval/pull/34),
133
+ [`9a34e90`](https://github.com/UiPath/coder_eval/commit/9a34e90bba2854316149cad61613a75dd3bd91e4))
134
+
135
+ - Weight:0 un-gates criteria and renders as informational
136
+ ([#34](https://github.com/UiPath/coder_eval/pull/34),
137
+ [`9a34e90`](https://github.com/UiPath/coder_eval/commit/9a34e90bba2854316149cad61613a75dd3bd91e4))
138
+
139
+ - **early-stop**: Decide skill activation on the tool call, not its result
140
+ ([#43](https://github.com/UiPath/coder_eval/pull/43),
141
+ [`d34aa97`](https://github.com/UiPath/coder_eval/commit/d34aa97416ae3af09d09cdf78cb6607b4e2e6f7c))
142
+
143
+ - **early-stop**: Latch skill activation on any engagement, not first
144
+ ([#43](https://github.com/UiPath/coder_eval/pull/43),
145
+ [`d34aa97`](https://github.com/UiPath/coder_eval/commit/d34aa97416ae3af09d09cdf78cb6607b4e2e6f7c))
146
+
147
+ - **evalboard**: Match watchlist skeleton header to avoid layout shift
148
+ ([#45](https://github.com/UiPath/coder_eval/pull/45),
149
+ [`acc1c86`](https://github.com/UiPath/coder_eval/commit/acc1c86bc97b80383ce1ef402356853447088e4a))
150
+
151
+ - **reports**: 1/2 — exact Student-t p-values in welch_t_test
152
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
153
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
154
+
155
+ - **reports**: Exact Student-t p-values and a paired comparison section
156
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
157
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
158
+
159
+ - **reports**: Fail loud on t* overflow; surface excluded paired tasks
160
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
161
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
162
+
163
+ - **reports**: One source of truth for variant series and paired stats
164
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
165
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
166
+
167
+ - **reports**: Validate confidence and n_resamples in bootstrap_mean_ci
168
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
169
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
170
+
171
+ ### Chores
172
+
173
+ - **harness**: Defer two guards from the welch-t-test-exact run
174
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
175
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
176
+
177
+ ### Documentation
178
+
179
+ - Add adopter issue template and ADOPTERS.md ([#40](https://github.com/UiPath/coder_eval/pull/40),
180
+ [`bfbed4e`](https://github.com/UiPath/coder_eval/commit/bfbed4e4a2ca857167fac2cb15462b7159e97684))
181
+
182
+ - Switch multi-model review from codex to gpt-5 alias
183
+ ([#36](https://github.com/UiPath/coder_eval/pull/36),
184
+ [`0a3f2a7`](https://github.com/UiPath/coder_eval/commit/0a3f2a71a0a1e1e56f42a668fff57bac06eb99ec))
185
+
186
+ ### Features
187
+
188
+ - **evalboard**: Make all pages harness-aware and stream tables
189
+ ([#45](https://github.com/UiPath/coder_eval/pull/45),
190
+ [`acc1c86`](https://github.com/UiPath/coder_eval/commit/acc1c86bc97b80383ce1ef402356853447088e4a))
191
+
192
+ - **evalboard**: Make analytics surfaces harness-aware and stream tables
193
+ ([#45](https://github.com/UiPath/coder_eval/pull/45),
194
+ [`acc1c86`](https://github.com/UiPath/coder_eval/commit/acc1c86bc97b80383ce1ef402356853447088e4a))
195
+
196
+ - **evalboard**: Scope task trends to one harness
197
+ ([#45](https://github.com/UiPath/coder_eval/pull/45),
198
+ [`acc1c86`](https://github.com/UiPath/coder_eval/commit/acc1c86bc97b80383ce1ef402356853447088e4a))
199
+
200
+ - **reports**: 2/2 — add a Paired Comparison section to experiment reports
201
+ ([#38](https://github.com/UiPath/coder_eval/pull/38),
202
+ [`6df6e9b`](https://github.com/UiPath/coder_eval/commit/6df6e9bb1f3bd009592185ec3473e8f2e67d3816))
203
+
204
+ ### Refactoring
205
+
206
+ - **evalboard**: Address review nits on harness plumbing
207
+ ([#45](https://github.com/UiPath/coder_eval/pull/45),
208
+ [`acc1c86`](https://github.com/UiPath/coder_eval/commit/acc1c86bc97b80383ce1ef402356853447088e4a))
209
+
210
+ ### Testing
211
+
212
+ - **early-stop**: Cover second-review items (two-AgentStart, golden corpus, parity)
213
+ ([#43](https://github.com/UiPath/coder_eval/pull/43),
214
+ [`d34aa97`](https://github.com/UiPath/coder_eval/commit/d34aa97416ae3af09d09cdf78cb6607b4e2e6f7c))
215
+
216
+
5
217
  ## v0.8.8 (2026-07-22)
6
218
 
7
219
  ### Bug Fixes
@@ -20,6 +20,7 @@ coder_eval/
20
20
  ├── orchestrator.py # Main evaluation loop
21
21
  ├── reports.py # Markdown/JSON report generation (run-level + per-suite rollup via write_suite_rollups)
22
22
  ├── reports_experiment.py # Experiment/cross-variant report generation
23
+ ├── reports_junit.py # JUnit XML report from a finalized run dir (run.json spine; for CI test-report ingestion)
23
24
  ├── analysis.py # Command statistics aggregation
24
25
  ├── logging_config.py # Structured logging setup
25
26
  ├── path_utils.py # Run ID generation, path utilities
@@ -35,7 +36,7 @@ coder_eval/
35
36
  │ ├── criteria.py # 14 success criterion types + base + union
36
37
  │ ├── experiment.py # ExperimentDefinition, ExperimentVariant, ResolvedTask, result models
37
38
  │ ├── judge_defaults.py # DEFAULT_JUDGE_MODEL constant (cycle-free leaf)
38
- │ ├── mutations.py # PromptMutation variants (prefix/suffix/replace/template/rephrase)
39
+ │ ├── mutations.py # PromptMutation variants (prefix/suffix/replace/template)
39
40
  │ ├── results.py # CriterionResult (+ ClassificationCriterionResult), TurnRecord, EvaluationResult, EarlyStopInfo/EarlyStopReason, CriterionAggregate, ThresholdCheck, SuiteRollup
40
41
  │ ├── routing.py # ApiRoute (DirectRoute/BedrockRoute)
41
42
  │ ├── sandbox.py # SandboxConfig, ResourceLimits
@@ -120,6 +121,7 @@ tasks/ # Task definition YAML files
120
121
  tests/ # Test suite
121
122
  docs/ # Documentation
122
123
  templates/ # Sandbox template directories
124
+ action.yml # Published composite GitHub Action (coder-eval as a CI gate). release.yml maintains its `version:` default + the moving `v<major>` tag.
123
125
  ```
124
126
 
125
127
  ## Key Architectural Patterns
@@ -139,7 +141,7 @@ templates/ # Sandbox template directories
139
141
  - **Reconciliation message (stream self-reconciles to the turn total)**: The per-message stream consistently under-reports the authoritative turn total — a fixed prompt slice (~512 input tokens on Claude) is billed on no SDK-emitted message, and sub-agent input/cache only partially bubbles up. So `EventCollector.build_turn_record` appends one synthetic `ReconciliationMessage` (`role="reconciliation"`, in the `TranscriptMessage` union) per turn, carrying the per-bucket residual = `token_usage` − Σ(assistant message buckets). The invariant: **summing the four token buckets across `TurnRecord.messages` (assistant + reconciliation) equals `token_usage` exactly**, for both Claude and Codex (Codex's stream is already complete after `_recover_subagent_tool_calls`, so its residual is usually 0 and no entry is emitted). This is what lets the evalboard SUM the message stream as the source of truth instead of reading a separate aggregate ("agent tokens"): `selectTokenTotals` returns the stream sum whenever a reconciliation entry is present, and the timeline renders it as its own row. It is agent-agnostic (booked at the single `EventCollector` seam), carries no cost (cost stays on `token_usage`), and is excluded from generation/turn counts and the cost simulator. The Python `token_usage`/`total_token_usage` aggregate is unchanged and still authoritative for budget/judges/reports.
140
142
  - **sandbox isolation**: Tasks that don't need MCP servers should set `setting_sources: []` in their `agent:` block to isolate the sandbox from the host project's CLAUDE.md and settings. Without this, the host project's CLAUDE.md (often 20 KB+) is injected into every API call, inflating cache-creation tokens and cost significantly.
141
143
  - **Run-time caps (non-criterion enforcement)**: `TaskDefinition.run_limits` (`RunLimits` model) is the single namespace for all run-time caps — `max_turns` / `task_timeout` / `turn_timeout` (structural) and `max_input_tokens` / `max_output_tokens` / `max_total_tokens` / `max_usd` (cumulative budget). Token/USD breaches abort with `FinalStatus.TOKEN_BUDGET_EXCEEDED` or `COST_BUDGET_EXCEEDED` (both `category == "failed"`). Structural caps are set from the CLI via `-D run_limits.max_turns=…` / `-D run_limits.task_timeout=…` / `-D run_limits.turn_timeout=…` (field-merged into `run_limits`); budget caps via `-D run_limits.max_usd=…` etc. or YAML. Layered config uses field-merge — a variant block overrides individual keys without replacing the task's block.
142
- - **Early stop on criterion (opt-in)**: `run_limits.stop_early` (default off) ends a single-shot Claude run early once the run's **armed** criteria are decided, so a raised `max_turns` isn't wasted on the smoke flavor. A criterion is armed by `stop_when: pass|fail|decided`; only criteria that can decide from a partial trajectory may arm (they declare a non-empty `live_stop_polarities` ClassVar and override `live_verdict` on `BaseCriterion` — currently `skill_triggered`, `command_executed`; CE025 enforces the two stay consistent). It uses a cooperative `should_stop` seam on the Claude agent's between-messages guard (tool-call granularity, no SIGKILL) driven by `orchestration/early_stop.py::EarlyStopWatcher` (own `EventCollector` + stop rule). Live verdicts only *trigger* the stop; the standard `check_all` on the frozen trajectory is authoritative. An early-stopped run gates on the **armed subset** (`EvaluationResult.armed_criteria_passed`); a completed run gates on the full set. Every unsupported use (non-observable criterion, non-Claude agent, wrong polarity, no armed criterion, simulation mode) is an error at resolution (plan *and* run), and a runtime verdict bug **fails open** to a full run. Surfaces: `EarlyStopInfo` (reason + deciding criterion + when), report notes/badges, `stopped_early` run.json rows, and `EarlyStopped`/`EarlyStopReason` telemetry dims. Defaults off ⇒ behavior byte-for-behavior unchanged.
144
+ - **Early stop on criterion (opt-in)**: `run_limits.stop_early` (default off) ends a single-shot Claude run early once the run's **armed** criteria are decided, so a raised `max_turns` isn't wasted on the smoke flavor. A criterion is armed by `stop_when: pass|fail|decided|auto`; only criteria that can decide from a partial trajectory may arm (non-empty `live_stop_polarities` ClassVar + `live_verdict` override — currently `skill_triggered`, `command_executed`; CE025 keeps the two consistent). `decided` arms **both** polarities; `auto` arms whichever polarities **this instance** can decide — the value for dataset-fanned criteria whose positive/distractor role flips per row. Stop rule: the pass-stop fires when every **pass-armed** criterion live-passes (fail-armed distractors are not required to pass; zero pass-armed ⇒ never pass-stops); the fail-stop fires on the first fail-armed live-fail but is **deferred while any pass-armed criterion is undecided** — a distractor misfire must not truncate a positive row's recall signal, so the latched misfire fires once the positives resolve (or the run continues to the cap). A fail-stop is therefore verdict-preserving; a pass-stop can miss a *later* distractor misfire, so authoritative P/R/F1 comes from a `stop_early: false` run. Driven by `orchestration/early_stop.py::EarlyStopWatcher` through the Claude agent's cooperative `should_stop` seam (tool-call granularity, no SIGKILL); live verdicts only *trigger* the stop the standard `check_all` on the frozen trajectory is authoritative. An early-stopped run gates on the **armed subset** (`EvaluationResult.armed_criteria_passed`); a completed run gates on the full set. Every unsupported use is a hard error at resolution (plan *and* run), and a runtime verdict bug **fails open** to a full run. Surfaces: `EarlyStopInfo`, report notes/badges, `stopped_early` run.json rows, `EarlyStopped`/`EarlyStopReason` telemetry dims. Worked rationale: docs/TASK_DEFINITION_GUIDE.md § `stop_early`. Defaults off ⇒ behavior byte-for-behavior unchanged.
143
145
 
144
146
  ## Success Criteria (14 types)
145
147
 
@@ -160,7 +162,7 @@ templates/ # Sandbox template directories
160
162
  | `llm_judge` | Continuous | LLM grades artifacts + optional trajectory + optional reference; routes through the run's backend (Bedrock / Anthropic) |
161
163
  | `agent_judge` | Continuous | Spawns a Claude Code SDK agent in an isolated sandbox copy; judge uses tools (Bash/Read/Grep/…) to investigate and returns a JSON verdict. Expensive; runs with evaluator credentials — see SECURITY note in the criterion docstring. |
162
164
 
163
- All criteria support `weight` (default 1.0) and `pass_threshold` (default 0.9), plus `stop_when` (`pass`/`fail`/`decided`, default `null`) which arms the criterion for early stop when `run_limits.stop_early` is set (observable criteria only). On dataset-backed tasks, criteria may also set `suite_thresholds: {metric: min_value}` — the suite gate passes iff every listed metric (from the criterion's `aggregate()` output) meets its minimum.
165
+ All criteria support `weight` (default 1.0) and `pass_threshold` (default 0.9), plus `stop_when` (`pass`/`fail`/`decided`/`auto`, default `null`) which arms the criterion for early stop when `run_limits.stop_early` is set (observable criteria only; `auto` arms the instance's own decidable polarities). On dataset-backed tasks, criteria may also set `suite_thresholds: {metric: min_value}` — the suite gate passes iff every listed metric (from the criterion's `aggregate()` output) meets its minimum.
164
166
 
165
167
  ## Evaluation Flow
166
168
 
@@ -193,11 +195,17 @@ make format # ruff format
193
195
  make check # ruff check (lint)
194
196
  make typecheck # pyright
195
197
  make test # pytest
196
- make lint # custom architectural lint rules (CE001–CE025)
198
+ make lint # custom architectural lint rules (CE001+)
197
199
  make verify # All of the above + coverage check (CI equivalent)
198
200
  ```
199
201
 
200
- When fixing a bug, ask: *could a custom lint rule have prevented this?* If the root cause is a mechanically detectable pattern (e.g., "always import from `coder_eval.models`", "never call blocking IO in async"), add a rule to `tests/lint/rules/` following the CE001–CE025 pattern and wire it up in `tests/lint/runner.py`. This turns a one-time fix into permanent enforcement. See `tests/test_custom_lint.py` for how rules are tested.
202
+ When fixing a bug, ask: *could a custom lint rule have prevented this?* If the root cause is a mechanically detectable pattern (e.g., "always import from `coder_eval.models`", "never call blocking IO in async"), add a rule to `tests/lint/rules/` following the CE001+ pattern and wire it up in `tests/lint/runner.py`. This turns a one-time fix into permanent enforcement. See `tests/test_custom_lint.py` for how rules are tested. (Doc-surface / whole-tree rules that reason over Markdown/YAML or the entire `src/` tree rather than one `.py` AST at a time — CE027–CE031 — are not `BaseRule`s in the runner; they are wired as dedicated `@pytest.mark.lint` test classes. CE031 guards against dead config: a behavior-driving field on `SimulationConfig`/`RunLimits`/`Dataset` that no code reads by name.)
203
+
204
+ Adding a user-facing field to one of the models CE030 tracks (`TaskDefinition`, `RunLimits`, `Dataset`, `SimulationConfig` — see `tests/lint/doc_schema_parity.py`) means documenting it in its guide (mention the field name as inline code) or adding an `EXEMPT` entry with a reason it is not user-authored. `make lint` fails otherwise.
205
+
206
+ **Docs index SSOT.** `nav:` plus `extra.docs_index` (blurbs) in `mkdocs.yml` are the single source of truth for the flat index surfaces — `README.md`'s Documentation table, `docs/index.md`'s "Where to go next" table, and the `## Docs` / `## Tutorials` sections of `docs/llms.txt`. Regenerate all three with `make docs-indexes`; **CE028** fails the build if any drifts, if a nav page lacks a blurb (or vice-versa), or if a `docs/*.md` page is missing from the nav. The website sidebar derives from the same `nav:`. When adding or renaming a docs page, edit `nav:` + `extra.docs_index` and run `make docs-indexes` — never hand-edit the generated tables (they sit between `<!-- docs-index:start -->` / `<!-- docs-index:end -->` markers).
207
+
208
+ **Anchor slugger convention.** The docs are rendered by three sluggers (GitHub, Starlight/github-slugger on coder-eval.com, and python-markdown/mkdocs), which disagree on headings containing `&` or punctuation (`api-routing--benchmarking` vs `api-routing-benchmarking`). Prefer punctuation-free headings so all three agree; if a heading needs `&`, add a GitHub-form `<a id="…"></a>` shim above it and link that form. Verify a new intra-doc anchor link resolves in the built HTML (`mkdocs build`), not by eye.
201
209
 
202
210
  ## Configuration
203
211
 
@@ -294,7 +302,7 @@ Tasks are YAML files. See [docs/TASK_DEFINITION_GUIDE.md](docs/TASK_DEFINITION_G
294
302
 
295
303
  **Runtime (always)**: pydantic, pydantic-settings, pyyaml, typer, rich, python-dotenv, anthropic, claude-agent-sdk, anyio, radon, tqdm, jmespath, jsonschema
296
304
 
297
- **Runtime (optional, `[uipath]` extra)**: uipath — the in-host `uipath` SDK (handy for local sandbox parity with tasks that invoke `uv run uipath eval ...`). Base installs without this extra still run end-to-end; UiPath-dependent paths fail at dispatch with a clear `pip install 'coder-eval[uipath]'` hint. The LLM judge and the `rephrase` mutation no longer use the LLM Gateway client — they route through the run's backend (Bedrock / Anthropic), so `uipath-llmgw-client` is no longer a dependency.
305
+ **Runtime (optional, `[uipath]` extra)**: uipath — the in-host `uipath` SDK (handy for local sandbox parity with tasks that invoke `uv run uipath eval ...`). Base installs without this extra still run end-to-end; UiPath-dependent paths fail at dispatch with a clear `pip install 'coder-eval[uipath]'` hint. The LLM judge no longer uses the LLM Gateway client — it routes through the run's backend (Bedrock / Anthropic), so `uipath-llmgw-client` is no longer a dependency.
298
306
 
299
307
  **Dev**: pytest, pytest-asyncio, pytest-mock, pytest-cov, ruff, pyright, pip-audit, bandit, pre-commit, mcp
300
308
 
@@ -1,4 +1,4 @@
1
- .PHONY: help install format check typecheck test test-live test-smoke verify verify-noextra clean run lint docker-image docker-image-full coder-eval-runtime docker-images
1
+ .PHONY: help install format check typecheck test test-live test-smoke verify verify-noextra clean run lint docs-indexes docker-image docker-image-full coder-eval-runtime docker-images
2
2
 
3
3
  # Single source of the installed coder-eval version (used to tag the docker
4
4
  # images). Referenced lazily inside the docker recipes, so it doesn't run on
@@ -24,6 +24,9 @@ check: ## Run linting checks
24
24
  lint: ## Run custom architectural lint rules (CE001+)
25
25
  uv run pytest tests/test_custom_lint.py -v --tb=short --no-header -p no:warnings
26
26
 
27
+ docs-indexes: ## Regenerate README/docs indexes from the mkdocs nav (SSOT)
28
+ uv run python -m tests.lint.doc_indexes
29
+
27
30
  typecheck: ## Run type checking with pyright
28
31
  uv run pyright
29
32