coder-eval 0.9.6__tar.gz → 0.10.2__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 (644) hide show
  1. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-review.md +1 -1
  2. coder_eval-0.10.2/.claude/harness-candidates.md +457 -0
  3. coder_eval-0.10.2/.claude/shared/run-layout.md +30 -0
  4. coder_eval-0.10.2/.claude-plugin/marketplace.json +17 -0
  5. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/pr-checks.yml +61 -0
  6. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/publish-testpypi.yml +1 -1
  7. coder_eval-0.10.2/.github/workflows/release.yml +684 -0
  8. coder_eval-0.10.2/.github/workflows/verify-published-action.yml +572 -0
  9. {coder_eval-0.9.6 → coder_eval-0.10.2}/CHANGELOG.md +431 -0
  10. {coder_eval-0.9.6 → coder_eval-0.10.2}/CLAUDE.md +11 -3
  11. {coder_eval-0.9.6 → coder_eval-0.10.2}/CONTRIBUTING.md +52 -0
  12. {coder_eval-0.9.6 → coder_eval-0.10.2}/Makefile +4 -1
  13. {coder_eval-0.9.6 → coder_eval-0.10.2}/PKG-INFO +26 -7
  14. {coder_eval-0.9.6 → coder_eval-0.10.2}/README.md +24 -5
  15. {coder_eval-0.9.6 → coder_eval-0.10.2}/action.yml +1 -1
  16. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/AB_EXPERIMENTS.md +8 -3
  17. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/CI_GATE.md +26 -3
  18. coder_eval-0.10.2/docs/PLUGIN.md +205 -0
  19. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/REPORT_SCHEMA.md +32 -2
  20. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/TASK_DEFINITION_GUIDE.md +32 -9
  21. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/USER_GUIDE.md +14 -6
  22. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/agents/ANTIGRAVITY.md +24 -4
  23. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/agents/CLAUDE_CODE.md +47 -5
  24. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/agents/CODEX.md +18 -0
  25. coder_eval-0.10.2/docs/agents/HARNESS_PARITY.md +115 -0
  26. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/index.md +2 -0
  27. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/llms.txt +3 -0
  28. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/02-ci-pipeline.md +1 -1
  29. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/04-writing-a-task.md +1 -1
  30. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/05-comparing-models.md +1 -1
  31. coder_eval-0.10.2/docs/tutorials/07-plugin-in-claude-code.md +175 -0
  32. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/README.md +1 -0
  33. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/.gitignore +4 -0
  34. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/README.md +48 -4
  35. coder_eval-0.10.2/evalboard/app/_lib/__tests__/source-param.test.ts +48 -0
  36. coder_eval-0.10.2/evalboard/app/_lib/source-param.ts +35 -0
  37. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/api/download/route.ts +7 -4
  38. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/api/file/route.ts +6 -1
  39. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/api/refresh/__tests__/route.test.ts +56 -2
  40. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/api/refresh/route.ts +9 -3
  41. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/layout.tsx +21 -23
  42. coder_eval-0.10.2/evalboard/app/scribe/page.tsx +159 -0
  43. coder_eval-0.10.2/evalboard/app/scribe/run-table.tsx +139 -0
  44. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/model-comparison.yaml +2 -2
  45. {coder_eval-0.9.6 → coder_eval-0.10.2}/mkdocs.yml +5 -0
  46. coder_eval-0.10.2/plugins/coder-eval/.claude-plugin/plugin.json +10 -0
  47. coder_eval-0.10.2/plugins/coder-eval/README.md +71 -0
  48. coder_eval-0.10.2/plugins/coder-eval/reference/cli-setup.md +113 -0
  49. coder_eval-0.10.2/plugins/coder-eval/reference/criteria.md +289 -0
  50. coder_eval-0.10.2/plugins/coder-eval/reference/repo-layout.md +76 -0
  51. {coder_eval-0.9.6/.claude/shared → coder_eval-0.10.2/plugins/coder-eval/reference}/run-layout.md +13 -7
  52. coder_eval-0.10.2/plugins/coder-eval/reference/task-rubric.md +159 -0
  53. coder_eval-0.10.2/plugins/coder-eval/reference/templates/activation-rows.jsonl +6 -0
  54. coder_eval-0.10.2/plugins/coder-eval/reference/templates/activation.yaml +43 -0
  55. coder_eval-0.10.2/plugins/coder-eval/skills/analyze/SKILL.md +330 -0
  56. coder_eval-0.10.2/plugins/coder-eval/skills/check-skill/SKILL.md +232 -0
  57. coder_eval-0.10.2/plugins/coder-eval/skills/ci/SKILL.md +214 -0
  58. coder_eval-0.10.2/plugins/coder-eval/skills/init/SKILL.md +132 -0
  59. coder_eval-0.10.2/plugins/coder-eval/skills/lint-tasks/SKILL.md +218 -0
  60. coder_eval-0.10.2/plugins/coder-eval/skills/task/SKILL.md +243 -0
  61. {coder_eval-0.9.6 → coder_eval-0.10.2}/pyproject.toml +1 -1
  62. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/__init__.py +1 -1
  63. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agent.py +19 -4
  64. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/antigravity_agent.py +336 -77
  65. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/claude_code_agent.py +67 -1
  66. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/codex_agent.py +192 -37
  67. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/plan_command.py +5 -0
  68. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/agent_judge.py +26 -8
  69. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/cli_called.py +14 -9
  70. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_persistence.py +53 -48
  71. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/sub_agent.py +13 -0
  72. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/__init__.py +10 -0
  73. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/agent_config.py +60 -1
  74. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/criteria.py +92 -13
  75. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/limits.py +3 -0
  76. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/results.py +48 -10
  77. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/tasks.py +60 -17
  78. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/experiment.py +6 -4
  79. coder_eval-0.10.2/src/coder_eval/orchestration/run_limits.py +34 -0
  80. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/task_loader.py +47 -16
  81. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestrator.py +204 -15
  82. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/reports.py +63 -12
  83. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/reports_html.py +55 -15
  84. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/reports_junit.py +54 -29
  85. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/simulation/user_simulator.py +46 -7
  86. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/collector.py +18 -0
  87. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/early_stop_decision_budget_exceeded.yaml +5 -0
  88. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/early_stop_weighted_high_weight_kills_run.yaml +6 -0
  89. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/early_stop_weighted_low_weight_absorbed.yaml +8 -0
  90. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +6 -0
  91. coder_eval-0.10.2/tasks/run_limits/max_turns_cap.yaml +51 -0
  92. coder_eval-0.10.2/tasks/run_limits/turn_timeout.yaml +29 -0
  93. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/action_docs.py +75 -5
  94. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/doc_examples.py +11 -4
  95. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/doc_indexes.py +4 -20
  96. coder_eval-0.10.2/tests/lint/generated.py +57 -0
  97. coder_eval-0.10.2/tests/lint/plugin_reference.py +254 -0
  98. coder_eval-0.10.2/tests/lint/workflow_outputs.py +269 -0
  99. coder_eval-0.10.2/tests/test_action_version_pin.py +98 -0
  100. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent.py +175 -3
  101. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_judge_criterion.py +88 -0
  102. coder_eval-0.10.2/tests/test_antigravity_agent.py +1565 -0
  103. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_called_criterion.py +208 -0
  104. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_codex_agent.py +174 -2
  105. coder_eval-0.10.2/tests/test_codex_token_mapping.py +187 -0
  106. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cost_accounting_paths.py +20 -0
  107. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_criterion_result_round_trip.py +49 -0
  108. coder_eval-0.10.2/tests/test_custom_lint.py +2966 -0
  109. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_early_stop.py +12 -2
  110. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_persistence.py +39 -3
  111. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_models.py +74 -0
  112. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_orchestrator.py +8 -1
  113. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_plan_command.py +29 -1
  114. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports.py +109 -0
  115. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports_html.py +30 -0
  116. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports_junit.py +42 -1
  117. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_resolve_task_files.py +155 -8
  118. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_limits_models.py +35 -0
  119. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_limits_orchestrator.py +36 -0
  120. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sub_agent_runner.py +22 -0
  121. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_timeout_orchestrator.py +197 -0
  122. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_user_simulator.py +13 -0
  123. coder_eval-0.10.2/tests/test_verify_published_workflow.py +478 -0
  124. coder_eval-0.10.2/tests/test_visible_turn_cap.py +68 -0
  125. {coder_eval-0.9.6 → coder_eval-0.10.2}/uv.lock +4 -4
  126. coder_eval-0.9.6/.claude/commands/coder-eval-run-analysis.md +0 -178
  127. coder_eval-0.9.6/.claude/commands/coder-eval-task-create.md +0 -177
  128. coder_eval-0.9.6/.claude/harness-candidates.md +0 -208
  129. coder_eval-0.9.6/.github/workflows/release.yml +0 -440
  130. coder_eval-0.9.6/tests/test_action_version_pin.py +0 -59
  131. coder_eval-0.9.6/tests/test_antigravity_agent.py +0 -693
  132. coder_eval-0.9.6/tests/test_codex_token_mapping.py +0 -60
  133. coder_eval-0.9.6/tests/test_custom_lint.py +0 -1413
  134. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-code-review-full.md +0 -0
  135. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  136. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-code-review.md +0 -0
  137. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-create-plan.md +0 -0
  138. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/commands/coder-eval-implement-plan.md +0 -0
  139. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/shared/axes.md +0 -0
  140. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/shared/multi-model-review.md +0 -0
  141. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/shared/review-rubric.md +0 -0
  142. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/workflows/cr-axis.js +0 -0
  143. {coder_eval-0.9.6 → coder_eval-0.10.2}/.claude/workflows/cr-parent.js +0 -0
  144. {coder_eval-0.9.6 → coder_eval-0.10.2}/.env.example +0 -0
  145. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/CODEOWNERS +0 -0
  146. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  147. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  148. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  149. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/actionlint.yaml +0 -0
  150. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/code_review.md +0 -0
  151. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/dependabot.yml +0 -0
  152. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/pages-stub/index.html +0 -0
  153. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/scripts/release_notes.py +0 -0
  154. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/claude-pr-review.yml +0 -0
  155. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/codeql.yml +0 -0
  156. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/conventional-commits.yml +0 -0
  157. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/docker-publish.yml +0 -0
  158. {coder_eval-0.9.6 → coder_eval-0.10.2}/.github/workflows/docs.yml +0 -0
  159. {coder_eval-0.9.6 → coder_eval-0.10.2}/.gitignore +0 -0
  160. {coder_eval-0.9.6 → coder_eval-0.10.2}/.pre-commit-config.yaml +0 -0
  161. {coder_eval-0.9.6 → coder_eval-0.10.2}/.python-version +0 -0
  162. {coder_eval-0.9.6 → coder_eval-0.10.2}/ADOPTERS.md +0 -0
  163. {coder_eval-0.9.6 → coder_eval-0.10.2}/CODE_OF_CONDUCT.md +0 -0
  164. {coder_eval-0.9.6 → coder_eval-0.10.2}/LICENSE +0 -0
  165. {coder_eval-0.9.6 → coder_eval-0.10.2}/NOTICE +0 -0
  166. {coder_eval-0.9.6 → coder_eval-0.10.2}/SECURITY.md +0 -0
  167. {coder_eval-0.9.6 → coder_eval-0.10.2}/docker/Dockerfile +0 -0
  168. {coder_eval-0.9.6 → coder_eval-0.10.2}/docker/Dockerfile.runtime +0 -0
  169. {coder_eval-0.9.6 → coder_eval-0.10.2}/docker/coder_eval_entrypoint.sh +0 -0
  170. {coder_eval-0.9.6 → coder_eval-0.10.2}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  171. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/DATASETS.md +0 -0
  172. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/DIALOG_MODE.md +0 -0
  173. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/DOCKER_ISOLATION.md +0 -0
  174. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/EXTENDING.md +0 -0
  175. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/assets/hero.gif +0 -0
  176. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/comparison.md +0 -0
  177. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/01-first-evaluation.md +0 -0
  178. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/03-evalboard-local.md +0 -0
  179. {coder_eval-0.9.6 → coder_eval-0.10.2}/docs/tutorials/06-use-docker-isolation.md +0 -0
  180. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  181. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  182. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  183. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/col-help.tsx +0 -0
  184. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  185. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/harness-badge.tsx +0 -0
  186. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/harness-selector.tsx +0 -0
  187. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/scroll-table.tsx +0 -0
  188. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/search-box.tsx +0 -0
  189. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/unit-toggle.tsx +0 -0
  190. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_components/version-list.tsx +0 -0
  191. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  192. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  193. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/daily-chart.tsx +0 -0
  194. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/harness-legend.tsx +0 -0
  195. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/harness-series.ts +0 -0
  196. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/tag-rail.tsx +0 -0
  197. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  198. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/_overview/window-summary.tsx +0 -0
  199. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/error.tsx +0 -0
  200. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/globals.css +0 -0
  201. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/icon.png +0 -0
  202. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/page.tsx +0 -0
  203. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  204. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/path-to-ga/page.tsx +0 -0
  205. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  206. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  207. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/trends/actions.ts +0 -0
  208. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/trends/page.tsx +0 -0
  209. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/trends/trends-view.tsx +0 -0
  210. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  211. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/watchlist/page.tsx +0 -0
  212. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  213. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/next-env.d.ts +0 -0
  214. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/next.config.mjs +0 -0
  215. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/package.json +0 -0
  216. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/pnpm-lock.yaml +0 -0
  217. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/postcss.config.mjs +0 -0
  218. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/public/harness/antigravity.png +0 -0
  219. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/public/harness/claude-code.png +0 -0
  220. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/public/harness/codex.png +0 -0
  221. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/public/uipath.png +0 -0
  222. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/tailwind.config.ts +0 -0
  223. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/tsconfig.json +0 -0
  224. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/vitest.config.ts +0 -0
  225. {coder_eval-0.9.6 → coder_eval-0.10.2}/evalboard/vitest.setup.ts +0 -0
  226. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/default.yaml +0 -0
  227. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/early-stop-ab.yaml +0 -0
  228. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/permissions-smoke.yaml +0 -0
  229. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/plugin-comparison.yaml +0 -0
  230. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/prompt-mutations-example.yaml +0 -0
  231. {coder_eval-0.9.6 → coder_eval-0.10.2}/experiments/smoke_variants.yaml +0 -0
  232. {coder_eval-0.9.6 → coder_eval-0.10.2}/litellm/README.md +0 -0
  233. {coder_eval-0.9.6 → coder_eval-0.10.2}/litellm/cost_logger.py +0 -0
  234. {coder_eval-0.9.6 → coder_eval-0.10.2}/litellm/litellm-config.yaml +0 -0
  235. {coder_eval-0.9.6 → coder_eval-0.10.2}/litellm/start-litellm.sh +0 -0
  236. {coder_eval-0.9.6 → coder_eval-0.10.2}/osv-scanner.toml +0 -0
  237. {coder_eval-0.9.6 → coder_eval-0.10.2}/scripts/check_commit_msg.sh +0 -0
  238. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/.gitattributes +0 -0
  239. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/__init__.py +0 -0
  240. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/_logging.py +0 -0
  241. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/noop_agent.py +0 -0
  242. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/registry.py +0 -0
  243. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/agents/watchdog.py +0 -0
  244. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/analysis.py +0 -0
  245. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/__init__.py +0 -0
  246. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/aggregate_command.py +0 -0
  247. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/console.py +0 -0
  248. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/evaluate_command.py +0 -0
  249. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/report_command.py +0 -0
  250. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/run_command.py +0 -0
  251. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/run_helpers.py +0 -0
  252. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  253. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/cli/utils.py +0 -0
  254. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/config.py +0 -0
  255. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/__init__.py +0 -0
  256. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  257. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/base.py +0 -0
  258. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/classification_match.py +0 -0
  259. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/command_executed.py +0 -0
  260. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  261. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/file_check.py +0 -0
  262. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/file_contains.py +0 -0
  263. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/file_exists.py +0 -0
  264. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  265. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/json_check.py +0 -0
  266. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/llm_judge.py +0 -0
  267. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/reference_comparison.py +0 -0
  268. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/run_command.py +0 -0
  269. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/skill_triggered.py +0 -0
  270. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/criteria/uipath_eval.py +0 -0
  271. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/__init__.py +0 -0
  272. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/agent.py +0 -0
  273. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/budget.py +0 -0
  274. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/categories.py +0 -0
  275. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/categorization.py +0 -0
  276. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/checker_misuse.py +0 -0
  277. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/executor.py +0 -0
  278. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/judge.py +0 -0
  279. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/retry.py +0 -0
  280. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/errors/timeout.py +0 -0
  281. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/__init__.py +0 -0
  282. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/checker.py +0 -0
  283. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  284. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  285. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_context.py +0 -0
  286. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_models.py +0 -0
  287. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/judge_usage.py +0 -0
  288. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/summaries.py +0 -0
  289. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  290. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/formatting.py +0 -0
  291. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/invocation_log.py +0 -0
  292. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/isolation/__init__.py +0 -0
  293. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/isolation/docker_runner.py +0 -0
  294. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/litellm_cost.py +0 -0
  295. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/logging_config.py +0 -0
  296. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/container_paths.py +0 -0
  297. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/enums.py +0 -0
  298. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/experiment.py +0 -0
  299. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/judge.py +0 -0
  300. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/judge_defaults.py +0 -0
  301. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/merge_strategy.py +0 -0
  302. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/mutations.py +0 -0
  303. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/routing.py +0 -0
  304. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/sandbox.py +0 -0
  305. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/telemetry.py +0 -0
  306. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/models/templates.py +0 -0
  307. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/__init__.py +0 -0
  308. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/batch.py +0 -0
  309. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/config.py +0 -0
  310. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/config_merge.py +0 -0
  311. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/early_stop.py +0 -0
  312. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/evaluation.py +0 -0
  313. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/orchestration/overrides.py +0 -0
  314. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/path_utils.py +0 -0
  315. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/plugins.py +0 -0
  316. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/pricing.py +0 -0
  317. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/py.typed +0 -0
  318. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/reports_experiment.py +0 -0
  319. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/reports_stats.py +0 -0
  320. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/resources/__init__.py +0 -0
  321. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  322. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/resources/tags.yaml +0 -0
  323. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/sandbox.py +0 -0
  324. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/__init__.py +0 -0
  325. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/ast_similarity.py +0 -0
  326. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/complexity.py +0 -0
  327. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/quality.py +0 -0
  328. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/signature_similarity.py +0 -0
  329. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/similarity.py +0 -0
  330. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/scoring/token_similarity.py +0 -0
  331. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/simulation/__init__.py +0 -0
  332. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/simulation/termination.py +0 -0
  333. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/__init__.py +0 -0
  334. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/callbacks.py +0 -0
  335. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/events.py +0 -0
  336. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/renderers.py +0 -0
  337. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/streaming/wire.py +0 -0
  338. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/telemetry.py +0 -0
  339. {coder_eval-0.9.6 → coder_eval-0.10.2}/src/coder_eval/utils.py +0 -0
  340. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/README.md +0 -0
  341. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agentless_smoke_test.yaml +0 -0
  342. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/antigravity_hello_world.yaml +0 -0
  343. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  344. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/claude_hello_world.yaml +0 -0
  345. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  346. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  347. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/claude_subagent_test.yaml +0 -0
  348. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  349. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_hello_world.yaml +0 -0
  350. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_parallel_commands.yaml +0 -0
  351. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  352. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_skills_test.yaml +0 -0
  353. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_string_utils.yaml +0 -0
  354. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/codex_subagent_test.yaml +0 -0
  355. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  356. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/agents/subagent_merge_sort.yaml +0 -0
  357. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/byod_smoke_test.yaml +0 -0
  358. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dataset_example.yaml +0 -0
  359. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/datasets/sentiment.jsonl +0 -0
  360. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  361. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  362. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  363. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  364. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  365. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  366. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/fibonacci_with_template.yaml +0 -0
  367. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/hello_date.yaml +0 -0
  368. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/inline_starter_example.yaml +0 -0
  369. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/internal/session_resumption.yaml +0 -0
  370. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_smoke.yaml +0 -0
  371. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  372. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  373. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  374. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  375. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  376. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  377. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  378. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  379. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  380. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  381. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  382. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/README.md +0 -0
  383. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  384. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  385. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  386. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  387. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  388. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  389. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  390. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  391. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  392. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  393. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/sentiment_classification.yaml +0 -0
  394. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_agent_judge.yaml +0 -0
  395. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_budget_exceeded.yaml +0 -0
  396. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  397. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_llm_judge.yaml +0 -0
  398. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_negative_path.yaml +0 -0
  399. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_task_timeout.yaml +0 -0
  400. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/smoke_variants.yaml +0 -0
  401. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/test_sandbox.yaml +0 -0
  402. {coder_eval-0.9.6 → coder_eval-0.10.2}/tasks/token_check.yaml +0 -0
  403. {coder_eval-0.9.6 → coder_eval-0.10.2}/templates/byod_smoke_test/Dockerfile +0 -0
  404. {coder_eval-0.9.6 → coder_eval-0.10.2}/templates/fibonacci-starter/README.md +0 -0
  405. {coder_eval-0.9.6 → coder_eval-0.10.2}/templates/fibonacci-starter/src/main.py +0 -0
  406. {coder_eval-0.9.6 → coder_eval-0.10.2}/templates/fibonacci-starter/tests/test_main.py +0 -0
  407. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/__init__.py +0 -0
  408. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/__init__.py +0 -0
  409. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/__init__.py +0 -0
  410. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  411. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  412. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  413. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  414. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  415. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  416. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  417. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  418. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  419. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  420. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  421. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  422. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  423. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  424. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  425. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  426. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  427. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  428. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  429. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  430. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  431. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  432. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  433. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  434. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  435. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  436. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  437. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  438. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/_path_helpers.py +0 -0
  439. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/conftest.py +0 -0
  440. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/__init__.py +0 -0
  441. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  442. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  443. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/mock_agent.py +0 -0
  444. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  445. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  446. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  447. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/fixtures/text_stub_agent.py +0 -0
  448. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/__init__.py +0 -0
  449. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/dead_config_fields.py +0 -0
  450. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/doc_env_parity.py +0 -0
  451. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/doc_schema_parity.py +0 -0
  452. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/__init__.py +0 -0
  453. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/base.py +0 -0
  454. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  455. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  456. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  457. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  458. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  459. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  460. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  461. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  462. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  463. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  464. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  465. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  466. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_agent_timing_access.py +0 -0
  467. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  468. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  469. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_silent_except.py +0 -0
  470. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  471. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  472. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  473. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  474. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/open_explicit_encoding.py +0 -0
  475. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  476. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/register_criterion_required.py +0 -0
  477. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  478. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  479. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/runner.py +0 -0
  480. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/lint/violation.py +0 -0
  481. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_config_no_timing_fields.py +0 -0
  482. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_config_optional_type.py +0 -0
  483. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_config_registry_dispatch.py +0 -0
  484. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_config_sdk_decoupling.py +0 -0
  485. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_golden_master.py +0 -0
  486. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_telemetry.py +0 -0
  487. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_telemetry_advanced.py +0 -0
  488. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agent_timeout.py +0 -0
  489. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_agentless.py +0 -0
  490. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_aggregate.py +0 -0
  491. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_byoa_plugin.py +0 -0
  492. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_byoa_plugin_live.py +0 -0
  493. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_byod_feature.py +0 -0
  494. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_check_all_async.py +0 -0
  495. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_checker_logging.py +0 -0
  496. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_classification_match.py +0 -0
  497. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_claude_settings_enforcement_live.py +0 -0
  498. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cleanup_preservation_guard.py +0 -0
  499. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_backend_flag.py +0 -0
  500. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_empty_glob.py +0 -0
  501. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_sdk_options.py +0 -0
  502. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_set_overrides.py +0 -0
  503. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_telemetry.py +0 -0
  504. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_cli_type_flag.py +0 -0
  505. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_code_review_bugs.py +0 -0
  506. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_codex_agent_live.py +0 -0
  507. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_codex_agent_unit.py +0 -0
  508. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_command_executed.py +0 -0
  509. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_command_statistics.py +0 -0
  510. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_command_telemetry_result_data.py +0 -0
  511. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_commands_efficiency.py +0 -0
  512. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_config_lineage.py +0 -0
  513. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_config_merge_engine.py +0 -0
  514. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_config_precedence.py +0 -0
  515. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_continuous_scoring.py +0 -0
  516. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_dataset_expansion.py +0 -0
  517. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_debug_logging.py +0 -0
  518. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_build_failure.py +0 -0
  519. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_litellm_env.py +0 -0
  520. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_runner_container_death.py +0 -0
  521. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_runner_mounts.py +0 -0
  522. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_runner_stream_limit.py +0 -0
  523. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_wildcard_env.py +0 -0
  524. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_docker_workdir_live.py +0 -0
  525. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_driver_resolver.py +0 -0
  526. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_error_handling.py +0 -0
  527. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_evaluate_command.py +0 -0
  528. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_evaluator.py +0 -0
  529. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_event_collector.py +0 -0
  530. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_cli.py +0 -0
  531. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_loader.py +0 -0
  532. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_models.py +0 -0
  533. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_reports.py +0 -0
  534. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_resolver.py +0 -0
  535. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_experiment_runner.py +0 -0
  536. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_file_check.py +0 -0
  537. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_file_contains_scoring.py +0 -0
  538. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_formatting.py +0 -0
  539. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_git_clone_failure.py +0 -0
  540. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_glob_paths_in_file_criteria.py +0 -0
  541. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_heartbeat_watchdog.py +0 -0
  542. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_ignore_patterns_negation.py +0 -0
  543. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_image_from_dockerfiles.py +0 -0
  544. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_integration.py +0 -0
  545. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_json_check.py +0 -0
  546. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_anthropic.py +0 -0
  547. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_bedrock.py +0 -0
  548. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_burn_in_live.py +0 -0
  549. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_context_builder.py +0 -0
  550. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_judge_models.py +0 -0
  551. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_lint_no_top_level_run_limits.py +0 -0
  552. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_lint_runner.py +0 -0
  553. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_litellm_config.py +0 -0
  554. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_litellm_cost.py +0 -0
  555. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_litellm_cost_logger.py +0 -0
  556. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_litellm_route.py +0 -0
  557. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_llm_judge_criterion.py +0 -0
  558. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_log_tail_buffer.py +0 -0
  559. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_logging.py +0 -0
  560. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_logging_isolation.py +0 -0
  561. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_merge_characterization.py +0 -0
  562. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_merge_strategy_annotations.py +0 -0
  563. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_merge_unification.py +0 -0
  564. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_mutations.py +0 -0
  565. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_new_criteria.py +0 -0
  566. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_node_env_config.py +0 -0
  567. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_optional_dependencies.py +0 -0
  568. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_orchestrator_error_log_tail.py +0 -0
  569. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_orchestrator_telemetry.py +0 -0
  570. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_overrides_engine.py +0 -0
  571. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_parallel.py +0 -0
  572. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_path_utils.py +0 -0
  573. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_plugin_processing.py +0 -0
  574. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_plugins.py +0 -0
  575. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_post_run.py +0 -0
  576. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_pr_review_workflow.py +0 -0
  577. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_pre_run.py +0 -0
  578. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_preservation_mode.py +0 -0
  579. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_pricing_registry.py +0 -0
  580. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reference_comparison_scoring.py +0 -0
  581. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reference_evaluator.py +0 -0
  582. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reference_missing_file.py +0 -0
  583. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reference_models.py +0 -0
  584. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reference_orchestrator.py +0 -0
  585. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_registry.py +0 -0
  586. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_release_notes.py +0 -0
  587. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_replicate_stats.py +0 -0
  588. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_report_command.py +0 -0
  589. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports_experiment.py +0 -0
  590. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports_stats.py +0 -0
  591. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_reports_stats_nonfinite.py +0 -0
  592. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_resume.py +0 -0
  593. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_retry_logic_comprehensive.py +0 -0
  594. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_route_seam_exhaustiveness.py +0 -0
  595. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_routing.py +0 -0
  596. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_command_junit.py +0 -0
  597. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_command_stdout.py +0 -0
  598. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_limits_resolver.py +0 -0
  599. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_run_metrics.py +0 -0
  600. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_runtime_tool_versions.py +0 -0
  601. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox.py +0 -0
  602. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_layer_builder.py +0 -0
  603. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_optional.py +0 -0
  604. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_record_cli.py +0 -0
  605. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_security.py +0 -0
  606. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_symlink_preservation.py +0 -0
  607. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sandbox_templates.py +0 -0
  608. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_scorers.py +0 -0
  609. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_scoring_quality.py +0 -0
  610. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_sdk_option_classification.py +0 -0
  611. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_simulation_config.py +0 -0
  612. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_simulation_integration.py +0 -0
  613. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_simulation_termination.py +0 -0
  614. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_simulation_trials.py +0 -0
  615. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_skill_triggered.py +0 -0
  616. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_agent_integration.py +0 -0
  617. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_batch.py +0 -0
  618. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_callbacks.py +0 -0
  619. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_cli.py +0 -0
  620. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_events.py +0 -0
  621. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_orchestrator.py +0 -0
  622. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_renderers.py +0 -0
  623. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_streaming_wire.py +0 -0
  624. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_success_criterion_union.py +0 -0
  625. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_suite_rollup.py +0 -0
  626. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_summaries.py +0 -0
  627. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_tags.py +0 -0
  628. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_task_definition_unknown_fields.py +0 -0
  629. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_teardown_interrupt.py +0 -0
  630. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_telemetry.py +0 -0
  631. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_template_env_expansion.py +0 -0
  632. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_threshold_enforcement.py +0 -0
  633. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_timeout_batch.py +0 -0
  634. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_timeout_categorization.py +0 -0
  635. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_timeout_exceptions.py +0 -0
  636. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_timeout_models.py +0 -0
  637. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_token_usage.py +0 -0
  638. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_uipath_eval.py +0 -0
  639. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_utils.py +0 -0
  640. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_utterance_extraction.py +0 -0
  641. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_variant_prompt_file.py +0 -0
  642. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_verdict_tool.py +0 -0
  643. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_watchdog.py +0 -0
  644. {coder_eval-0.9.6 → coder_eval-0.10.2}/tests/test_yaml_migration.py +0 -0
@@ -5,7 +5,7 @@ description: Generate per-task review.json (summary + tags) for a completed run
5
5
 
6
6
  ## Context
7
7
 
8
- If `$ARGUMENTS` is empty or blank, default to `runs/latest` and inform the user: "No path provided reviewing the latest run at `runs/latest`."
8
+ If `$ARGUMENTS` is empty or blank, resolve the run to review per the "No target given" rule in `.claude/shared/run-layout.md` — discover the run root, then take `latest` if that symlink resolves and the newest run directory by name if it does not. Tell the user which run you picked and how you got there before reading anything.
9
9
 
10
10
  You are producing post-run reviews for a coder_eval evaluation run. The target path is: `$ARGUMENTS`
11
11
 
@@ -0,0 +1,457 @@
1
+ # Harness Candidates
2
+
3
+ Deferred lint/test guardrails surfaced during reviews. Promote to a `CExxx` rule
4
+ (or a test) when picked up.
5
+
6
+ ## From code review 260701-1954 (fix-review-top5 run) — deferred to a dedicated guardrail plan
7
+
8
+ > Numbering note: these are *proposed* ids. `CE024` (discriminated-unions) and
9
+ > `CE025` (live-verdict consistency) have since been **implemented** for other
10
+ > rules, so the candidates below were renumbered to the next free ids. Always
11
+ > claim the next unused number in `tests/lint/rules/` — the id-uniqueness assert
12
+ > in `tests/lint/runner.py` is the source of truth.
13
+
14
+ - **CE026** — workflow-YAML rule: forbid any `uses:` step pinned to a floating ref
15
+ (`@v3`, `@main`) rather than a 40-hex commit SHA. Would have caught
16
+ `mxschmitt/action-tmate@v3` (fixed manually in this run). >30 min: needs a
17
+ non-Python file-walk branch in `tests/lint/runner.py`.
18
+ - **CE027** — retired-token grep gate: fail when a removed-subsystem token
19
+ (`LLMGW_`, `API_BACKEND=proxy`, `uipath_llmgw_client`) reappears outside an
20
+ allowlist across docs/config/src. Would have caught the LLM-Gateway residue
21
+ swept in this run. >30 min: needs an allowlist + repo-wide text scan.
22
+ - **CE028** — assert the Makefile `lint:` help does not hardcode a stale `CE0NN`
23
+ upper bound (use `CE001+`). Would have caught the `CE001–CE005` drift fixed here.
24
+ - **docs-vs-harness smoke test** — execute the CI tutorial's `coder-eval run`
25
+ command against a NoOp task and assert the produced tree matches the documented
26
+ globs. Would have caught the `--run-dir runs` layout bug. Not statically
27
+ reachable (needs a live run).
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
+
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
+
46
+ ## From 2026-07-24 publish-github-releases review
47
+
48
+ - [ ] **sdist-contents assertion** — build the sdist and assert it contains only
49
+ intended paths. `pyproject.toml` declares no `[tool.hatch.build.targets.sdist]`
50
+ section, so hatchling's default selection honors only the **root** `.gitignore`
51
+ and sweeps in everything else sitting in the tree at build time. Two distinct
52
+ consequences, worth keeping apart:
53
+ - **What actually reaches PyPI today: nothing unintended.** A local `uv build`
54
+ in a developed worktree produces a 135 MB sdist carrying
55
+ `evalboard/node_modules/**` (8520 files) and `evalboard/.next/**` (190),
56
+ because `evalboard/.gitignore` is nested and therefore not honored. CI is
57
+ spared only incidentally — `release.yml` never runs `npm`/`pnpm install`, so
58
+ those paths do not exist on the runner at `uv build` time. Verified against
59
+ the published artifacts: the 0.8.9 and 0.8.2 sdists on PyPI are ~7.5 MB /
60
+ ~550 files with **zero** `node_modules` entries. (A dirty-tree release would
61
+ not silently ship JS either — 135 MB exceeds PyPI's 100 MB per-file limit, so
62
+ it fails at upload. The real exposure is a broken release, not a stealth one.)
63
+ - **The live hazard is untracked files a workflow leaves in the tree**, which
64
+ hatchling *does* package: a `release-notes.md` written at the repo root by a
65
+ CI step landed in `coder_eval-X.Y.Z/release-notes.md` (verified by building
66
+ it). This is why the "Publish GitHub Release" step writes to
67
+ `${RUNNER_TEMP}` — a convention no check enforces.
68
+
69
+ Not cheap: needs a real `uv build` inside the test suite (slow) plus a decision
70
+ on whether to add an explicit sdist include/exclude allowlist, which changes
71
+ published artifacts. Worth pairing with the allowlist so the contract is
72
+ declared rather than inferred from hatchling's defaults — caught in the
73
+ 2026-07-24 ci/publish-github-releases review.
74
+ - [ ] **CE032 — run the existing AST lint rules over Python embedded in
75
+ `.github/workflows/*.yml`.** CE008/CE009/CE010 already forbid unencoded
76
+ `read_text`/`open`/`subprocess.run`, but `tests/lint/runner.py::check_paths`
77
+ walks only `*.py` under `src/`, so Python inside a `run:` heredoc is invisible
78
+ to ruff, pyright, pytest, coverage *and* the CE runner. Would have caught the
79
+ four unencoded `read_text`/`write_text` calls fixed by hand in this review
80
+ (`release.yml` ×2, `publish-testpypi.yml` ×2). Needs a heredoc extractor
81
+ (`python3 - <<'PY' … PY` → dedent → `ast.parse`) with line-number mapping back
82
+ to the YAML; wire as a `tests/test_custom_lint.py` class like CE027–CE031
83
+ rather than a `BaseRule`. Also consider extending CE008 to `write_text` (it
84
+ matches only `read_text` today, though `src/` happens to be clean).
85
+ - [ ] **CE033 — interpreter heredocs in `.github/workflows/**` must use a quoted
86
+ delimiter** (`<<'PY'`, not `<<PY`). With a bare tag the shell expands `$VAR`
87
+ into the *program text* before the interpreter parses it, so a value containing
88
+ a quote or newline breaks out of the string literal it lands in. Fixed by hand
89
+ in `publish-testpypi.yml` in this review (it interpolated `${DEV_VERSION}` into
90
+ Python source); regex-detectable in ~10 lines, and CE032's `ast.parse` is only
91
+ sound on quoted bodies, so the two ship together.
92
+ - [ ] **`actionlint` + `zizmor` over `.github/workflows/**`.** No static analysis
93
+ whatsoever runs over workflow YAML today (`make verify` never looks at it), so
94
+ every workflow finding in the 2026-07-24 review was caught by a human reading
95
+ it. `actionlint` runs shellcheck over `run:` bodies; `zizmor`'s
96
+ `excessive-permissions` / `artipacked` / `template-injection` rules cover the
97
+ credential-scoping and `${{ }}`-into-`run:` classes reviewed by hand. Subsumes
98
+ the CE026 SHA-pinning candidate above. Start as a non-blocking annotation job.
99
+
100
+ ## From 2026-07-03 open-source docs cleanup
101
+
102
+ - [ ] **Dead-relative-link checker for `docs/**/*.md`** — resolve every relative
103
+ `](target.md)` link against the tree and fail on a missing target. During the
104
+ docs/features purge, the literal `git grep "docs/features"` gate missed 3
105
+ dangling links written in relative form (`](features/...)` in
106
+ TASK_DEFINITION_GUIDE.md ×2 and DOCKER_ISOLATION.md ×1); only a reviewer sweep
107
+ caught them. The cleanup plan explicitly deferred this as YAGNI for the
108
+ one-time purge, but any future doc rename/deletion re-opens the same blind
109
+ spot — caught in the 2026-07-03 open-source-docs-cleanup implementation run.
110
+
111
+ ## From PR #77 (command-executed shell-normalize) — CE030-to-criteria deferred
112
+
113
+ - [ ] **Extend CE030 doc/schema-parity to the `SuccessCriterion` union** so a new
114
+ criterion (or field) can't ship undocumented. Attempted in PR #77 and reverted:
115
+ CI installs `--extra uipath`, and in that environment `coder_eval.models.criteria`
116
+ gains a `CliCalledCriterion` (fields `log`/`positional`) that is NOT present in a
117
+ plain checkout (it did not reproduce on macOS, whose lockfile resolution omits the
118
+ contributing linux-only component). It defeated every discriminator tried — union
119
+ membership, a `__module__` string filter (it is spoofed to `coder_eval.models.criteria`),
120
+ a genuine-module-attribute scan (it is `setattr` onto the module), and even an AST
121
+ parse of the `SuccessCriterion` union literal in `criteria.py` source (CI's imported
122
+ criteria module resolves to a file whose union literal already contains it). No
123
+ runtime OR source signal available in the lint could separate the injected criterion
124
+ from an in-tree one. Revisit only with a way to identify the in-tree criterion set that
125
+ is provably immune to the uipath integration — e.g. a hardcoded name allowlist of the
126
+ in-tree criteria (losing auto-coverage of new ones), or first understanding exactly how
127
+ that environment injects the criterion. Until then CE030 stays scoped to the four
128
+ top-level models; the `command_pattern`/`exclude_pattern` contract this PR changed is
129
+ documented in the Field descriptions and TASK_DEFINITION_GUIDE regardless.
130
+
131
+ ## From the evalboard Path-to-GA de-tag / mature-passes fix (4e5bbc4…dd5f7e9) — TS-side guards deferred
132
+
133
+ Context: the CExxx harness is a **Python** AST runner over `src/coder_eval/`, so none
134
+ of the invariants below are mechanizable in it. Each would need a TypeScript lint
135
+ harness (eslint config + custom rules) that `evalboard/` does not have today —
136
+ standing one up for three call sites fails the KISS/YAGNI gate. Deferring rather
137
+ than dropping; promote if a fourth TS-side invariant appears, and stand up the
138
+ harness once for all of them.
139
+
140
+ > **Update (PR #94 review round 2).** The *execution* half of this gap is closed:
141
+ > `evalboard/` is now gated by the `evalboard` job in `.github/workflows/pr-checks.yml`
142
+ > and reachable locally via `make evalboard-verify`, so the vitest suite (including
143
+ > the pricing drift guard) is enforcement rather than documentation. What remains
144
+ > deferred below is the *static-analysis* half — eslint has still not been stood up.
145
+ > The review that prompted this round names four more candidate TS rules (raw
146
+ > `status === "SUCCESS"` outside `lib/status.ts`; DOM-global shadowing in props;
147
+ > inline copies of the tag predicate; per-run tooltip copy reused on aggregate
148
+ > surfaces), which meets the "fourth invariant" promotion bar stated above —
149
+ > **stand up eslint next time `evalboard/` is touched substantively.**
150
+
151
+ - [ ] **"Every consumer of `RunOverviewTask.matureSkipped` must decide explicitly
152
+ whether a carry-forward row counts."** Four consumers now, and they deliberately
153
+ DISAGREE: `lib/trends.ts` and `app/runs/[id]/run-view.tsx` count a mature skip as
154
+ a pass; `lib/overview.ts::buildTagTaskRows` excludes it from both terms
155
+ (`/path-to-ga` is a GA-readiness page). A new consumer silently inheriting either
156
+ convention is a real hazard. Guard shape: flag a file that reads `.matureSkipped`
157
+ without a nearby comment naming its convention — weak, hence the deferral. Closed
158
+ for now by unit tests that assert the exclusion from BOTH numerator and denominator
159
+ (`lib/__tests__/overview.test.ts` → `describe("buildTagTaskRows")`).
160
+
161
+ - [x] ~~**`taskCarriesRepoTag` is the single repo-provenance tag predicate — but one
162
+ duplicate survives.**~~ **RESOLVED in PR #94 review round 2.** The predicate moved to
163
+ a dependency-free `lib/tags.ts` (structurally typed on `{skill, tags}` so
164
+ `RunOverviewTask`, `TaskResultSummary` and `TaskTrend` all satisfy it), re-exported
165
+ from `lib/overview.ts` for existing callers. Both inline copies now import it:
166
+ `app/runs/[id]/run-view.tsx` (the `"use client"` one that could not before) and
167
+ `lib/trends.ts::trendMatchesTag` (a third copy the original deferral missed).
168
+ Still worth a lint rule ("no inline `tags.includes(x) || skill === x`") to catch
169
+ future copies — folded into the eslint promotion noted above.
170
+
171
+ - [ ] **The de-tag rule fails CLOSED on a newest run that loads fine but stamps no
172
+ `tags`** (`lib/overview.ts::buildTagTaskRows`): every tagged task would read as
173
+ de-tagged and the table would empty, rendering an empty state indistinguishable from
174
+ a genuine full de-tagging. Its sibling failure mode (`overview == null`, a transient
175
+ blob read failure) IS guarded, with exactly this rationale. Currently unreachable —
176
+ 0 of ~116k date-shaped non-ad-hoc task rows in `runs-remote/` lack `tags`, and the
177
+ six zero-tag runs found are all ad-hoc (filtered upstream by id shape + `meta.adhoc`)
178
+ — so the barrier is two upstream filters rather than a check at the seam. Left
179
+ unguarded on purpose: a `if (taggedInRun.size === 0) skip the de-tag signal` guard
180
+ would also mask a real, total de-tagging. Revisit if the pipeline ever stops
181
+ stamping tags, or if a non-ad-hoc run legitimately carries zero tagged rows.
182
+
183
+ - [ ] **Discriminating-test discipline for predicate narrowings.** Two tests in this
184
+ change passed for the wrong reason — a downstream rule (the de-tag drop) masked the
185
+ mutation they claimed to catch — and the plan leaned on a `grep` acceptance criterion
186
+ that CI never runs. Both were found by mutation-testing the suite and fixed. No
187
+ mechanizable guard; the durable lesson is: when a test names a narrowing, construct
188
+ the fixture so the row SURVIVES every other rule, or the assertion proves nothing.
189
+
190
+ - [ ] **CE038 — runner-label registry + dogfood runner parity** over
191
+ `.github/workflows/*.yml`. Two clauses: (a) every label a job can land on must appear
192
+ in `.github/actionlint.yaml`'s `self-hosted-runner.labels` or a stock GitHub-hosted
193
+ allowlist — including *both* branches of an expression-valued `runs-on:`, which
194
+ actionlint treats as opaque; (b) `action-dogfood`'s label must equal the one the
195
+ consumer snippet in `docs/tutorials/02-ci-pipeline.md` advertises. Nothing guards
196
+ either today: actionlint is not wired into `make verify` or pre-commit (grep: the
197
+ config file is its only mention), and CE026 parses that job's prerequisite *steps*
198
+ but never its `runs-on:`. Why it matters: an undeclared label is not a runtime error,
199
+ the job queues until GitHub cancels it hours later — indistinguishable from a pool
200
+ outage; and a repo-wide `runs-on:` migration has twice swept up `action-dogfood`
201
+ (#306, then 027121e in this PR), which exists precisely to prove the published Action
202
+ works on the image external integrators use. Implemented and verified once (both
203
+ clauses caught their regression class on the real tree) but reverted as out of
204
+ proportion to a 16-line runner migration — ~240 lines including tests. Note when
205
+ writing it: discriminate labels from expression operands structurally, on the
206
+ preceding `&&`/`||`, NOT on the string's shape — a "contains 'ubuntu'" heuristic
207
+ silently fails on `uipath-ubunut-latest`, the exact transposition typo the rule is
208
+ for. Caught in the multi-model review of PR #86.
209
+
210
+ ## From the 2026-08-04 Claude Code plugin marketplace run
211
+
212
+ - [ ] **Plugin skills must not name a file that exists only in THIS repo** — the
213
+ `test_bundled_files_reference_no_repo_paths` denylist (`docs/`, `src/`,
214
+ `.claude/shared/`, `.claude/commands/`, `uv run`, `../`) deliberately allows
215
+ `tasks/` and `.claude/skills/`, because those are user-workspace paths the
216
+ skills legitimately scan and scaffold. So a skill body naming a specific repo
217
+ file (e.g. `tasks/hello_date.yaml`) would slip past the guard even though an
218
+ installed plugin is copied to `~/.claude/plugins/cache/` without it. The
219
+ obvious rule — "extract path-shaped tokens, fail if the path exists at the repo
220
+ root" — is NOT cheap: `init` legitimately tells users to scan `pyproject.toml`
221
+ and `package.json`, and `pyproject.toml` exists here, so the heuristic
222
+ false-positives on correct prose. Needs a token classifier that distinguishes
223
+ "a file to look for in the user's repo" from "a file in ours", which is a
224
+ design problem, not a 30-minute one. No skill violates it today (grepped) —
225
+ caught in the 2026-08-04 claude-code-plugin-marketplace implementation run.
226
+ *Update (2026-08-04, plugin-audit-p0-p1 run): the guard was renamed and widened
227
+ from `skills/*/SKILL.md` to every shipped text file under `plugins/coder-eval/`
228
+ (`PLUGIN_TEXT_FILES`), which closed the coverage half of this gap — a bundled
229
+ reference now cannot name a repo path either. The token-classifier problem
230
+ described above is unchanged and still deferred.*
231
+
232
+ ## From 2026-08-04 plugin-audit-p0-p1 run
233
+
234
+ - [ ] **A skill's advertised `description` must not promise a check that no bundled
235
+ reference declares.** `lint-tasks` ships a user-facing description claiming it
236
+ finds "prompts that give away the answer", but that check was declared only in
237
+ `skills/task/SKILL.md` prose — a file `lint-tasks` never reads — so the two
238
+ rubric readers had already forked on it before the skill shipped. Caught by a
239
+ reviewer, not by a test; fixed by promoting it to rubric check 7. A guard would
240
+ have to map claim-phrases in a description onto declarations in
241
+ `reference/task-rubric.md`, which is natural-language matching, not a token
242
+ grep — the phrasings are deliberately different (a description sells, a rubric
243
+ check instructs), so any cheap version either misses the real case or fails on
244
+ correct prose. Needs a fixed vocabulary of claim tags shared between the two
245
+ files to become mechanical, which is a design change rather than a 30-minute
246
+ rule — caught in the 2026-08-04 plugin-audit-p0-p1 implementation run.
247
+
248
+ ## From the PR #82 review follow-up (2026-08-10)
249
+
250
+ - [ ] **CE039 — documented `coder-eval` invocations must be executable as written.**
251
+ `init/SKILL.md` told the agent to run `coder-eval plan <task-directory>` and
252
+ "iterate until it exits 0", which the CLI rejects outright (`plan` takes files;
253
+ a directory argument exits 1 with a hint) — an unreachable loop condition
254
+ shipped in a skill. A rule would scan inline-code spans and fenced `bash` blocks
255
+ across `README.md`, `docs/**/*.md` and `plugins/**/*.md`, assert the subcommand
256
+ exists in the Typer app, and — the harder half — that the *argument shape* is
257
+ one the command accepts. The subcommand check is cheap and would not have caught
258
+ this; the argument-shape check is what matters and needs either a real
259
+ invocation (see the live-smoke candidate below) or a per-command arity model
260
+ that duplicates the CLI signature. Deferred on that split — caught in the PR #82
261
+ review, fixed by hand in `init/SKILL.md`.
262
+
263
+ - [ ] **Documented-CLI live smoke.** The behavioural counterpart to CE039: in a
264
+ `-m live`/`-m slow` test, materialize a fixture repo with one task YAML and
265
+ execute every fenced `coder-eval …` command extracted from the shipped skills
266
+ and docs, asserting exit 0 (or an explicitly-expected non-zero). This is the
267
+ only form that proves argument shape rather than command existence. Not
268
+ statically reachable, hence separate from CE039 — proposed in the PR #82 review.
269
+
270
+ ## From the 2026-08-11 plugin generic-adopter run
271
+
272
+ - [ ] **`working-directory` input on `action.yml`.** A repository whose eval tree is
273
+ nested (`tests/tasks/…`) has no way to tell the composite action to run from that
274
+ subdirectory, so every path in every input has to be spelled from the repo root. The
275
+ fix is a new input, and that is why it is deferred rather than cheap: `action.yml`'s
276
+ inputs are a **published API** — CE026 clause 4 asserts every `with:` key across four
277
+ onboarding surfaces is a real input, so adding one means updating those surfaces (the
278
+ `ci` skill among them, whose output lands in other people's repositories), and it
279
+ carries action tag/release implications. Out of scope for the plan that surfaced it,
280
+ which worked around it in the `ci` skill's prose instead.
281
+
282
+ - [ ] **`shopt -s globstar` (or quoting `$CE_TASKS`) in `action.yml`'s run step.** The
283
+ real fix for a degradation the `ci` skill currently works around in prose:
284
+ `args+=($CE_TASKS)` is deliberately unquoted so a caller can pass several patterns, but
285
+ with `globstar` off `a/**/*.yaml` expands to `a/*/*.yaml` and **silently drops every
286
+ top-level task** — reproduced with `a/top.yaml` + `a/sub/deep.yaml`, which yields
287
+ `deep.yaml` alone. `nullglob` is off too, so an unmatched pattern reaches the CLI
288
+ literally and exits 1 (`Error: Task file not found: …`). One line in the action fixes
289
+ the first half; the second half is arguably correct-as-is (failing loudly beats
290
+ silently running nothing). Deferred alongside `working-directory` because both change
291
+ the action's observable contract and belong in one considered change.
292
+
293
+ ## From the final review of the 2026-08-11 plugin generic-adopter run
294
+
295
+ Two **pre-existing `action.yml` defects** surfaced by an external reviewer during that
296
+ run's final review. Neither is caused by the change, and `action.yml` was explicitly out
297
+ of that plan's scope, so both are recorded here rather than fixed in passing. They belong
298
+ with the two `action.yml` items above — one considered change to the action's contract.
299
+
300
+ - [ ] **The score gate silently drops a malformed `weighted_score`.** `action.yml`'s
301
+ minimum-task-score step filters `task_results` rows down to usable floats; a row whose
302
+ score is a string, a bool, `NaN`/`inf`, or out of `[0, 1]` is omitted from the
303
+ comparison rather than failing it. So a `run.json` carrying one corrupt row **and** one
304
+ valid row above the floor gates **green**, which contradicts the fail-closed intent
305
+ stated in that step's own comment. The fix is to error on a present-but-invalid score
306
+ while still skipping `None` (errored tasks are already covered by coder-eval's exit
307
+ code). Wants a test over a synthetic `run.json` per bad-value class, which is why it is
308
+ not a five-minute change.
309
+
310
+ - [ ] **`tasks:` is declared optional but omitting it cannot work.** The input defaults to
311
+ empty and the run step then appends no path arguments, so `coder-eval run` is invoked
312
+ bare — and zero-argument discovery resolves against the *installed package's* location,
313
+ finds nothing, and exits 1. The input is therefore effectively required, and the action
314
+ advertises otherwise. Either mark it `required: true` (a published-input contract change,
315
+ see the `working-directory` item) or fail with a clear message instead of an obscure
316
+ discovery error.
317
+
318
+ ## From the coder-eval-code-review of fix/antigravity-wait-for-wakeup (2026-08-12)
319
+
320
+ - [ ] **A retry/poll loop's continuation state must derive from a stable per-entity
321
+ key, never a mutable monotonic counter used as an id fallback.** `_AntigravityTurnState._handle_tool_call`
322
+ minted a synthetic tool-call id from `f"{raw_name}_{self._next_seq}"` when the SDK's
323
+ `call.id` was falsy; since `_next_seq` advances between a tool call's ACTIVE and DONE
324
+ emissions, the DONE step computed a *different* fallback id than the ACTIVE step,
325
+ stranding the ACTIVE entry as a permanent orphan and stalling `communicate()`'s new
326
+ poll loop for its full `_MAX_BACKGROUND_POLLS` budget on every id-less turn. Fixed by
327
+ deriving the fallback from `(step.step_index, call_index)` instead (stable across a
328
+ step's own re-emissions, per this class's own docstring) -- then, in the same PR,
329
+ further folded in `step.trajectory_id` (falling back to bare `step_index` when it's
330
+ empty, mirroring the SDK's own `trajectory_id:step_index` id scheme), since a
331
+ sub-agent trajectory can reuse the same low `step_index` values as the main one and
332
+ two id-less calls across trajectories would otherwise collide. Not promoted to a CExxx rule:
333
+ this is the only id-fallback-driving-control-flow site in the codebase today (a
334
+ single call site, not a recurring class per the existing "single call-site fix, no
335
+ recurring pattern to guard" convention) — a mechanical AST rule for "no mutable
336
+ counter in a dict-key fallback" would need real design work to avoid false-positiving
337
+ on ordinary sequence-numbering counters elsewhere in the file. Caught by two
338
+ independent reviewers (Opus fallback pair) in this run's final code review.
339
+
340
+ - [ ] **A `while` loop built around a cooperative-cancellation watchdog should read the
341
+ watchdog's own "already decided to fire" flag in its condition, not rely solely on a
342
+ later exception handler to notice.** The antigravity poll loop's condition checked
343
+ `not state.stopped_early_hit and state.has_orphaned_tool_call() and poll_count < cap`
344
+ but not `state.timeout_hit`, so if `ThreadedWatchdog`'s background thread set the flag
345
+ before its `task.cancel()` actually landed on this coroutine, the loop kept
346
+ sleeping/re-draining for up to the full poll budget before the pre-existing
347
+ post-loop `if state.timeout_hit:` check ever got a chance to run. Fixed by adding
348
+ `and not state.timeout_hit` to the condition, plus a mid-body early exit right after
349
+ the sleep (`if state.timeout_hit: break`) so a flag landing DURING the sleep skips
350
+ the following re-drain too, instead of waiting for the loop's next head check. Not
351
+ promoted: `ThreadedWatchdog` + a bespoke poll loop reading its own state flag is a
352
+ one-off shape unique to this agent; no second instance exists to generalize a rule
353
+ from. Caught in the same
354
+ final review as above.
355
+
356
+ - [ ] **A regression test's fake dependency must model every layer the fix under test
357
+ actually touches, not just the outermost one.** `_drain()`'s cooperative-stop path
358
+ wraps a real SDK call (`Conversation.receive_steps()`) that is itself a delegating
359
+ async generator over an inner, connection-layer generator holding the real
360
+ re-entrancy guard. The first regression test written for this fix used a
361
+ single-layer fake (the guard lived on the SAME generator `_drain()` iterated), which
362
+ passed against an incomplete fix (`contextlib.aclosing` on the outer generator only)
363
+ that does not work against the real two-layer SDK shape — confirmed live that the
364
+ inner generator's cleanup is deferred to a LATER event-loop turn, not synchronous
365
+ with the outer's `aclose()`. Caught by a reviewer re-deriving the real dependency's
366
+ shape from its installed source, not by the test itself. Not promoted: detecting "a
367
+ test double is missing a delegation layer the source has" is a semantic match
368
+ against third-party source, not an AST pattern in our own code — no cheap mechanical
369
+ check exists. Caught in the round-3 coder-eval-code-review of this same branch.
370
+
371
+ - [ ] **An agent's internal sleep-and-retry loop must derive its own exit bound from
372
+ the turn's actual `timeout`, never a fixed cycle count picked independently.** The
373
+ poll loop's own graceful exit path (force-close a never-resolving orphan as
374
+ unresolved, finalize and grade normally) was bounded by `_MAX_BACKGROUND_POLLS * _BACKGROUND_POLL_INTERVAL_SECONDS`
375
+ (120 × 5s = 600s) — DOUBLE `experiments/default.yaml`'s own default `turn_timeout: 300`.
376
+ Since the pre-existing `ThreadedWatchdog` enforces `timeout` by cancelling the whole
377
+ turn, it always won that race under default settings, making the graceful path dead
378
+ code: a tool call spuriously left ACTIVE with no real background job behind it (a
379
+ real, observed case — see the final validation run) went from "finalizes immediately,
380
+ graded on whatever the agent wrote" pre-fix to "burns the full 300s, then crashes as
381
+ `TurnTimeoutError` with zero criteria graded" post-fix — a strict regression for that
382
+ input class. Fixed by deriving a `poll_deadline` from a fraction (0.8x) of the actual
383
+ `timeout` passed to `communicate()`, falling back to the cycle cap only when
384
+ `timeout is None`. Caught independently by two reviewers (`bai-uipath`, `uipreliga`)
385
+ on the PR, both citing the exact same arithmetic mismatch. **Not promoted in this
386
+ pass**, but a stronger candidate than most entries here: `uipreliga` proposed a
387
+ generic whole-tree rule (proposed as CE035, renumbered CE042 here — CE035 shipped as
388
+ the workflow-outputs resolver on the published-action branch) — for every sleep-loop under
389
+ `src/coder_eval/agents/**`, assert its own cycle-count × interval either references a
390
+ timeout-derived name or is provably below `experiments/default.yaml`'s baseline — that
391
+ would catch this class of bug in ANY agent, not just this one (confirmed zero
392
+ violations on `main` before this bug, one on this PR). Worth a real look next time
393
+ `agents/` is touched, since a second agent adding its own disconnected sleep-loop
394
+ constant would reintroduce the exact same shape.
395
+
396
+ ## From 2026-08-04 published-action verification review
397
+
398
+ - [ ] **CE041 — `VAR=$(… | grep …)` under `set -e` followed by an emptiness check
399
+ is a dead diagnostic.** With `set -euo pipefail`, a pipeline whose `grep` matches
400
+ nothing exits 1, so the assignment aborts the step *before* the
401
+ `if [ -z "$VAR" ]; then echo "::error::…"` branch that was written to report it —
402
+ the operator gets a bare exit 1 with no message. Also applies to `head -1`
403
+ closing the pipe early (SIGPIPE 141). Fix is `|| true` on the substitution,
404
+ letting the emptiness check own every failure mode. Detectable by matching
405
+ `\w+=\$\(.*\|\s*(grep|head)\b` inside a `run:` body whose script sets `-e`, then
406
+ requiring `|| true`/`|| :` on the same logical line. Caught by a reviewer in
407
+ `verify-published-action.yml`; **`actionlint` + shellcheck do NOT flag it**
408
+ (verified against the exact snippet), so the actionlint candidate above does not
409
+ subsume this one.
410
+ - [ ] **CE036 — ban the skipped-green job gate.** Fail a job-level `if:` in
411
+ `.github/workflows/**` whose only discriminator is an emptiness/equality test on
412
+ `needs.<job>.outputs.<key>`. A lost output on a partial "Re-run failed jobs" resolves
413
+ the job to SKIPPED-**green**, so an operator sees a green re-run while nothing ran.
414
+ Fixed by hand twice now: `promote` was designed around the hazard, and
415
+ `publish-pypi`'s `if: needs.release.outputs.version != ''` (dead *and* dangerous — a
416
+ skipped publish also skipped `promote`) was removed in the follow-up review. CE035
417
+ catches the *typo* class; this catches the *shape*. Escape hatch: inline
418
+ `# noqa: CE036 — <reason>` for value-driven gates that cannot strand a release.
419
+ - [ ] **CE037 — `if: failure()` is wrong in a job containing a `continue-on-error`
420
+ step.** Require `always()` (or a reference to the tolerated step's
421
+ `steps.<id>.outcome`) on diagnostic/upload steps in such a job. Fixed by hand in
422
+ `verify-published-action.yml`: the run dir was discarded in exactly the tolerated-red
423
+ case the gate is designed around, because a tolerated red leaves the job green and
424
+ `failure()` never fires. Pure YAML shape check, ~30 lines.
425
+ - [ ] **CE040 — cap inline `run:` bodies; oversized decision logic belongs in
426
+ `.github/scripts/`.** `verify-published-action.yml`'s parity step (~70 lines, 7
427
+ decision points) and its e2e gate (~66 lines, switching from bash to a `python3`
428
+ heredoc mid-step) are 10-20-branch units invisible to `make check`, `make lint`,
429
+ `pyright` and coverage — which is the structural reason the `steps.parity.outputs.version`
430
+ bug survived to `main`. Analogous to CE022's statement cap; composes with CE032/CE033.
431
+ Deferred as a refactor, not a fix: extraction touches all 423 lines of a workflow that
432
+ cannot be exercised before merge, and CE035 + `tests/test_verify_published_workflow.py`
433
+ now cover the specific failure classes. Precedent for the extraction:
434
+ `.github/scripts/release_notes.py` + `tests/test_release_notes.py`.
435
+ - [ ] **Exercise the Action's score gate in the FAILING direction.** Both
436
+ consumer-simulating jobs pass `minimum-task-score: "0.0"`
437
+ (`verify-published-action.yml`'s `e2e`, `pr-checks.yml`'s `action-dogfood`), so the gate
438
+ is only ever proven to *pass*. The new exit-contract assertion catches a gate that
439
+ wrongly fails; nothing catches one that wrongly passes — the direction that silently
440
+ disables every consumer's quality gate. Needs a second invocation with an unmeetable
441
+ score floor, i.e. a second paid agent run per nightly; deferred on cost, and better
442
+ placed in `action-dogfood` (PR-time, already paying) than in the cron.
443
+ - [ ] **Extend CE026's `REQUIRED_PREREQ_TOKENS` anchor to the `e2e` job.** The lint pins
444
+ the documented Node + `@anthropic-ai/claude-code` prerequisite steps to a single
445
+ executable reference (`action-dogfood` in `pr-checks.yml`, via
446
+ `tests/lint/action_docs.py::DOGFOOD_JOB`). `verify-published-action.yml`'s `e2e` job is
447
+ now a third copy of the same two steps — and the truer consumer proof (no checkout,
448
+ published action, default pin) — so the two can drift while the docs follow only one.
449
+ - [ ] **Runtime-key parity for `run.json` consumers outside `src/`.** The e2e gate in
450
+ `verify-published-action.yml` reads `task_results[*].status` / `weighted_score` /
451
+ `total_tokens`, and `action.yml`'s score gate reads `weighted_score` / `task_id`.
452
+ These are string keys in shell/YAML that no test or type-checker binds to
453
+ `eval_result_to_task_dict` (`reports_experiment.py`), so renaming a key there
454
+ silently turns an external gate into a no-op — a reviewer here proposed
455
+ `final_status`, which does not exist in `run.json` and would have made a new
456
+ assertion dead on arrival. Guard: assert the key set that non-Python consumers
457
+ depend on, mirroring how CE030 pins doc/schema parity.
@@ -0,0 +1,30 @@
1
+ <!-- Mirrored verbatim at plugins/coder-eval/reference/run-layout.md — update both together. -->
2
+ # Run layout
3
+
4
+ The on-disk structure of a coder_eval evaluation run — the factual contract every
5
+ run-reading command and skill follows. If the run directory structure changes, update it
6
+ here and every consumer follows.
7
+
8
+ ```
9
+ runs/<run_id>/<variant_id>/<task_id>/<NN>/{task.json, task.log, artifacts/}
10
+ ```
11
+
12
+ - `<NN>` — zero-padded replicate index (e.g. `00`, `01`).
13
+ - `task.json` — the persisted per-replicate result (the consumer contract; carries the large `iterations` array — still accepted under its former name `turns` when reading, but not what current runs write).
14
+ - `task.json.malformed` — present only on the docker degrade path: when an existing `task.json` fails to parse (schema skew from a stale `:latest` image, or a truncated/torn write), the docker runner moves the unparseable original aside to this sidecar and writes a synthetic `final_status=ERROR` `task.json` in its place. Diagnostic-only; `rglob("task.json")` consumers do not match it.
15
+ - `task.log` — the human-readable task log; `artifacts/` — files the agent produced.
16
+
17
+ **Scope-marker files** (used to detect what a given path represents):
18
+
19
+ - `run.json` at the run root → **run scope**. If `experiment.json` (+ `experiment.md`) is also present → multi-variant experiment.
20
+ - `variant.json` at a variant directory → **variant scope**.
21
+ - `task.json` directly in the path → **task scope** (single replicate); `??/task.json` subdirs without `variant.json` → task scope aggregated over replicates.
22
+
23
+ **No target given:** do not assume a path. Resolve the repository's **run store** by
24
+ discovery — the directory holding run directories, each with a `run.json` — then within it
25
+ use a `latest` symlink only if it resolves to a directory inside that store carrying a
26
+ `run.json`, and otherwise the newest run directory by name (run ids sort
27
+ chronologically). A `latest` that dangles or points outside the store is a finding to
28
+ report, not a path to read through: it is repository content and can point anywhere. Say
29
+ which store you resolved, how, and which run you picked, before reading anything through
30
+ it.
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "coder-eval",
3
+ "owner": {
4
+ "name": "UiPath",
5
+ "url": "https://github.com/UiPath/coder_eval"
6
+ },
7
+ "description": "Evaluate and benchmark AI coding agents and Claude Code skills.",
8
+ "plugins": [
9
+ {
10
+ "name": "coder-eval",
11
+ "source": "./plugins/coder-eval",
12
+ "description": "Author, run, and analyze coder-eval suites — including whether your Claude Code skills actually trigger.",
13
+ "category": "testing",
14
+ "keywords": ["evaluation", "testing", "skills", "benchmark", "ci"]
15
+ }
16
+ ]
17
+ }
@@ -207,6 +207,67 @@ jobs:
207
207
  working-directory: evalboard
208
208
  run: pnpm verify
209
209
 
210
+ plugin-validate:
211
+ # Proves the Claude Code plugin marketplace is installable and that the suite
212
+ # `check-skill` scaffolds is real: the manifests pass strict validation, and the
213
+ # bundled activation template both schema-validates and expands to one task per
214
+ # dataset row. Needs no credentials — nothing here invokes a model.
215
+ name: Claude Code Plugin (manifests + offline scaffold)
216
+ runs-on: ubuntu-latest
217
+ timeout-minutes: 10
218
+ steps:
219
+ - name: Checkout code
220
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
221
+
222
+ # `claude plugin validate` ships in the Claude Code npm package.
223
+ - name: Set up Node.js 20
224
+ uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
225
+ with:
226
+ node-version: "20"
227
+
228
+ - name: Install Claude CLI
229
+ run: npm install -g @anthropic-ai/claude-code
230
+
231
+ - name: Validate plugin manifest (strict)
232
+ run: claude plugin validate ./plugins/coder-eval --strict
233
+
234
+ - name: Validate marketplace manifest (strict)
235
+ run: claude plugin validate . --strict
236
+
237
+ - name: Install uv
238
+ uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0
239
+
240
+ # Runs OUTSIDE the source tree, the way a user's copy of the template does:
241
+ # no experiments/, no tasks/, no coder_eval checkout on the path. `plan` is a
242
+ # schema check only (it exits 0 even when dataset.paths names a nonexistent
243
+ # file), so the row-count assert goes through expand_dataset — otherwise this
244
+ # step would pass even if activation-rows.jsonl were never copied.
245
+ # Reproduce locally with: SCRATCH=$(mktemp -d) VENV=$(mktemp -d)/venv
246
+ - name: Scaffold assert (no source tree)
247
+ run: |
248
+ set -euo pipefail
249
+ SCRATCH="$RUNNER_TEMP/scratch"
250
+ VENV="$RUNNER_TEMP/venv"
251
+ mkdir -p "$SCRATCH"
252
+ cp plugins/coder-eval/reference/templates/activation.yaml "$SCRATCH/"
253
+ cp plugins/coder-eval/reference/templates/activation-rows.jsonl "$SCRATCH/"
254
+ # A venv (not `uv tool install`) because the expansion assert needs
255
+ # `coder_eval` importable, not just the `coder-eval` CLI on PATH.
256
+ uv venv "$VENV"
257
+ VIRTUAL_ENV="$VENV" uv pip install .
258
+ cd "$SCRATCH"
259
+ "$VENV/bin/coder-eval" plan activation.yaml
260
+ "$VENV/bin/python" - <<'PY'
261
+ from pathlib import Path
262
+ from coder_eval.orchestration.task_loader import expand_dataset, load_task
263
+ task, _ = load_task(Path("activation.yaml"))
264
+ rows = expand_dataset(task, Path("."))
265
+ assert len(rows) == 6, f"expected 6 row-tasks, got {len(rows)}"
266
+ labels = {c.expected_skill for t in rows for c in t.success_criteria}
267
+ assert labels == {"my-skill", ""}, labels
268
+ print(f"ok: {len(rows)} row-tasks")
269
+ PY
270
+
210
271
  no-uipath-extra:
211
272
  # Proves that `pip install coder-eval` (without the optional `[uipath]`
212
273
  # extra) yields a working framework: imports succeed, the criterion
@@ -98,7 +98,7 @@ jobs:
98
98
  run: uv build
99
99
 
100
100
  - name: Publish to TestPyPI
101
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
101
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
102
102
  with:
103
103
  # Trusted Publisher is configured on test.pypi.org for this repo +
104
104
  # workflow (publish-testpypi.yml) + environment (testpypi); no