coder-eval 0.11.4__tar.gz → 0.11.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (666) hide show
  1. coder_eval-0.11.6/.claude-plugin/marketplace.json +35 -0
  2. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/pr-checks.yml +79 -9
  3. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/verify-published-action.yml +10 -11
  4. {coder_eval-0.11.4 → coder_eval-0.11.6}/CHANGELOG.md +199 -0
  5. {coder_eval-0.11.4 → coder_eval-0.11.6}/CLAUDE.md +1 -1
  6. {coder_eval-0.11.4 → coder_eval-0.11.6}/PKG-INFO +38 -30
  7. {coder_eval-0.11.4 → coder_eval-0.11.6}/README.md +36 -29
  8. coder_eval-0.11.6/action.yml +268 -0
  9. {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/Dockerfile +15 -9
  10. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/AB_EXPERIMENTS.md +9 -3
  11. coder_eval-0.11.6/docs/CI_GATE.md +241 -0
  12. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DIALOG_MODE.md +5 -3
  13. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/EXTENDING.md +2 -2
  14. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/PLUGIN.md +4 -2
  15. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/TASK_DEFINITION_GUIDE.md +5 -5
  16. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/USER_GUIDE.md +1 -1
  17. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/CLAUDE_CODE.md +11 -1
  18. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/HARNESS_PARITY.md +74 -10
  19. coder_eval-0.11.6/docs/agents/OPENCODE.md +373 -0
  20. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/index.md +7 -6
  21. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/llms.txt +4 -2
  22. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/02-ci-pipeline.md +5 -4
  23. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/07-plugin-in-claude-code.md +6 -3
  24. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/README.md +68 -9
  25. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/download/route.ts +15 -5
  26. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/default.yaml +3 -1
  27. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/plugin-comparison.yaml +3 -0
  28. {coder_eval-0.11.4 → coder_eval-0.11.6}/mkdocs.yml +3 -1
  29. coder_eval-0.11.6/plugins/coder-eval/.claude-plugin/plugin.json +23 -0
  30. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/templates/activation.yaml +17 -4
  31. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/analyze/SKILL.md +1 -1
  32. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/check-skill/SKILL.md +37 -5
  33. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/ci/SKILL.md +69 -52
  34. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/init/SKILL.md +1 -1
  35. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/lint-tasks/SKILL.md +1 -1
  36. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/task/SKILL.md +1 -1
  37. {coder_eval-0.11.4 → coder_eval-0.11.6}/pyproject.toml +20 -1
  38. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/__init__.py +1 -1
  39. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/__init__.py +11 -3
  40. coder_eval-0.11.6/src/coder_eval/agents/opencode_agent.py +1515 -0
  41. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_helpers.py +21 -8
  42. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/skill_triggered.py +5 -1
  43. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/__init__.py +2 -0
  44. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/agent_config.py +45 -1
  45. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/enums.py +1 -0
  46. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/tasks.py +7 -3
  47. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestrator.py +62 -37
  48. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/pricing.py +7 -2
  49. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/utils.py +18 -1
  50. coder_eval-0.11.6/tasks/opencode_smoke_test.yaml +37 -0
  51. coder_eval-0.11.6/tests/lint/plugin_manifest_parity.py +101 -0
  52. coder_eval-0.11.6/tests/lint/rules/ce046_env_info_spreads_super.py +83 -0
  53. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/runner.py +2 -0
  54. coder_eval-0.11.6/tests/test_action_inputs.py +499 -0
  55. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_claude_settings_enforcement_live.py +39 -17
  56. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_custom_lint.py +362 -35
  57. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_route.py +13 -7
  58. coder_eval-0.11.6/tests/test_opencode_agent.py +1897 -0
  59. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator.py +127 -43
  60. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plugin_processing.py +54 -0
  61. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pricing_registry.py +13 -1
  62. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_permissions.py +31 -5
  63. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_route_seam_exhaustiveness.py +6 -2
  64. coder_eval-0.11.6/tests/test_run_helpers.py +79 -0
  65. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_skill_triggered.py +13 -0
  66. {coder_eval-0.11.4 → coder_eval-0.11.6}/uv.lock +2 -2
  67. coder_eval-0.11.4/.claude-plugin/marketplace.json +0 -17
  68. coder_eval-0.11.4/action.yml +0 -217
  69. coder_eval-0.11.4/docs/CI_GATE.md +0 -180
  70. coder_eval-0.11.4/plugins/coder-eval/.claude-plugin/plugin.json +0 -10
  71. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review-full.md +0 -0
  72. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  73. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review.md +0 -0
  74. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-create-plan.md +0 -0
  75. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-implement-plan.md +0 -0
  76. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-review.md +0 -0
  77. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/harness-candidates.md +0 -0
  78. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/axes.md +0 -0
  79. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/multi-model-review.md +0 -0
  80. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/review-rubric.md +0 -0
  81. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/run-layout.md +0 -0
  82. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/workflows/cr-axis.js +0 -0
  83. {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/workflows/cr-parent.js +0 -0
  84. {coder_eval-0.11.4 → coder_eval-0.11.6}/.env.example +0 -0
  85. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/CODEOWNERS +0 -0
  86. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  87. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  88. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  89. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/actionlint.yaml +0 -0
  90. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/code_review.md +0 -0
  91. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/dependabot.yml +0 -0
  92. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/pages-stub/index.html +0 -0
  93. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/scripts/release_notes.py +0 -0
  94. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/claude-pr-review.yml +0 -0
  95. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/codeql.yml +0 -0
  96. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/conventional-commits.yml +0 -0
  97. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/docker-publish.yml +0 -0
  98. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/docs.yml +0 -0
  99. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/publish-testpypi.yml +0 -0
  100. {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/release.yml +0 -0
  101. {coder_eval-0.11.4 → coder_eval-0.11.6}/.gitignore +0 -0
  102. {coder_eval-0.11.4 → coder_eval-0.11.6}/.pre-commit-config.yaml +0 -0
  103. {coder_eval-0.11.4 → coder_eval-0.11.6}/.python-version +0 -0
  104. {coder_eval-0.11.4 → coder_eval-0.11.6}/ADOPTERS.md +0 -0
  105. {coder_eval-0.11.4 → coder_eval-0.11.6}/CODE_OF_CONDUCT.md +0 -0
  106. {coder_eval-0.11.4 → coder_eval-0.11.6}/CONTRIBUTING.md +0 -0
  107. {coder_eval-0.11.4 → coder_eval-0.11.6}/LICENSE +0 -0
  108. {coder_eval-0.11.4 → coder_eval-0.11.6}/Makefile +0 -0
  109. {coder_eval-0.11.4 → coder_eval-0.11.6}/NOTICE +0 -0
  110. {coder_eval-0.11.4 → coder_eval-0.11.6}/SECURITY.md +0 -0
  111. {coder_eval-0.11.4 → coder_eval-0.11.6}/comparison.md +0 -0
  112. {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/Dockerfile.runtime +0 -0
  113. {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/coder_eval_entrypoint.sh +0 -0
  114. {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  115. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DATASETS.md +0 -0
  116. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DOCKER_ISOLATION.md +0 -0
  117. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/REPORT_SCHEMA.md +0 -0
  118. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/ANTIGRAVITY.md +0 -0
  119. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/CODEX.md +0 -0
  120. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/assets/hero.gif +0 -0
  121. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/comparison.md +0 -0
  122. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/01-first-evaluation.md +0 -0
  123. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/03-evalboard-local.md +0 -0
  124. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/04-writing-a-task.md +0 -0
  125. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/05-comparing-models.md +0 -0
  126. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/06-use-docker-isolation.md +0 -0
  127. {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/README.md +0 -0
  128. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/.gitignore +0 -0
  129. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  130. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  131. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  132. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/col-help.tsx +0 -0
  133. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  134. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/harness-badge.tsx +0 -0
  135. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/harness-selector.tsx +0 -0
  136. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/scroll-table.tsx +0 -0
  137. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/search-box.tsx +0 -0
  138. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/unit-toggle.tsx +0 -0
  139. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/version-list.tsx +0 -0
  140. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  141. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_lib/source-param.ts +0 -0
  142. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  143. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  144. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  145. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/daily-chart.tsx +0 -0
  146. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  147. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/harness-legend.tsx +0 -0
  148. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/harness-series.ts +0 -0
  149. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/tag-rail.tsx +0 -0
  150. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  151. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  152. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/window-summary.tsx +0 -0
  153. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/file/route.ts +0 -0
  154. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  155. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/refresh/route.ts +0 -0
  156. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/error.tsx +0 -0
  157. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/globals.css +0 -0
  158. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/icon.png +0 -0
  159. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/layout.tsx +0 -0
  160. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/page.tsx +0 -0
  161. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  162. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/page.tsx +0 -0
  163. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  164. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/scribe/page.tsx +0 -0
  165. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/scribe/run-table.tsx +0 -0
  166. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  167. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/actions.ts +0 -0
  168. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/page.tsx +0 -0
  169. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/trends-view.tsx +0 -0
  170. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  171. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/page.tsx +0 -0
  172. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  173. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/next-env.d.ts +0 -0
  174. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/next.config.mjs +0 -0
  175. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/package.json +0 -0
  176. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/pnpm-lock.yaml +0 -0
  177. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/postcss.config.mjs +0 -0
  178. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/antigravity.png +0 -0
  179. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/claude-code.png +0 -0
  180. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/codex.png +0 -0
  181. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/uipath.png +0 -0
  182. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/tailwind.config.ts +0 -0
  183. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/tsconfig.json +0 -0
  184. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/vitest.config.ts +0 -0
  185. {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/vitest.setup.ts +0 -0
  186. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/early-stop-ab.yaml +0 -0
  187. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/model-comparison.yaml +0 -0
  188. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/permissions-smoke.yaml +0 -0
  189. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/prompt-mutations-example.yaml +0 -0
  190. {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/smoke_variants.yaml +0 -0
  191. {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/README.md +0 -0
  192. {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/cost_logger.py +0 -0
  193. {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/litellm-config.yaml +0 -0
  194. {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/start-litellm.sh +0 -0
  195. {coder_eval-0.11.4 → coder_eval-0.11.6}/osv-scanner.toml +0 -0
  196. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/README.md +0 -0
  197. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/cli-setup.md +0 -0
  198. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/criteria.md +0 -0
  199. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/repo-layout.md +0 -0
  200. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/run-layout.md +0 -0
  201. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/task-rubric.md +0 -0
  202. {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  203. {coder_eval-0.11.4 → coder_eval-0.11.6}/scripts/check_commit_msg.sh +0 -0
  204. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/.gitattributes +0 -0
  205. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agent.py +0 -0
  206. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/_logging.py +0 -0
  207. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/antigravity_agent.py +0 -0
  208. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/claude_code_agent.py +0 -0
  209. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/codex_agent.py +0 -0
  210. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/noop_agent.py +0 -0
  211. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/registry.py +0 -0
  212. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/watchdog.py +0 -0
  213. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/analysis.py +0 -0
  214. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/__init__.py +0 -0
  215. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/aggregate_command.py +0 -0
  216. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/console.py +0 -0
  217. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/evaluate_command.py +0 -0
  218. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/plan_command.py +0 -0
  219. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/report_command.py +0 -0
  220. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_command.py +0 -0
  221. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  222. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/utils.py +0 -0
  223. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/config.py +0 -0
  224. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/__init__.py +0 -0
  225. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  226. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/agent_judge.py +0 -0
  227. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/base.py +0 -0
  228. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/classification_match.py +0 -0
  229. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/cli_called.py +0 -0
  230. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/command_executed.py +0 -0
  231. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  232. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_check.py +0 -0
  233. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_contains.py +0 -0
  234. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_exists.py +0 -0
  235. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  236. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/json_check.py +0 -0
  237. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/llm_judge.py +0 -0
  238. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/reference_comparison.py +0 -0
  239. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/run_command.py +0 -0
  240. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/uipath_eval.py +0 -0
  241. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/__init__.py +0 -0
  242. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/agent.py +0 -0
  243. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/budget.py +0 -0
  244. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/categories.py +0 -0
  245. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/categorization.py +0 -0
  246. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/checker_misuse.py +0 -0
  247. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/executor.py +0 -0
  248. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/judge.py +0 -0
  249. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/reference.py +0 -0
  250. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/retry.py +0 -0
  251. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/timeout.py +0 -0
  252. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/__init__.py +0 -0
  253. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/checker.py +0 -0
  254. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  255. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  256. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_context.py +0 -0
  257. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  258. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_models.py +0 -0
  259. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  260. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_usage.py +0 -0
  261. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/sub_agent.py +0 -0
  262. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/summaries.py +0 -0
  263. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  264. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/formatting.py +0 -0
  265. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/fs_permissions.py +0 -0
  266. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/invocation_log.py +0 -0
  267. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/isolation/__init__.py +0 -0
  268. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/isolation/docker_runner.py +0 -0
  269. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/litellm_cost.py +0 -0
  270. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/logging_config.py +0 -0
  271. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/container_paths.py +0 -0
  272. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/criteria.py +0 -0
  273. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/experiment.py +0 -0
  274. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/judge.py +0 -0
  275. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/judge_defaults.py +0 -0
  276. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/limits.py +0 -0
  277. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/merge_strategy.py +0 -0
  278. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/mutations.py +0 -0
  279. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/results.py +0 -0
  280. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/routing.py +0 -0
  281. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/sandbox.py +0 -0
  282. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/telemetry.py +0 -0
  283. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/templates.py +0 -0
  284. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/__init__.py +0 -0
  285. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/batch.py +0 -0
  286. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/config.py +0 -0
  287. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/config_merge.py +0 -0
  288. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/early_stop.py +0 -0
  289. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/evaluation.py +0 -0
  290. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/experiment.py +0 -0
  291. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/overrides.py +0 -0
  292. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/run_limits.py +0 -0
  293. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/task_loader.py +0 -0
  294. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/path_utils.py +0 -0
  295. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/plugins.py +0 -0
  296. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/py.typed +0 -0
  297. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports.py +0 -0
  298. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_experiment.py +0 -0
  299. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_html.py +0 -0
  300. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_junit.py +0 -0
  301. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_stats.py +0 -0
  302. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/__init__.py +0 -0
  303. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  304. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/tags.yaml +0 -0
  305. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/sandbox.py +0 -0
  306. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/__init__.py +0 -0
  307. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/ast_similarity.py +0 -0
  308. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/complexity.py +0 -0
  309. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/quality.py +0 -0
  310. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/signature_similarity.py +0 -0
  311. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/similarity.py +0 -0
  312. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/token_similarity.py +0 -0
  313. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/__init__.py +0 -0
  314. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/termination.py +0 -0
  315. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/user_simulator.py +0 -0
  316. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/__init__.py +0 -0
  317. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/callbacks.py +0 -0
  318. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/collector.py +0 -0
  319. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/events.py +0 -0
  320. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/renderers.py +0 -0
  321. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/wire.py +0 -0
  322. {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/telemetry.py +0 -0
  323. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/README.md +0 -0
  324. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agentless_smoke_test.yaml +0 -0
  325. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/antigravity_hello_world.yaml +0 -0
  326. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  327. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_hello_world.yaml +0 -0
  328. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  329. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  330. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_subagent_test.yaml +0 -0
  331. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  332. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_hello_world.yaml +0 -0
  333. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_parallel_commands.yaml +0 -0
  334. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  335. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_skills_test.yaml +0 -0
  336. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_string_utils.yaml +0 -0
  337. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_subagent_test.yaml +0 -0
  338. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  339. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/subagent_merge_sort.yaml +0 -0
  340. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  341. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  342. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/byod_smoke_test.yaml +0 -0
  343. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dataset_example.yaml +0 -0
  344. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/datasets/sentiment.jsonl +0 -0
  345. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  346. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  347. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  348. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  349. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  350. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  351. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  352. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  353. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  354. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/fibonacci_with_template.yaml +0 -0
  355. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/hello_date.yaml +0 -0
  356. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/inline_starter_example.yaml +0 -0
  357. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/internal/session_resumption.yaml +0 -0
  358. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_smoke.yaml +0 -0
  359. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  360. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  361. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  362. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  363. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  364. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  365. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/run_limits/max_turns_cap.yaml +0 -0
  366. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/run_limits/turn_timeout.yaml +0 -0
  367. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  368. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  369. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  370. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  371. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  372. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  373. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/README.md +0 -0
  374. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  375. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  376. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  377. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  378. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  379. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  380. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  381. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  382. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  383. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  384. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/sentiment_classification.yaml +0 -0
  385. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_agent_judge.yaml +0 -0
  386. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_budget_exceeded.yaml +0 -0
  387. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  388. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_llm_judge.yaml +0 -0
  389. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_negative_path.yaml +0 -0
  390. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_task_timeout.yaml +0 -0
  391. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_variants.yaml +0 -0
  392. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/test_sandbox.yaml +0 -0
  393. {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/token_check.yaml +0 -0
  394. {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/byod_smoke_test/Dockerfile +0 -0
  395. {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/README.md +0 -0
  396. {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/src/main.py +0 -0
  397. {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/tests/test_main.py +0 -0
  398. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/__init__.py +0 -0
  399. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/__init__.py +0 -0
  400. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/__init__.py +0 -0
  401. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  402. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  403. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  404. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  405. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  406. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  407. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  408. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  409. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  410. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  411. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  412. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  413. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  414. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  415. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  416. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  417. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  418. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  419. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  420. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  421. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  422. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/live_criteria.py +0 -0
  423. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  424. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  425. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  426. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  427. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  428. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  429. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  430. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_path_helpers.py +0 -0
  431. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/conftest.py +0 -0
  432. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/__init__.py +0 -0
  433. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  434. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  435. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/mock_agent.py +0 -0
  436. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  437. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  438. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  439. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/text_stub_agent.py +0 -0
  440. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/__init__.py +0 -0
  441. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/action_docs.py +0 -0
  442. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/dead_config_fields.py +0 -0
  443. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_env_parity.py +0 -0
  444. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_examples.py +0 -0
  445. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_indexes.py +0 -0
  446. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_schema_parity.py +0 -0
  447. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/generated.py +0 -0
  448. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/live_verdict_contract.py +0 -0
  449. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/plugin_reference.py +0 -0
  450. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/pyright_config.py +0 -0
  451. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/__init__.py +0 -0
  452. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/base.py +0 -0
  453. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  454. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  455. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  456. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  457. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  458. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  459. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  460. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  461. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  462. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  463. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  464. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  465. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  466. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  467. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  468. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  469. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_agent_timing_access.py +0 -0
  470. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  471. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  472. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_silent_except.py +0 -0
  473. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  474. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  475. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  476. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  477. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/open_explicit_encoding.py +0 -0
  478. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  479. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/register_criterion_required.py +0 -0
  480. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  481. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  482. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/violation.py +0 -0
  483. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/workflow_outputs.py +0 -0
  484. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_action_version_pin.py +0 -0
  485. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent.py +0 -0
  486. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_no_timing_fields.py +0 -0
  487. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_optional_type.py +0 -0
  488. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_registry_dispatch.py +0 -0
  489. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_sdk_decoupling.py +0 -0
  490. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_golden_master.py +0 -0
  491. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_judge_criterion.py +0 -0
  492. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_telemetry.py +0 -0
  493. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_telemetry_advanced.py +0 -0
  494. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_timeout.py +0 -0
  495. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agentless.py +0 -0
  496. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_aggregate.py +0 -0
  497. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_antigravity_agent.py +0 -0
  498. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byoa_plugin.py +0 -0
  499. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byoa_plugin_live.py +0 -0
  500. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byod_feature.py +0 -0
  501. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_check_all_async.py +0 -0
  502. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_checker_logging.py +0 -0
  503. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_classification_match.py +0 -0
  504. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cleanup_preservation_guard.py +0 -0
  505. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_backend_flag.py +0 -0
  506. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_called_criterion.py +0 -0
  507. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_empty_glob.py +0 -0
  508. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_sdk_options.py +0 -0
  509. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_set_overrides.py +0 -0
  510. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_telemetry.py +0 -0
  511. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_type_flag.py +0 -0
  512. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_code_review_bugs.py +0 -0
  513. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent.py +0 -0
  514. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent_live.py +0 -0
  515. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent_unit.py +0 -0
  516. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_token_mapping.py +0 -0
  517. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_executed.py +0 -0
  518. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_statistics.py +0 -0
  519. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_telemetry_result_data.py +0 -0
  520. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_commands_efficiency.py +0 -0
  521. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_lineage.py +0 -0
  522. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_merge_engine.py +0 -0
  523. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_precedence.py +0 -0
  524. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_continuous_scoring.py +0 -0
  525. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cost_accounting_paths.py +0 -0
  526. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_criterion_result_round_trip.py +0 -0
  527. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_dataset_expansion.py +0 -0
  528. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_debug_logging.py +0 -0
  529. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_build_failure.py +0 -0
  530. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_litellm_env.py +0 -0
  531. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_container_death.py +0 -0
  532. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_mounts.py +0 -0
  533. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_stream_limit.py +0 -0
  534. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_wildcard_env.py +0 -0
  535. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_workdir_live.py +0 -0
  536. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_driver_resolver.py +0 -0
  537. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_early_stop.py +0 -0
  538. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_error_handling.py +0 -0
  539. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_evaluate_command.py +0 -0
  540. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_evaluator.py +0 -0
  541. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_event_collector.py +0 -0
  542. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_cli.py +0 -0
  543. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_loader.py +0 -0
  544. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_models.py +0 -0
  545. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_reports.py +0 -0
  546. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_resolver.py +0 -0
  547. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_runner.py +0 -0
  548. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_file_check.py +0 -0
  549. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_file_contains_scoring.py +0 -0
  550. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_formatting.py +0 -0
  551. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_git_clone_failure.py +0 -0
  552. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_glob_paths_in_file_criteria.py +0 -0
  553. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_heartbeat_watchdog.py +0 -0
  554. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_ignore_patterns_negation.py +0 -0
  555. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_image_from_dockerfiles.py +0 -0
  556. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_integration.py +0 -0
  557. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_json_check.py +0 -0
  558. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_anthropic.py +0 -0
  559. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_bedrock.py +0 -0
  560. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_burn_in_live.py +0 -0
  561. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_context_builder.py +0 -0
  562. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_litellm.py +0 -0
  563. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_models.py +0 -0
  564. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_persistence.py +0 -0
  565. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_lint_no_top_level_run_limits.py +0 -0
  566. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_lint_runner.py +0 -0
  567. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_config.py +0 -0
  568. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_cost.py +0 -0
  569. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_cost_logger.py +0 -0
  570. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_judge_live.py +0 -0
  571. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_llm_judge_criterion.py +0 -0
  572. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_log_tail_buffer.py +0 -0
  573. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_logging.py +0 -0
  574. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_logging_isolation.py +0 -0
  575. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_characterization.py +0 -0
  576. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_strategy_annotations.py +0 -0
  577. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_unification.py +0 -0
  578. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_models.py +0 -0
  579. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_mutations.py +0 -0
  580. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_new_criteria.py +0 -0
  581. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_node_env_config.py +0 -0
  582. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_optional_dependencies.py +0 -0
  583. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator_error_log_tail.py +0 -0
  584. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator_telemetry.py +0 -0
  585. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_overrides_engine.py +0 -0
  586. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_parallel.py +0 -0
  587. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_path_utils.py +0 -0
  588. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plan_command.py +0 -0
  589. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plugins.py +0 -0
  590. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_post_run.py +0 -0
  591. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pr_review_workflow.py +0 -0
  592. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pre_run.py +0 -0
  593. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_preservation_mode.py +0 -0
  594. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_comparison_scoring.py +0 -0
  595. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_evaluator.py +0 -0
  596. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_missing_file.py +0 -0
  597. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_models.py +0 -0
  598. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_registry.py +0 -0
  599. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_release_notes.py +0 -0
  600. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_replicate_stats.py +0 -0
  601. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_report_command.py +0 -0
  602. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports.py +0 -0
  603. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_experiment.py +0 -0
  604. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_html.py +0 -0
  605. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_junit.py +0 -0
  606. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_stats.py +0 -0
  607. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_stats_nonfinite.py +0 -0
  608. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_resolve_task_files.py +0 -0
  609. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_resume.py +0 -0
  610. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_retry_logic_comprehensive.py +0 -0
  611. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_routing.py +0 -0
  612. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_command_junit.py +0 -0
  613. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_command_stdout.py +0 -0
  614. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_models.py +0 -0
  615. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_orchestrator.py +0 -0
  616. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_resolver.py +0 -0
  617. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_metrics.py +0 -0
  618. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_runtime_tool_versions.py +0 -0
  619. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox.py +0 -0
  620. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_layer_builder.py +0 -0
  621. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_optional.py +0 -0
  622. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_record_cli.py +0 -0
  623. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_security.py +0 -0
  624. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_symlink_preservation.py +0 -0
  625. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_templates.py +0 -0
  626. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_scorers.py +0 -0
  627. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_scoring_quality.py +0 -0
  628. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sdk_option_classification.py +0 -0
  629. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_config.py +0 -0
  630. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_integration.py +0 -0
  631. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_termination.py +0 -0
  632. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_trials.py +0 -0
  633. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_agent_integration.py +0 -0
  634. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_batch.py +0 -0
  635. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_callbacks.py +0 -0
  636. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_cli.py +0 -0
  637. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_events.py +0 -0
  638. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_orchestrator.py +0 -0
  639. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_renderers.py +0 -0
  640. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_wire.py +0 -0
  641. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sub_agent_runner.py +0 -0
  642. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_success_criterion_union.py +0 -0
  643. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_suite_rollup.py +0 -0
  644. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_summaries.py +0 -0
  645. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_tags.py +0 -0
  646. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_task_definition_unknown_fields.py +0 -0
  647. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_teardown_interrupt.py +0 -0
  648. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_telemetry.py +0 -0
  649. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_template_env_expansion.py +0 -0
  650. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_threshold_enforcement.py +0 -0
  651. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_batch.py +0 -0
  652. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_categorization.py +0 -0
  653. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_exceptions.py +0 -0
  654. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_models.py +0 -0
  655. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_orchestrator.py +0 -0
  656. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_token_usage.py +0 -0
  657. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_uipath_eval.py +0 -0
  658. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_user_simulator.py +0 -0
  659. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_utils.py +0 -0
  660. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_utterance_extraction.py +0 -0
  661. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_variant_prompt_file.py +0 -0
  662. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_verdict_tool.py +0 -0
  663. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_verify_published_workflow.py +0 -0
  664. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_visible_turn_cap.py +0 -0
  665. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_watchdog.py +0 -0
  666. {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_yaml_migration.py +0 -0
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-marketplace.json",
3
+ "name": "coder-eval",
4
+ "owner": {
5
+ "name": "UiPath",
6
+ "email": "coder-eval@uipath.com",
7
+ "url": "https://github.com/UiPath/coder_eval"
8
+ },
9
+ "description": "Test whether your Claude Code skills actually trigger, and benchmark AI coding agents against your own tasks.",
10
+ "plugins": [
11
+ {
12
+ "name": "coder-eval",
13
+ "displayName": "Coder Eval",
14
+ "source": "./plugins/coder-eval",
15
+ "description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
16
+ "author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
17
+ "homepage": "https://coder-eval.com",
18
+ "repository": "https://github.com/UiPath/coder_eval",
19
+ "license": "Apache-2.0",
20
+ "category": "testing",
21
+ "keywords": [
22
+ "claude-code-skills",
23
+ "skill-testing",
24
+ "skill-activation",
25
+ "evaluation",
26
+ "benchmark",
27
+ "agent-testing",
28
+ "github-actions",
29
+ "sandbox",
30
+ "llm-judge",
31
+ "ci"
32
+ ]
33
+ }
34
+ ]
35
+ }
@@ -997,22 +997,37 @@ jobs:
997
997
  id: dogfood
998
998
  uses: ./
999
999
  with:
1000
+ # Exercises what tests/test_action_inputs.py cannot: it asserts the argv
1001
+ # both step scripts build, but only a real runner proves that
1002
+ # `working-directory:` works on a composite step and that a plugin
1003
+ # installed via `--with` is discovered at runtime. Hence a relative
1004
+ # run-dir (landing under tasks/), the bare task filename and the `../`
1005
+ # plugin path, all resolved from `working-directory`.
1000
1006
  version: local
1001
- tasks: tasks/hello_date.yaml
1002
- model: claude-haiku-4-5-20251001
1007
+ working-directory: tasks
1003
1008
  run-dir: runs/ci-action-dogfood
1004
- junit-path: runs/ci-action-dogfood/junit.xml
1005
- # Credentials go through the generic env passthrough (the only channel);
1009
+ extra-packages: ../tests/fixtures/byoa_demo_plugin
1010
+ # The bracketed `-D` override is the case one-argv-entry-per-line exists
1011
+ # for: `[...]` is a bash character class, so a whitespace-split input
1012
+ # would collapse the list whenever a file in the cwd matched. It adds
1013
+ # Glob to hello_date.yaml's three tools, so the assertions below can tell
1014
+ # "arrived" from "ignored".
1015
+ args: |
1016
+ hello_date.yaml
1017
+ --model
1018
+ claude-haiku-4-5-20251001
1019
+ -D
1020
+ agent.allowed_tools=[Read,Write,Bash,Glob]
1006
1021
  # ANTHROPIC_API_KEY reaching the run is proven by the API-backed task
1007
- # succeeding. A floor of 0.0 passes for any produced score (exercises
1008
- # the gate path green in CI without flakiness); the second line
1009
- # exercises multi-line env parsing.
1010
- minimum-task-score: "0.0"
1022
+ # succeeding; the second line exercises multi-line env parsing.
1011
1023
  env: |
1012
1024
  ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
1013
1025
  CE_DOGFOOD_MARKER=1
1014
1026
 
1027
+ # In `tasks/` because that is the assertion: `run-dir` is reported exactly as
1028
+ # passed, so a relative one is relative to `working-directory`.
1015
1029
  - name: Verify outputs and JUnit file
1030
+ working-directory: tasks
1016
1031
  env:
1017
1032
  JUNIT: ${{ steps.dogfood.outputs.junit-path }}
1018
1033
  RUNDIR: ${{ steps.dogfood.outputs.run-dir }}
@@ -1023,11 +1038,66 @@ jobs:
1023
1038
  # our writer emits no DTDs/entities) — stdlib ET is fine here.
1024
1039
  python3 -c "import sys, xml.etree.ElementTree as ET; ET.parse(sys.argv[1])" "$JUNIT"
1025
1040
  test -f "$RUNDIR/run.json" || { echo "run.json missing"; exit 1; }
1041
+ # An absolute path would mean working-directory was ignored.
1042
+ case "$RUNDIR" in /*) echo "run-dir output was rewritten to an absolute path: $RUNDIR"; exit 1 ;; esac
1043
+
1044
+ # The action does not touch $GITHUB_STEP_SUMMARY: this is both the assertion
1045
+ # that `run-md-path` is real and the recipe the docs hand consumers.
1046
+ - name: Append the run report to the job summary
1047
+ if: always()
1048
+ working-directory: tasks
1049
+ env:
1050
+ RUN_MD: ${{ steps.dogfood.outputs.run-md-path }}
1051
+ run: |
1052
+ set -euo pipefail
1053
+ test -f "$RUN_MD" || { echo "run-md-path output does not exist: $RUN_MD"; exit 1; }
1054
+ cat "$RUN_MD" >> "$GITHUB_STEP_SUMMARY"
1055
+
1056
+ - name: Verify the plugin was discovered and the bracketed override arrived
1057
+ working-directory: tasks
1058
+ env:
1059
+ RUNDIR: ${{ steps.dogfood.outputs.run-dir }}
1060
+ run: |
1061
+ set -euo pipefail
1062
+
1063
+ # `coder-eval` on PATH is the action's uv tool shim, so this interrogates
1064
+ # its environment: a task naming the fixture's agent kind validates only
1065
+ # if the entry point was discovered there, else plan exits 1 with
1066
+ # "No agent registered for type 'byoa-demo'".
1067
+ cat > byoa-probe.yaml <<'YAML'
1068
+ task_id: "action_extra_packages_probe"
1069
+ description: "Validates only when the byoa-demo plugin is discoverable."
1070
+ initial_prompt: "not executed - plan validates without running an agent"
1071
+ agent:
1072
+ type: "byoa-demo"
1073
+ success_criteria:
1074
+ - type: "file_exists"
1075
+ path: "app.py"
1076
+ description: "not executed"
1077
+ YAML
1078
+ coder-eval plan byoa-probe.yaml
1079
+ rm -f byoa-probe.yaml
1080
+
1081
+ # And the `-D` value survived as a 4-element list, not word-split or
1082
+ # glob-rewritten.
1083
+ RUN_JSON="$RUNDIR/run.json" python3 <<'PY'
1084
+ import json, os, sys
1085
+
1086
+ data = json.load(open(os.environ["RUN_JSON"], encoding="utf-8"))
1087
+ rows = data.get("task_results") or []
1088
+ if not rows:
1089
+ sys.exit("run.json has no task_results to check the -D override against")
1090
+ tools = (rows[0].get("agent_config") or {}).get("allowed_tools")
1091
+ expected = ["Read", "Write", "Bash", "Glob"]
1092
+ if tools != expected:
1093
+ sys.exit(f"-D override did not arrive intact: allowed_tools={tools!r}, expected {expected!r}")
1094
+ print(f"bracketed -D override resolved to {tools!r}")
1095
+ PY
1026
1096
 
1027
1097
  - name: Upload dogfood run on failure
1028
1098
  if: failure()
1029
1099
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
1030
1100
  with:
1031
1101
  name: action-dogfood-runs
1032
- path: runs/ci-action-dogfood/
1102
+ path: tasks/runs/ci-action-dogfood/
1033
1103
  retention-days: 7
@@ -359,13 +359,11 @@ jobs:
359
359
  echo "--- task YAML:"; cat tasks/published_smoke.yaml
360
360
 
361
361
  # continue-on-error, because this step's exit code is NOT the gate. The action
362
- # exits with coder-eval's own code (action.yml combines them), and coder-eval
363
- # exits 1 on any failed task -- so a model flake failing `file_exists` would
364
- # redden this workflow even with minimum-task-score at 0.0, which does not
365
- # neutralize that path. This check must answer "does the published action still
366
- # work", not "is the model still good": the verification step below gates on
367
- # ARTIFACTS instead. A genuine model/credential outage still surfaces there, via
368
- # the zero-token assertion.
362
+ # exits with coder-eval's own code, and coder-eval exits 1 on any failed task,
363
+ # so a model flake failing `file_exists` would redden this workflow. This check
364
+ # must answer "does the published action still work", not "is the model still
365
+ # good": the verification step below gates on ARTIFACTS instead. A genuine
366
+ # model/credential outage still surfaces there, via the zero-token assertion.
369
367
  - name: Run the published action
370
368
  id: run
371
369
  continue-on-error: true
@@ -373,11 +371,12 @@ jobs:
373
371
  with:
374
372
  # `version:` intentionally omitted -- the whole point is to exercise the
375
373
  # default pin baked into action.yml at the v0 tag.
376
- tasks: tasks/published_smoke.yaml
377
- model: claude-haiku-4-5-20251001
378
374
  run-dir: runs/verify-published
379
- junit-path: runs/verify-published/junit.xml
380
- minimum-task-score: "0.0"
375
+ # Task path and flags both go through `args` — the action promotes no CLI flag.
376
+ args: |
377
+ tasks/published_smoke.yaml
378
+ --model
379
+ claude-haiku-4-5-20251001
381
380
  env: |
382
381
  ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
383
382
 
@@ -2,6 +2,205 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.11.6 (2026-09-01)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **action**: Drop the literal expression syntax from a run-step comment
10
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
11
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
12
+
13
+ - **action**: Stop the env passthrough mutating the action's own shell
14
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
15
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
16
+
17
+ - **docs**: Drop the last references to inputs that no longer exist
18
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
19
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
20
+
21
+ - **evalboard**: Even out the variant tiles and keep a task's arms adjacent
22
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
23
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
24
+
25
+ - **evalboard**: Resolve a variant-less task link to the task's first arm
26
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
27
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
28
+
29
+ ### Documentation
30
+
31
+ - **action**: Trim the comment bulk on the eight-input surface
32
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
33
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
34
+
35
+ - **evalboard**: Trim variant commentary and redundant tests
36
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
37
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
38
+
39
+ ### Features
40
+
41
+ - **action**: Add working-directory, extras, extra-packages, prerelease and args inputs
42
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
43
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
44
+
45
+ - **action**: Refactor github action input surface around args; harden env passthrough
46
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
47
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
48
+
49
+ - **evalboard**: Register an unlisted gha source for ad-hoc dispatch runs
50
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
51
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
52
+
53
+ - **evalboard**: Render multi-variant runs, one row per (task, arm)
54
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
55
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
56
+
57
+ ### Refactoring
58
+
59
+ - **action**: Drop every forwarding input; flags go through args
60
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
61
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
62
+
63
+ - **evalboard**: Drop the variant colour palette and the spread helper
64
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
65
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
66
+
67
+ - **evalboard**: Report pass rate per arm instead of alongside a blended one
68
+ ([#145](https://github.com/UiPath/coder_eval/pull/145),
69
+ [`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
70
+
71
+ ### Testing
72
+
73
+ - Drop the skip-guard unit test ([#146](https://github.com/UiPath/coder_eval/pull/146),
74
+ [`d679ff2`](https://github.com/UiPath/coder_eval/commit/d679ff2667f2c1e76a5d6384059107be4538c750))
75
+
76
+ - Skip the enforcement live tests when the agent declines to try
77
+ ([#146](https://github.com/UiPath/coder_eval/pull/146),
78
+ [`d679ff2`](https://github.com/UiPath/coder_eval/commit/d679ff2667f2c1e76a5d6384059107be4538c750))
79
+
80
+ - **action**: Record stub argv from bash so Windows argv is byte-exact
81
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
82
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
83
+
84
+ - **action**: Stop Git Bash rewriting the absolute path in the install-spec tests
85
+ ([#147](https://github.com/UiPath/coder_eval/pull/147),
86
+ [`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
87
+
88
+
89
+ ## v0.11.5 (2026-08-28)
90
+
91
+ ### Bug Fixes
92
+
93
+ - **opencode**: Bound the post-EOF reap, reap the whole process group, test every failure path
94
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
95
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
96
+
97
+ - **opencode**: Close the remaining review findings on the harness
98
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
99
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
100
+
101
+ - **opencode**: Gate on captured tokens, canonicalize tool args, pin max_turns
102
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
103
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
104
+
105
+ - **opencode**: Inject plugin skills so skill suites measure the skills
106
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
107
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
108
+
109
+ - **opencode**: Keep the smoke task out of the CI smoke-pass bucket
110
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
111
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
112
+
113
+ - **opencode**: Map apply_patch to Write so GPT-family edits are seen by criteria
114
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
115
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
116
+
117
+ - **opencode**: Reap the CLI on every turn exit, test the sandbox env contract
118
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
119
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
120
+
121
+ - **opencode**: Spread super() in get_environment_info; guard with CE046
122
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
123
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
124
+
125
+ - **opencode**: Typecheck on Windows, satisfy both CodeQL findings
126
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
127
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
128
+
129
+ - **plugin**: Close the review's verified gaps — regex blind spot, parallel surfaces, runtime guard
130
+ ([#143](https://github.com/UiPath/coder_eval/pull/143),
131
+ [`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
132
+
133
+ - **plugin**: Correct the skill-reachability path — every generated activation suite reports recall
134
+ 0.0 ([#143](https://github.com/UiPath/coder_eval/pull/143),
135
+ [`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
136
+
137
+ - **plugin**: Correct the skill-reachability path, and reuse PR #109's measured descriptions
138
+ ([#143](https://github.com/UiPath/coder_eval/pull/143),
139
+ [`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
140
+
141
+ - **routing**: Decouple simulator route from checker_context.api_route
142
+ ([#144](https://github.com/UiPath/coder_eval/pull/144),
143
+ [`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
144
+
145
+ - **routing**: Reinstate litellm+agent_judge rejection guard
146
+ ([#144](https://github.com/UiPath/coder_eval/pull/144),
147
+ [`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
148
+
149
+ - **routing**: Restore LiteLLM->Claude pin on simulator_route
150
+ ([#144](https://github.com/UiPath/coder_eval/pull/144),
151
+ [`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
152
+
153
+ - **test**: Add CE045, document the plugin-path divergence, unpin a test from ordering
154
+ ([#143](https://github.com/UiPath/coder_eval/pull/143),
155
+ [`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
156
+
157
+ - **utils**: Use explicit concatenation in the plugin-root warning
158
+ ([#143](https://github.com/UiPath/coder_eval/pull/143),
159
+ [`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
160
+
161
+ ### Chores
162
+
163
+ - **opencode**: Standardize on deepseek-v4-pro, drop the flash-0731 rate entry
164
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
165
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
166
+
167
+ - **plugin**: Answer "skills only?", fold tags into keywords, add CE044
168
+ ([#141](https://github.com/UiPath/coder_eval/pull/141),
169
+ [`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
170
+
171
+ - **plugin**: Give both author objects the same contact address
172
+ ([#141](https://github.com/UiPath/coder_eval/pull/141),
173
+ [`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
174
+
175
+ - **plugin**: Give the marketplace owner a contact address
176
+ ([#141](https://github.com/UiPath/coder_eval/pull/141),
177
+ [`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
178
+
179
+ - **plugin**: Lead both manifests with skill evaluation, add discovery metadata
180
+ ([#141](https://github.com/UiPath/coder_eval/pull/141),
181
+ [`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
182
+
183
+ - **plugin**: Pin both manifests to their published JSON schemas
184
+ ([#141](https://github.com/UiPath/coder_eval/pull/141),
185
+ [`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
186
+
187
+ ### Documentation
188
+
189
+ - **opencode**: Note _TERM_GRACE_SECONDS's second role as the post-EOF exit grace
190
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
191
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
192
+
193
+ ### Features
194
+
195
+ - **agents**: Add OpenCode harness with opt-in [opencode] extra
196
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
197
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
198
+
199
+ - **opencode**: Add require_token_telemetry, an escape hatch for the zero-token guard
200
+ ([#115](https://github.com/UiPath/coder_eval/pull/115),
201
+ [`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
202
+
203
+
5
204
  ## v0.11.4 (2026-08-27)
6
205
 
7
206
  ### Chores
@@ -144,7 +144,7 @@ action.yml # Published composite GitHub Action (coder-ev
144
144
  - **Sub-agent token accounting**: There is NO separate per-sub-agent field. Every sub-agent generation is captured as a `parent_tool_use_id`-tagged `AssistantMessage` in the turn transcript, so per-sub-agent usage is derived by grouping those messages on that id (the evalboard's `aggregateSubAgentUsage` does exactly this). Claude bubbles its sub-agent's intermediate generations into the parent stream natively, and the **terminal** generation (delivered as the Agent tool result, never streamed) is synthesized into one via `_synthesize_subagent_terminal_message` from `tool_use_result.usage`. Codex reconstructs all child generations from the child rollout (`_recover_subagent_tool_calls`). The turn total already includes sub-agent cost — Claude via the SDK's cumulative `model_usage`; Codex via `_fold_subagent_tokens`, which folds the child messages (their real per-generation tokens) into the parent total. `CommandTelemetry.result_summary` is stored **untruncated** (no 200-char cap) so sub-agent returns are preserved whole. Set `CODER_EVAL_RAW_SDK_LOG=1` to dump every raw SDK event to the task log for inspection.
145
145
  - **Reconciliation message (stream self-reconciles to the turn total)**: The per-message stream consistently under-reports the authoritative turn total — a fixed prompt slice (~512 input tokens on Claude) is billed on no SDK-emitted message, and sub-agent input/cache only partially bubbles up. So `EventCollector.build_turn_record` appends one synthetic `ReconciliationMessage` (`role="reconciliation"`, in the `TranscriptMessage` union) per turn, carrying the per-bucket residual = `token_usage` − Σ(assistant message buckets). The invariant: **summing the four token buckets across `TurnRecord.messages` (assistant + reconciliation) equals `token_usage` exactly**, for both Claude and Codex (Codex's stream is already complete after `_recover_subagent_tool_calls`, so its residual is usually 0 and no entry is emitted). This is what lets the evalboard SUM the message stream as the source of truth instead of reading a separate aggregate ("agent tokens"): `selectTokenTotals` returns the stream sum whenever a reconciliation entry is present, and the timeline renders it as its own row. It is agent-agnostic (booked at the single `EventCollector` seam), carries no cost (cost stays on `token_usage`), and is excluded from generation/turn counts and the cost simulator. The LiteLLM open-weight actual-cost join (`litellm_cost.apply_actual_cost`) deliberately writes cost at the TURN level only (`token_usage.total_cost_usd` = the real OpenRouter bill) plus the per-call `TurnRecord.provider_call_costs` audit record; it does NOT touch the message token buckets, so `EventCollector` stays the single writer and this invariant holds on every backend. The Python `token_usage`/`total_token_usage` aggregate is unchanged and still authoritative for budget/judges/reports.
146
146
  - **Reference solutions are directory-only, and shielded (partially) from the agent**: `task.reference` is a single required `directory:` (relative to the task YAML) — the inline `code:` / single-file `file:` forms are gone, because a directory is the only shape that can be permission-gated as a unit; a `model_validator(mode="before")` gives the removed forms a migration error. The orchestrator stages a **per-run private copy** (`orchestration/evaluation.py::stage_reference_dir`, symlinks stripped) into a tempdir, removed in `_cleanup` via `path_utils.rmtree_restrictive` (keyed on `_reference_staging_root`, recorded BEFORE the copy so a failed copy still cleans up; `rmtree(ignore_errors=True)` silently declines on a tree left at 000) and deliberately never preserved into `run_dir/artifacts`. That copy is held at mode `000` for the whole of every `agent.communicate` call via **`Sandbox.set_permissions`**, the driver-aware wrapper over `fs_permissions.py::set_permissions`. Windows **stack**: exiting restores the *enclosing* window's mode, only the outermost exit restores the pre-window mode — that is what makes a mid-turn re-grant (`mode=READ_ONLY_MODE`) expressible, and it covers two windows at the same mode so no refcount is needed. The window is enforced **only inside a docker container** (`Sandbox.enforces_permission_windows`) and is a no-op on the host, where the agent shares our uid. **That gate keys on the `CODER_EVAL_IN_CONTAINER` env var, NOT `sandbox.driver`** — `run_task_internal_command` rewrites `driver: docker` → `tempdir` before building the in-container Orchestrator, so a driver-based gate would silently disable the anti-cheat on exactly the path that needs it (regression-guarded by `TestSandboxDriverGate`); `resolve_reference_dir` gates its `/work/references` branch on the same var for the same reason. The task directory is **not** shielded (`:ro` mount → EROFS, and the same YAML is readable at `/work/input`). Criteria address reference files with the `$REFERENCE_DIR` token (same resolver as `$TASK_DIR`) and the `REFERENCE_DIR` env var for `run_command`; `reference_comparison` names one file via `reference_file`. Docker mounts a throwaway **read-write** copy at `/work/references` (a `:ro` mount cannot be chmod'd — EROFS), masks the in-task-dir original with an empty tmpfs, and drops `DAC_OVERRIDE`/`DAC_READ_SEARCH`. `FOWNER`/`CHOWN` are deliberately **NOT** dropped: the in-container orchestrator that applies the window is the same root process with the same caps, so dropping `FOWNER` breaks *the harness's own* chmod wherever the bind mount preserves a non-root owner (native Linux — verified: `chmod: Operation not permitted`), i.e. exactly where the drop would otherwise bite. A window that cannot be applied is now a hard error, not a warning: `Sandbox.set_permissions` passes `strict=True` whenever it enforces, so an unprotected run fails instead of producing a normal-looking score. **KNOWN GAP — this is defense-in-depth, not a boundary**: (a) `chmod(2)` is gated on owner-or-`CAP_FOWNER` and the container runs as root owning the copy, so a deliberate `chmod 755 /work/references` restores access; (b) the window spans `agent.communicate` only, and nothing reaps agent child processes at turn end, so a backgrounded read loop succeeds once the window closes. The **write** half of (b) is closed — `path_utils.digest_tree` hashes the tree at staging and `Orchestrator._verify_reference_integrity` re-checks before grading, raising `ReferenceTamperedError` (→ `FinalStatus.ERROR`) on a mismatch so an agent cannot overwrite the reference to drive `reference_comparison` to 1.0. Passive reads are blocked; an adversarial agent is not. Full containment requires running the agent as a non-root uid AND holding the window for the agent's whole lifetime — follow-up. `tasks/anti_cheat_reference` probes the passive-read half.
147
- - **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same thing on every backend, so a divergence is either fixed or documented — never silent. **`run_limits.max_turns` on Codex/Antigravity counts VISIBLE turns** (resolved tool calls, read live off the shared `EventCollector.visible_turn_count`, the same list `TurnRecord.commands` holds) because one `communicate()` is a single SDK turn on both, so a native counter would clamp at 1; claude-code keeps its native SDK cap, whose unit (an agent-loop turn) absorbs arbitrarily many parallel calls — the same number is NOT the same budget across harnesses. The cap is enforced on the same loop boundary as the cooperative early stop and finalizes cleanly as `max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in `_drain()`, so the background-work poll loop honors it too. Known unfixed divergences: `permission_mode` on Codex and Antigravity (both run unconfined — the sandbox driver is the isolation boundary), `disallowed_tools` on Codex (forwarded, not SDK-enforced), `allowed_tools`/`disallowed_tools` on Antigravity (not read at all), and `turn_timeout` on Antigravity (bounded by an earlier internal poll deadline at 80% of it). Full table + rationale: docs/agents/HARNESS_PARITY.md.
147
+ - **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same thing on every backend, so a divergence is either fixed or documented — never silent. **`run_limits.max_turns` on Codex/Antigravity counts VISIBLE turns** (resolved tool calls, read live off the shared `EventCollector.visible_turn_count`, the same list `TurnRecord.commands` holds) because one `communicate()` is a single SDK turn on both, so a native counter would clamp at 1; claude-code keeps its native SDK cap, whose unit (an agent-loop turn) absorbs arbitrarily many parallel calls — the same number is NOT the same budget across harnesses. OpenCode likewise keeps a native unit — the CLI streams a real multi-step loop per `communicate()` (`step_start`/`step_finish`), so `max_turns: N` allows N complete steps and cuts cleanly when step N+1 begins. The cap is enforced on the same loop boundary as the cooperative early stop and finalizes cleanly as `max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in `_drain()`, so the background-work poll loop honors it too. Known unfixed divergences: `permission_mode` on Codex and Antigravity (both run unconfined — the sandbox driver is the isolation boundary), `disallowed_tools` on Codex (forwarded, not SDK-enforced), `allowed_tools`/`disallowed_tools` on Antigravity (not read at all), `turn_timeout` on Antigravity (bounded by an earlier internal poll deadline at 80% of it), `allowed_tools`/`disallowed_tools`/`system_prompt` on OpenCode (no CLI knob; warned at `start()`, not enforced), and **`agent.plugins[].path` depth** — claude-code REQUIRES a plugin root holding `skills/` and silently loads NOTHING from a bare skills directory, while Codex and Antigravity scan both depths and accept either. That is the costly direction: the wrong depth produces no error, every positive row of an activation suite scores 0, and the suite reports recall 0.0, which reads exactly like a skill that never triggers. Held to the plugin-root shape (for `SKILL_SOURCE_PATH` only) by lint rule CE045. `plugins` on OpenCode is **honored for skills**: each local plugin root is mapped to the `skills` dir its `.claude-plugin/plugin.json` declares (default `<root>/skills`, never the root itself — `skills.paths` is scanned recursively and a plugin root can hold a self-referential symlink) and injected via `OPENCODE_CONFIG_CONTENT`, which `--pure` does not suppress; a plugin's agents/hooks/commands/MCP servers are still dropped. Full table + rationale: docs/agents/HARNESS_PARITY.md.
148
148
  - **sandbox isolation**: Tasks that don't need MCP servers should set `setting_sources: []` in their `agent:` block to isolate the sandbox from the host project's CLAUDE.md and settings. Without this, the host project's CLAUDE.md (often 20 KB+) is injected into every API call, inflating cache-creation tokens and cost significantly.
149
149
  - **Run-time caps (non-criterion enforcement)**: `TaskDefinition.run_limits` (`RunLimits` model) is the single namespace for all *task-level* run-time caps — `max_turns` / `task_timeout` / `turn_timeout` (structural) and `max_input_tokens` / `max_output_tokens` / `max_total_tokens` / `max_usd` (cumulative budget). Token/USD breaches abort with `FinalStatus.TOKEN_BUDGET_EXCEEDED` or `COST_BUDGET_EXCEEDED` (both `category == "failed"`). Structural caps are set from the CLI via `-D run_limits.max_turns=…` / `-D run_limits.task_timeout=…` / `-D run_limits.turn_timeout=…` (field-merged into `run_limits`); budget caps via `-D run_limits.max_usd=…` etc. or YAML. Layered config uses field-merge — a variant block overrides individual keys without replacing the task's block. The one *per-criterion* cap, `stop_early.decide_within`, deliberately lives on `LiveSuccessCriterion` instead (see below) — the watcher must attribute a decision-step timeout to a specific criterion, which `RunLimits` (task-scoped, criterion-agnostic) cannot express.
150
150
  - **Early stop on criterion (opt-in, per-criterion arming)**: a `stop_early:` block (`StopEarlyPolicy`) on a criterion ends a single-shot run early once the run's **armed** criteria decide the outcome, so a raised `max_turns` isn't wasted on the smoke flavor. The block's PRESENCE is the arming and alone activates the watcher — there is **no run-level master switch**: `run_limits.stop_early: false` is the run-level KILL SWITCH that force-disarms every block (the one-line experiment-variant/`-D` override for an authoritative full run), and `run_limits.stop_early: true` (the removed master arm) is a hard `EarlyStopConfigError` at resolution. The block exists on `LiveSuccessCriterion` only (currently `skill_triggered`, `command_executed` — so arming an unobservable criterion is unrepresentable, a pydantic extra-forbid error). Arming carries one implicit trigger (a native live-fail may fail-stop the run); its keys refine it: `on_pass: stop` (pass-stop the moment the criterion live-passes; default `continue` just latches) and `decide_within: N` (still undecided after N tool-call steps latches an **effective fail**, fed through the same fail-stop rule, reported as `decision_budget_exceeded` — an ordinary weighted fail, NOT a gate-bypassing force-fail; cumulative across retry attempts of the same turn). A trigger whose polarity the instance can't decide (per the abstract, checker-independent `live_decidable_polarities()`, a pure function of the criterion's own fields, paired with the checker's `live_verdict` override by lint rule CE025, a registry-based whole-tree check) is **inert by design** — one dataset-fanned YAML line serves both positive rows (pass/timeout live) and distractor rows (fail live). Verdicts **latch**: once a criterion decides, its `live_verdict` is never polled again. Stop rule is weighted, not strict-boolean: `run_limits.stop_early_gate_threshold` (default `1.0`, reproducing strict-AND behavior exactly) is the minimum weighted score (`Σ weight·score / Σ weight` over the armed subset) required to pass; a fail-stop fires once the armed set's **ceiling** (best case for everything still undecided) can no longer reach the threshold — so a low-weight fail or timeout that can't doom the gate is absorbed and the run continues — and is **deferred while any pass-capable armed criterion is undecided** (a distractor misfire never truncates a positive row's recall signal); a pass-stop fires once the `on_pass: stop` subset's **floor** (worst case) already meets the threshold, and is symmetrically **deferred while any pass-capable armed criterion outside the `on_pass: stop` subset is undecided** (so an early pass never freezes a sibling `on_pass: continue` criterion's signal out of the trajectory). A fail-stop is therefore verdict-preserving; a pass-stop can miss a *later* distractor misfire, so authoritative P/R/F1 comes from a kill-switched (`stop_early: false`) run. Driven by `orchestration/early_stop.py::EarlyStopWatcher` (built when `early_stop_active(task)`: ≥1 armed criterion, kill switch not thrown) through the agent's cooperative `should_stop` seam (tool-call granularity, no SIGKILL); live verdicts only *trigger* the stop — the standard `check_all_async` on the frozen trajectory is authoritative. Gating is **FIRED-ONLY**: a run the watcher actually cut gates on the **armed subset** via the weighted `EvaluationResult.armed_criteria_passed`; a run that completes naturally — armed or not — gates strict-AND via `all_criteria_passed`, so adding a block never changes the verdict of a run it didn't cut. Note the gate keys on the watcher having FIRED (`result.early_stop is not None`), not on confirmed truncation — an agent that ignores `should_stop`, or a stop firing on the final message, still gates armed-only. Every resolution-time guardrail violation is a hard error at resolution (plan *and* run); the one load-time case — a `stop_early:` block on a non-live criterion — is a pydantic schema error at task load, which the run surface reports as a skipped task like any other malformed task. A runtime verdict bug **fails open** to a full run. Surfaces: `EarlyStopInfo` (incl. `gate_threshold` at stop time), report notes/badges, `stopped_early` run.json rows, `EarlyStopped`/`EarlyStopReason` telemetry dims. Worked rationale: docs/TASK_DEFINITION_GUIDE.md § `stop_early`. No blocks anywhere ⇒ behavior byte-for-byte unchanged.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.11.4
3
+ Version: 0.11.6
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity) with sandboxed, reproducible YAML task suites.
5
5
  Project-URL: Homepage, https://coder-eval.com
6
6
  Project-URL: Repository, https://github.com/UiPath/coder_eval
@@ -60,6 +60,7 @@ Requires-Dist: pytest>=9.0.2; extra == 'dev'
60
60
  Requires-Dist: ruff>=0.15.7; extra == 'dev'
61
61
  Provides-Extra: litellm
62
62
  Requires-Dist: litellm<2.0.0,>=1.95.0; extra == 'litellm'
63
+ Provides-Extra: opencode
63
64
  Provides-Extra: uipath
64
65
  Requires-Dist: uipath>=2.10.31; extra == 'uipath'
65
66
  Description-Content-Type: text/markdown
@@ -77,14 +78,14 @@ Description-Content-Type: text/markdown
77
78
  **Coder Eval** (`pip install coder-eval` / `uv tool install coder-eval`) is an open-source framework for
78
79
  **evaluating and benchmarking AI coding agents and their skills** — built for CLI
79
80
  and skill builders — with sandboxing, reproducibility, and data-driven analysis.
80
- It runs a real agent (**Claude Code**, **Codex**, or **Google Antigravity /
81
- Gemini**) in a sandbox against declarative YAML tasks, then scores the files and
81
+ It runs a real agent (**Claude Code**, **Codex**, **Google Antigravity /
82
+ Gemini**, or **OpenCode**) in a sandbox against declarative YAML tasks, then scores the files and
82
83
  commands it actually produced. Not an "agentic coding" benchmark: it measures how
83
84
  effective your CLI and skills are when used by coding agents.
84
85
 
85
86
  Reach for it when you want to **test whether a Claude Code skill triggers**,
86
- **A/B-test Claude Code vs. Codex vs. Gemini** (or model vs. model, prompt vs.
87
- prompt), or **gate CI on coding-agent quality**. Unlike fixed datasets (SWE-bench,
87
+ **A/B-test Claude Code vs. Codex vs. Gemini vs. OpenCode** (or model vs. model,
88
+ prompt vs. prompt), or **gate CI on coding-agent quality**. Unlike fixed datasets (SWE-bench,
88
89
  SkillsBench) that rank models on a shared leaderboard, Coder Eval evaluates the
89
90
  tasks, skills, and workflows *you* ship — with weighted 0.0–1.0 criteria, a
90
91
  `skill_triggered` activation check, an A/B experiment layer, and per-tool cost
@@ -99,14 +100,14 @@ telemetry. See [How it compares](https://coder-eval.com/docs/comparison).
99
100
  - **Sandboxed execution** in isolated environments with resource limits
100
101
  - **Weighted, continuous scoring** (0.0–1.0) with fractional credit and thresholds
101
102
  - **Many criterion types** — from file checks to code similarity and LLM-graded rubrics
102
- - **Agent abstraction** — Claude Code, Codex, and Antigravity (Gemini) today, extensible via a plugin SPI
103
+ - **Agent abstraction** — Claude Code, Codex, Antigravity (Gemini), and OpenCode today, extensible via a plugin SPI
103
104
  - **Experiment layer** — A/B agent configs (models, tools, prompts) side-by-side
104
105
  - **Full telemetry** — every tool call, token counts, and cost, with real-time streaming
105
106
 
106
107
  ## What you can do with it
107
108
 
108
109
  - **Benchmark coding agents** — score an agent across a suite of tasks with weighted scoring and pass/fail thresholds
109
- - **Compare models & configs** — A/B-test Claude vs. Codex vs. Gemini, model vs. model, tool-on vs. tool-off, prompt vs. prompt
110
+ - **Compare models & configs** — A/B-test Claude vs. Codex vs. Gemini vs. OpenCode, model vs. model, tool-on vs. tool-off, prompt vs. prompt
110
111
  - **Evaluate skills** — verify an agent actually engages a target skill (`skill_triggered`) and score skill-driven suites (SkillsBench-style)
111
112
  - **Keep skills up to date in CI** — re-validate your skills on every change or on a schedule; catch silent regressions when models, prompts, or the skills themselves drift
112
113
  - **Gate CI on agent quality** — run the suite in GitHub Actions and fail the build on regressions
@@ -183,8 +184,8 @@ That adds six slash commands: `/coder-eval:init`, `/coder-eval:check-skill`,
183
184
  A composite action — on the Marketplace as
184
185
  [**coder_eval**](https://github.com/marketplace/actions/coder_eval) — runs
185
186
  `coder-eval` as a CI gate. It installs the pinned CLI, runs your tasks, writes a
186
- JUnit XML report, appends `run.md` to the job summary, and fails the step on any
187
- task/gate failure:
187
+ JUnit XML report, reports where its artifacts landed, and fails the step on any
188
+ task failure:
188
189
 
189
190
  ```yaml
190
191
  - uses: actions/setup-node@v4 # the claude-code agent needs the Claude CLI…
@@ -192,35 +193,45 @@ task/gate failure:
192
193
  - run: npm install -g @anthropic-ai/claude-code
193
194
 
194
195
  - uses: UiPath/coder_eval@v0 # …then run the gate (@v1 once 1.0.0 ships; @vX.Y.Z pins exactly)
196
+ id: eval
195
197
  with:
196
- tasks: tests/tasks/*.yaml tests/tasks/*/*.yaml
197
- model: claude-sonnet-5
198
+ args: |
199
+ tests/tasks/**/*.yaml
200
+ --model
201
+ claude-sonnet-5
198
202
  env: |
199
203
  ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
200
204
  ```
201
205
 
206
+ Eight inputs, and **none of them is a `coder-eval run` flag**. The CLI has 21;
207
+ GitHub silently ignores an input the referenced tag does not define, so a
208
+ forwarding input that is mistyped or newer than your pin yields a run that
209
+ measured something else and still exits 0. A wrong CLI flag is a hard error. So
210
+ flags and task globs all go through `args`, and an input exists only where the
211
+ action does something with the value besides pass it along.
212
+
202
213
  | Input | Default | Purpose |
203
214
  | --- | --- | --- |
204
- | `tasks` | *(all `tasks/`)* | Task YAML path(s)/glob |
205
- | `tags` | — | `--tags` filter |
206
- | `model` | — | `--model` override |
207
- | `extra-args` | — | Verbatim extra args (`--experiment`, `-D …`, …) |
215
+ | `args` | | Task paths/globs and every flag for `coder-eval run`, one argument per line, verbatim |
208
216
  | `version` | pinned release | PyPI version, or `local` to install from the checkout |
209
- | `run-dir` | `runs/ci` | Run directory |
210
- | `junit-path` | `coder-eval-junit.xml` | Where to write the JUnit report |
211
- | `step-summary` | `true` | Append `run.md` to the job summary |
217
+ | `extras` | | coder-eval extras, composed into the install requirement (`codex`, `antigravity,litellm`) |
218
+ | `extra-packages` | — | Extra requirements installed into coder-eval's environment (`--with`), one per line |
219
+ | `install-flags` | | Flags for `uv tool install`, one per line (`--prerelease=allow`, `--extra-index-url …`) |
212
220
  | `env` | — | Credentials/backend passthrough: newline-separated `NAME=VALUE` pairs, exported for the run step only |
213
- | `minimum-task-score` | *(off)* | Strict floor (0.0–1.0): fail the step if any task's `weighted_score` is below it |
221
+ | `working-directory` | `.` | Directory every step of the action runs in |
222
+ | `run-dir` | `runs/ci` | Run directory; also where the reports are written |
214
223
 
215
- Outputs: `run-dir` and `junit-path`. Feed the JUnit file to your platform's
216
- test-report renderer e.g. on GitHub Actions with
217
- [`mikepenz/action-junit-report`](https://github.com/mikepenz/action-junit-report):
224
+ Outputs: `run-dir`, `junit-path` (`<run-dir>/junit.xml`) and `run-md-path`
225
+ (`<run-dir>/run.md`). The action writes nothing to the job summary — a consumer
226
+ that has to redact the report first cannot undo a write that already happened:
218
227
 
219
228
  ```yaml
229
+ - if: always()
230
+ run: cat "${{ steps.eval.outputs.run-md-path }}" >> "$GITHUB_STEP_SUMMARY"
220
231
  - uses: mikepenz/action-junit-report@v5
221
232
  if: always()
222
233
  with:
223
- report_paths: coder-eval-junit.xml
234
+ report_paths: ${{ steps.eval.outputs.junit-path }}
224
235
  ```
225
236
 
226
237
  **Credentials and backend config** are the sole responsibility of `env` — a
@@ -230,17 +241,13 @@ it can't leak into later steps). Set whatever the run needs, Anthropic or not:
230
241
  ```yaml
231
242
  - uses: UiPath/coder_eval@v0
232
243
  with:
233
- tasks: tests/tasks/*.yaml tests/tasks/*/*.yaml
234
- minimum-task-score: "0.8" # fail the build if any task scores below 0.8
244
+ args: tests/tasks/**/*.yaml
235
245
  env: |
236
246
  API_BACKEND=bedrock
237
247
  AWS_BEARER_TOKEN_BEDROCK=${{ secrets.BEDROCK_TOKEN }}
238
248
  ```
239
249
 
240
- `minimum-task-score` is a strict floor **on top of** coder-eval's own exit
241
- code: the step fails if *either* coder-eval exits non-zero *or* any task's
242
- `weighted_score` falls below the floor. Leave it unset to gate on the exit code
243
- alone.
250
+ The step's exit code is coder-eval's own: non-zero on any failed task.
244
251
 
245
252
  > **Agent runtime is the caller's responsibility.** The action is agent-agnostic —
246
253
  > it installs `coder-eval` but no coding-agent runtime, which is why the example
@@ -275,12 +282,13 @@ alone.
275
282
  | [Claude Code](docs/agents/CLAUDE_CODE.md) | Configuring and running the default Claude Code agent |
276
283
  | [Codex](docs/agents/CODEX.md) | Running the OpenAI Codex agent |
277
284
  | [Antigravity (Gemini)](docs/agents/ANTIGRAVITY.md) | Running the Google Antigravity / Gemini agent |
285
+ | [OpenCode](docs/agents/OPENCODE.md) | Running the OpenCode agent on open-weight models |
278
286
  | [Run-Limit Parity](docs/agents/HARNESS_PARITY.md) | What each run_limits field means on every harness |
279
287
  | [A/B Experiments](docs/AB_EXPERIMENTS.md) | Compare models / tools / prompts across the same tasks |
280
288
  | [Bring Your Own Dataset](docs/DATASETS.md) | Fan a single task out over a dataset |
281
289
  | [Dialog Mode](docs/DIALOG_MODE.md) | Evaluate agents in multi-turn conversation via a simulated user |
282
290
  | [Docker Isolation](docs/DOCKER_ISOLATION.md) | The container sandbox driver, with custom images |
283
- | [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output, score floor |
291
+ | [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output, run reports |
284
292
  | [Claude Code Plugin](docs/PLUGIN.md) | Install the Claude Code plugin — author, run, and analyze suites from inside the agent |
285
293
  | [Extending Coder Eval](docs/EXTENDING.md) | Author a custom agent, criterion, or model pricing via the plugin SPI |
286
294
  | [Report Schema](docs/REPORT_SCHEMA.md) | Field-level reference for run.json / variant.json / task.json |