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