coder-eval 0.9.5__tar.gz → 0.9.6__tar.gz

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