coder-eval 0.9.4__tar.gz → 0.9.5__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.9.4 → coder_eval-0.9.5}/.claude/harness-candidates.md +20 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/CHANGELOG.md +93 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/CLAUDE.md +7 -6
- {coder_eval-0.9.4 → coder_eval-0.9.5}/PKG-INFO +18 -10
- {coder_eval-0.9.4 → coder_eval-0.9.5}/README.md +17 -9
- {coder_eval-0.9.4 → coder_eval-0.9.5}/action.yml +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/AB_EXPERIMENTS.md +7 -7
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/CI_GATE.md +23 -13
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/DIALOG_MODE.md +4 -3
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/EXTENDING.md +2 -2
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/REPORT_SCHEMA.md +3 -2
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/TASK_DEFINITION_GUIDE.md +259 -102
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/agents/CLAUDE_CODE.md +4 -3
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/index.md +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/llms.txt +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/02-ci-pipeline.md +4 -2
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/04-writing-a-task.md +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/package.json +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/pnpm-lock.yaml +42 -75
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/early-stop-ab.yaml +8 -8
- {coder_eval-0.9.4 → coder_eval-0.9.5}/mkdocs.yml +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/pyproject.toml +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/plan_command.py +1 -1
- coder_eval-0.9.5/src/coder_eval/criteria/cli_called.py +291 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/command_executed.py +144 -13
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/__init__.py +8 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/criteria.py +404 -78
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/limits.py +49 -32
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/results.py +20 -17
- coder_eval-0.9.5/src/coder_eval/orchestration/early_stop.py +713 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/experiment.py +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestrator.py +49 -64
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/reports.py +37 -9
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/reports_experiment.py +1 -1
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/reports_html.py +5 -8
- coder_eval-0.9.5/tasks/early_stop_decision_budget_exceeded.yaml +43 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/early_stop_weighted_high_weight_kills_run.yaml +14 -14
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/early_stop_weighted_low_weight_absorbed.yaml +17 -16
- coder_eval-0.9.5/tests/lint/action_docs.py +232 -0
- coder_eval-0.9.5/tests/test_cli_called_criterion.py +698 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_command_executed.py +354 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_custom_lint.py +163 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_early_stop.py +911 -342
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_success_criterion_union.py +1 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_threshold_enforcement.py +3 -2
- {coder_eval-0.9.4 → coder_eval-0.9.5}/uv.lock +1 -1
- coder_eval-0.9.4/src/coder_eval/orchestration/early_stop.py +0 -614
- coder_eval-0.9.4/tasks/early_stop_decision_budget_exceeded.yaml +0 -40
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-run-analysis.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/commands/coder-eval-task-create.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/shared/axes.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.env.example +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/CODEOWNERS +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/code_review.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/dependabot.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/pr-checks.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.github/workflows/release.yml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.gitignore +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/.python-version +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/ADOPTERS.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/CONTRIBUTING.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/LICENSE +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/Makefile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/NOTICE +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/SECURITY.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docker/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/DATASETS.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/DOCKER_ISOLATION.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/USER_GUIDE.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/agents/CODEX.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/assets/hero.gif +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/comparison.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/06-use-docker-isolation.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/docs/tutorials/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/.gitignore +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/globals.css +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/icon.png +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/default.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/litellm/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/litellm/cost_logger.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/osv-scanner.toml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/claude_code_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/codex_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/aggregate_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/isolation/docker_runner.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/agent_config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/enums.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/tasks.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/pricing.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/reports_junit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/reports_stats.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tasks/token_check.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/_path_helpers.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/conftest.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/runner.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/lint/violation.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_agentless.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_aggregate.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_classification_match.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_codex_agent.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_error_handling.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_evaluator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_event_collector.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_file_check.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_formatting.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_integration.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_json_check.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_logging.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_mutations.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_parallel.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_path_utils.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_plan_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_plugins.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_post_run.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_pre_run.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reference_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reference_orchestrator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_registry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_release_notes.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_report_command.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports_experiment.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports_html.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports_stats.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_reports_stats_nonfinite.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_resume.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_route_seam_exhaustiveness.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_routing.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_scorers.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_summaries.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_tags.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_telemetry.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_token_usage.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_utils.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_watchdog.py +0 -0
- {coder_eval-0.9.4 → coder_eval-0.9.5}/tests/test_yaml_migration.py +0 -0
|
@@ -107,3 +107,23 @@ Deferred lint/test guardrails surfaced during reviews. Promote to a `CExxx` rule
|
|
|
107
107
|
caught them. The cleanup plan explicitly deferred this as YAGNI for the
|
|
108
108
|
one-time purge, but any future doc rename/deletion re-opens the same blind
|
|
109
109
|
spot — caught in the 2026-07-03 open-source-docs-cleanup implementation run.
|
|
110
|
+
|
|
111
|
+
## From PR #77 (command-executed shell-normalize) — CE030-to-criteria deferred
|
|
112
|
+
|
|
113
|
+
- [ ] **Extend CE030 doc/schema-parity to the `SuccessCriterion` union** so a new
|
|
114
|
+
criterion (or field) can't ship undocumented. Attempted in PR #77 and reverted:
|
|
115
|
+
CI installs `--extra uipath`, and in that environment `coder_eval.models.criteria`
|
|
116
|
+
gains a `CliCalledCriterion` (fields `log`/`positional`) that is NOT present in a
|
|
117
|
+
plain checkout (it did not reproduce on macOS, whose lockfile resolution omits the
|
|
118
|
+
contributing linux-only component). It defeated every discriminator tried — union
|
|
119
|
+
membership, a `__module__` string filter (it is spoofed to `coder_eval.models.criteria`),
|
|
120
|
+
a genuine-module-attribute scan (it is `setattr` onto the module), and even an AST
|
|
121
|
+
parse of the `SuccessCriterion` union literal in `criteria.py` source (CI's imported
|
|
122
|
+
criteria module resolves to a file whose union literal already contains it). No
|
|
123
|
+
runtime OR source signal available in the lint could separate the injected criterion
|
|
124
|
+
from an in-tree one. Revisit only with a way to identify the in-tree criterion set that
|
|
125
|
+
is provably immune to the uipath integration — e.g. a hardcoded name allowlist of the
|
|
126
|
+
in-tree criteria (losing auto-coverage of new ones), or first understanding exactly how
|
|
127
|
+
that environment injects the criterion. Until then CE030 stays scoped to the four
|
|
128
|
+
top-level models; the `command_pattern`/`exclude_pattern` contract this PR changed is
|
|
129
|
+
documented in the Field descriptions and TASK_DEFINITION_GUIDE regardless.
|
|
@@ -2,6 +2,99 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.9.5 (2026-08-05)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **command-executed**: Keep whole argv-joined payload in shell unwrap
|
|
10
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
11
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
12
|
+
|
|
13
|
+
- **command-executed**: Match patterns against shell-normalized commands
|
|
14
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
15
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
16
|
+
|
|
17
|
+
- **command-executed**: Narrow command param to str before shell-normalizing
|
|
18
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
19
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
20
|
+
|
|
21
|
+
- **command-executed**: Recognize shell wrappers by predicate, not allowlist
|
|
22
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
23
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
24
|
+
|
|
25
|
+
- **criteria**: Add present predicate so asserting a switch cannot weaken a guard
|
|
26
|
+
([#72](https://github.com/UiPath/coder_eval/pull/72),
|
|
27
|
+
[`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
|
|
28
|
+
|
|
29
|
+
- **criteria**: Make cli_called guards fail loud instead of vacuously passing
|
|
30
|
+
([#72](https://github.com/UiPath/coder_eval/pull/72),
|
|
31
|
+
[`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
|
|
32
|
+
|
|
33
|
+
- **criteria**: Stop ignore_flags re-opening the guard false-PASS
|
|
34
|
+
([#72](https://github.com/UiPath/coder_eval/pull/72),
|
|
35
|
+
[`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
|
|
36
|
+
|
|
37
|
+
- **early-stop**: Address PR review — trajectory parity, reason determinism, doc restore
|
|
38
|
+
([#78](https://github.com/UiPath/coder_eval/pull/78),
|
|
39
|
+
[`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
|
|
40
|
+
|
|
41
|
+
- **lint**: Derive CE030 criteria from the source union literal, not runtime
|
|
42
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
43
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
44
|
+
|
|
45
|
+
- **lint**: Enumerate in-tree criteria by module attribute, not the union
|
|
46
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
47
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
48
|
+
|
|
49
|
+
- **lint**: Scope CE030 criterion parity to in-tree criteria only
|
|
50
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
51
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
52
|
+
|
|
53
|
+
- **reports**: Explicit return on every early_stop_gate_note path (CodeQL py/mixed-returns)
|
|
54
|
+
([#78](https://github.com/UiPath/coder_eval/pull/78),
|
|
55
|
+
[`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
|
|
56
|
+
|
|
57
|
+
- **reports**: Pre-initialize the gate note so CodeQL sees it bound on every path
|
|
58
|
+
([#78](https://github.com/UiPath/coder_eval/pull/78),
|
|
59
|
+
[`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
|
|
60
|
+
|
|
61
|
+
### Chores
|
|
62
|
+
|
|
63
|
+
- **deps-dev**: Bump postcss from 8.5.18 to 8.5.23 in /evalboard
|
|
64
|
+
([#75](https://github.com/UiPath/coder_eval/pull/75),
|
|
65
|
+
[`cdced15`](https://github.com/UiPath/coder_eval/commit/cdced152dea732096dcff939c45e7d7c927c2a5a))
|
|
66
|
+
|
|
67
|
+
### Documentation
|
|
68
|
+
|
|
69
|
+
- Surface the Marketplace listing and make the Action quickstarts self-sufficient
|
|
70
|
+
([#80](https://github.com/UiPath/coder_eval/pull/80),
|
|
71
|
+
[`401245a`](https://github.com/UiPath/coder_eval/commit/401245ad14055c1da5d7b594e506686c59cedce7))
|
|
72
|
+
|
|
73
|
+
- **command-executed**: Document shell-normalization contract + gate it (CE030)
|
|
74
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
75
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
76
|
+
|
|
77
|
+
### Features
|
|
78
|
+
|
|
79
|
+
- **criteria**: Add cli_called for structured invocation matching
|
|
80
|
+
([#72](https://github.com/UiPath/coder_eval/pull/72),
|
|
81
|
+
[`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
|
|
82
|
+
|
|
83
|
+
- **criteria**: Match a flag across spellings with FlagMatch.aliases
|
|
84
|
+
([#72](https://github.com/UiPath/coder_eval/pull/72),
|
|
85
|
+
[`8574ded`](https://github.com/UiPath/coder_eval/commit/8574dedb02d6e9ab883b042934f89297591e8abd))
|
|
86
|
+
|
|
87
|
+
- **early-stop**: Per-criterion arming via stop_early blocks on live criteria
|
|
88
|
+
([#78](https://github.com/UiPath/coder_eval/pull/78),
|
|
89
|
+
[`4cf8092`](https://github.com/UiPath/coder_eval/commit/4cf80920422e25fec663ef93e483902bdeffad24))
|
|
90
|
+
|
|
91
|
+
### Refactoring
|
|
92
|
+
|
|
93
|
+
- **command-executed**: Total _match_haystacks, shared window, memoized
|
|
94
|
+
([#77](https://github.com/UiPath/coder_eval/pull/77),
|
|
95
|
+
[`7abd080`](https://github.com/UiPath/coder_eval/commit/7abd08098146067890e16740c37239c2e0009a24))
|
|
96
|
+
|
|
97
|
+
|
|
5
98
|
## v0.9.4 (2026-08-04)
|
|
6
99
|
|
|
7
100
|
### Bug Fixes
|
|
@@ -34,7 +34,7 @@ coder_eval/
|
|
|
34
34
|
├── models/ # Pydantic data models (subpackage)
|
|
35
35
|
│ ├── __init__.py # Unified exports for all models
|
|
36
36
|
│ ├── enums.py # AgentKind, AgentState, FinalStatus, ApiBackend
|
|
37
|
-
│ ├── criteria.py #
|
|
37
|
+
│ ├── criteria.py # 15 success criterion types + base + union
|
|
38
38
|
│ ├── experiment.py # ExperimentDefinition, ExperimentVariant, ResolvedTask, result models
|
|
39
39
|
│ ├── judge_defaults.py # DEFAULT_JUDGE_MODEL constant (cycle-free leaf)
|
|
40
40
|
│ ├── mutations.py # PromptMutation variants (prefix/suffix/replace/template)
|
|
@@ -141,10 +141,10 @@ action.yml # Published composite GitHub Action (coder-ev
|
|
|
141
141
|
- **Sub-agent token accounting**: There is NO separate per-sub-agent field. Every sub-agent generation is captured as a `parent_tool_use_id`-tagged `AssistantMessage` in the turn transcript, so per-sub-agent usage is derived by grouping those messages on that id (the evalboard's `aggregateSubAgentUsage` does exactly this). Claude bubbles its sub-agent's intermediate generations into the parent stream natively, and the **terminal** generation (delivered as the Agent tool result, never streamed) is synthesized into one via `_synthesize_subagent_terminal_message` from `tool_use_result.usage`. Codex reconstructs all child generations from the child rollout (`_recover_subagent_tool_calls`). The turn total already includes sub-agent cost — Claude via the SDK's cumulative `model_usage`; Codex via `_fold_subagent_tokens`, which folds the child messages (their real per-generation tokens) into the parent total. `CommandTelemetry.result_summary` is stored **untruncated** (no 200-char cap) so sub-agent returns are preserved whole. Set `CODER_EVAL_RAW_SDK_LOG=1` to dump every raw SDK event to the task log for inspection.
|
|
142
142
|
- **Reconciliation message (stream self-reconciles to the turn total)**: The per-message stream consistently under-reports the authoritative turn total — a fixed prompt slice (~512 input tokens on Claude) is billed on no SDK-emitted message, and sub-agent input/cache only partially bubbles up. So `EventCollector.build_turn_record` appends one synthetic `ReconciliationMessage` (`role="reconciliation"`, in the `TranscriptMessage` union) per turn, carrying the per-bucket residual = `token_usage` − Σ(assistant message buckets). The invariant: **summing the four token buckets across `TurnRecord.messages` (assistant + reconciliation) equals `token_usage` exactly**, for both Claude and Codex (Codex's stream is already complete after `_recover_subagent_tool_calls`, so its residual is usually 0 and no entry is emitted). This is what lets the evalboard SUM the message stream as the source of truth instead of reading a separate aggregate ("agent tokens"): `selectTokenTotals` returns the stream sum whenever a reconciliation entry is present, and the timeline renders it as its own row. It is agent-agnostic (booked at the single `EventCollector` seam), carries no cost (cost stays on `token_usage`), and is excluded from generation/turn counts and the cost simulator. The LiteLLM open-weight actual-cost join (`litellm_cost.apply_actual_cost`) deliberately writes cost at the TURN level only (`token_usage.total_cost_usd` = the real OpenRouter bill) plus the per-call `TurnRecord.provider_call_costs` audit record; it does NOT touch the message token buckets, so `EventCollector` stays the single writer and this invariant holds on every backend. The Python `token_usage`/`total_token_usage` aggregate is unchanged and still authoritative for budget/judges/reports.
|
|
143
143
|
- **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.
|
|
144
|
-
- **Run-time caps (non-criterion enforcement)**: `TaskDefinition.run_limits` (`RunLimits` model) is the single namespace for all *task-level* run-time caps — `max_turns` / `task_timeout` / `turn_timeout` (structural) and `max_input_tokens` / `max_output_tokens` / `max_total_tokens` / `max_usd` (cumulative budget). Token/USD breaches abort with `FinalStatus.TOKEN_BUDGET_EXCEEDED` or `COST_BUDGET_EXCEEDED` (both `category == "failed"`). Structural caps are set from the CLI via `-D run_limits.max_turns=…` / `-D run_limits.task_timeout=…` / `-D run_limits.turn_timeout=…` (field-merged into `run_limits`); budget caps via `-D run_limits.max_usd=…` etc. or YAML. Layered config uses field-merge — a variant block overrides individual keys without replacing the task's block. The one *per-criterion* cap, `
|
|
145
|
-
- **Early stop on criterion (opt-in)**: `
|
|
144
|
+
- **Run-time caps (non-criterion enforcement)**: `TaskDefinition.run_limits` (`RunLimits` model) is the single namespace for all *task-level* run-time caps — `max_turns` / `task_timeout` / `turn_timeout` (structural) and `max_input_tokens` / `max_output_tokens` / `max_total_tokens` / `max_usd` (cumulative budget). Token/USD breaches abort with `FinalStatus.TOKEN_BUDGET_EXCEEDED` or `COST_BUDGET_EXCEEDED` (both `category == "failed"`). Structural caps are set from the CLI via `-D run_limits.max_turns=…` / `-D run_limits.task_timeout=…` / `-D run_limits.turn_timeout=…` (field-merged into `run_limits`); budget caps via `-D run_limits.max_usd=…` etc. or YAML. Layered config uses field-merge — a variant block overrides individual keys without replacing the task's block. The one *per-criterion* cap, `stop_early.decide_within`, deliberately lives on `LiveSuccessCriterion` instead (see below) — the watcher must attribute a decision-step timeout to a specific criterion, which `RunLimits` (task-scoped, criterion-agnostic) cannot express.
|
|
145
|
+
- **Early stop on criterion (opt-in, per-criterion arming)**: a `stop_early:` block (`StopEarlyPolicy`) on a criterion ends a single-shot run early once the run's **armed** criteria decide the outcome, so a raised `max_turns` isn't wasted on the smoke flavor. The block's PRESENCE is the arming and alone activates the watcher — there is **no run-level master switch**: `run_limits.stop_early: false` is the run-level KILL SWITCH that force-disarms every block (the one-line experiment-variant/`-D` override for an authoritative full run), and `run_limits.stop_early: true` (the removed master arm) is a hard `EarlyStopConfigError` at resolution. The block exists on `LiveSuccessCriterion` only (currently `skill_triggered`, `command_executed` — so arming an unobservable criterion is unrepresentable, a pydantic extra-forbid error). Arming carries one implicit trigger (a native live-fail may fail-stop the run); its keys refine it: `on_pass: stop` (pass-stop the moment the criterion live-passes; default `continue` just latches) and `decide_within: N` (still undecided after N tool-call steps latches an **effective fail**, fed through the same fail-stop rule, reported as `decision_budget_exceeded` — an ordinary weighted fail, NOT a gate-bypassing force-fail; cumulative across retry attempts of the same turn). A trigger whose polarity the instance can't decide (per the abstract, checker-independent `live_decidable_polarities()`, a pure function of the criterion's own fields, paired with the checker's `live_verdict` override by lint rule CE025, a registry-based whole-tree check) is **inert by design** — one dataset-fanned YAML line serves both positive rows (pass/timeout live) and distractor rows (fail live). Verdicts **latch**: once a criterion decides, its `live_verdict` is never polled again. Stop rule is weighted, not strict-boolean: `run_limits.stop_early_gate_threshold` (default `1.0`, reproducing strict-AND behavior exactly) is the minimum weighted score (`Σ weight·score / Σ weight` over the armed subset) required to pass; a fail-stop fires once the armed set's **ceiling** (best case for everything still undecided) can no longer reach the threshold — so a low-weight fail or timeout that can't doom the gate is absorbed and the run continues — and is **deferred while any pass-capable armed criterion is undecided** (a distractor misfire never truncates a positive row's recall signal); a pass-stop fires once the `on_pass: stop` subset's **floor** (worst case) already meets the threshold, and is symmetrically **deferred while any pass-capable armed criterion outside the `on_pass: stop` subset is undecided** (so an early pass never freezes a sibling `on_pass: continue` criterion's signal out of the trajectory). A fail-stop is therefore verdict-preserving; a pass-stop can miss a *later* distractor misfire, so authoritative P/R/F1 comes from a kill-switched (`stop_early: false`) run. Driven by `orchestration/early_stop.py::EarlyStopWatcher` (built when `early_stop_active(task)`: ≥1 armed criterion, kill switch not thrown) through the agent's cooperative `should_stop` seam (tool-call granularity, no SIGKILL); live verdicts only *trigger* the stop — the standard `check_all_async` on the frozen trajectory is authoritative. Gating is **FIRED-ONLY**: a run the watcher actually cut gates on the **armed subset** via the weighted `EvaluationResult.armed_criteria_passed`; a run that completes naturally — armed or not — gates strict-AND via `all_criteria_passed`, so adding a block never changes the verdict of a run it didn't cut. Note the gate keys on the watcher having FIRED (`result.early_stop is not None`), not on confirmed truncation — an agent that ignores `should_stop`, or a stop firing on the final message, still gates armed-only. Every resolution-time guardrail violation is a hard error at resolution (plan *and* run); the one load-time case — a `stop_early:` block on a non-live criterion — is a pydantic schema error at task load, which the run surface reports as a skipped task like any other malformed task. A runtime verdict bug **fails open** to a full run. Surfaces: `EarlyStopInfo` (incl. `gate_threshold` at stop time), report notes/badges, `stopped_early` run.json rows, `EarlyStopped`/`EarlyStopReason` telemetry dims. Worked rationale: docs/TASK_DEFINITION_GUIDE.md § `stop_early`. No blocks anywhere ⇒ behavior byte-for-byte unchanged.
|
|
146
146
|
|
|
147
|
-
## Success Criteria (
|
|
147
|
+
## Success Criteria (15 types)
|
|
148
148
|
|
|
149
149
|
| Type | Scoring | Description |
|
|
150
150
|
|------|---------|-------------|
|
|
@@ -156,6 +156,7 @@ action.yml # Published composite GitHub Action (coder-ev
|
|
|
156
156
|
| `file_matches_regex` | Binary | Regex match on file |
|
|
157
157
|
| `reference_comparison` | Continuous | AST/token/complexity similarity |
|
|
158
158
|
| `command_executed` | Fractional | Agent tool usage verification |
|
|
159
|
+
| `cli_called` | Binary | Structured match over a JSON Lines invocation log: verb / positional / per-flag predicates, with min_count/max_count bounds |
|
|
159
160
|
| `commands_efficiency` | Continuous | Agent tool-call efficiency relative to expected budget |
|
|
160
161
|
| `uipath_eval` | Fractional | UiPath agent evaluation results |
|
|
161
162
|
| `classification_match` | Binary | File-based label match (observed vs expected) with `(none)`/`(other)` sentinels; emits `ClassificationCriterionResult` for suite-level P/R/F1 |
|
|
@@ -163,7 +164,7 @@ action.yml # Published composite GitHub Action (coder-ev
|
|
|
163
164
|
| `llm_judge` | Continuous | LLM grades artifacts + optional trajectory + optional reference; routes through the run's backend (Bedrock / Anthropic) |
|
|
164
165
|
| `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. |
|
|
165
166
|
|
|
166
|
-
All criteria support `weight` (default 1.0) and `pass_threshold` (default 0.9), plus `
|
|
167
|
+
All criteria support `weight` (default 1.0) and `pass_threshold` (default 0.9), plus (on live criteria only) a `stop_early:` block (`on_pass`, `decide_within`) that arms the criterion for early stop by its presence. 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.
|
|
167
168
|
|
|
168
169
|
## Evaluation Flow
|
|
169
170
|
|
|
@@ -200,7 +201,7 @@ make lint # custom architectural lint rules (CE001+)
|
|
|
200
201
|
make verify # All of the above + coverage check (CI equivalent)
|
|
201
202
|
```
|
|
202
203
|
|
|
203
|
-
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 —
|
|
204
|
+
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:`.)
|
|
204
205
|
|
|
205
206
|
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.
|
|
206
207
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coder-eval
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.5
|
|
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
|
|
@@ -64,8 +64,8 @@ Description-Content-Type: text/markdown
|
|
|
64
64
|
# Coder Eval — evaluate & benchmark AI coding agents and Claude Code skills
|
|
65
65
|
|
|
66
66
|
[](https://pypi.org/project/coder-eval/)
|
|
67
|
+
[](https://github.com/marketplace/actions/coder_eval)
|
|
67
68
|
[](https://coder-eval.com)
|
|
68
|
-
[](https://coder-eval.com/docs)
|
|
69
69
|
[](LICENSE)
|
|
70
70
|
[](https://www.python.org/downloads/)
|
|
71
71
|
[](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml)
|
|
@@ -160,12 +160,18 @@ the full setup.
|
|
|
160
160
|
|
|
161
161
|
## Use as a GitHub Action
|
|
162
162
|
|
|
163
|
-
A composite action
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
A composite action — on the Marketplace as
|
|
164
|
+
[**coder_eval**](https://github.com/marketplace/actions/coder_eval) — runs
|
|
165
|
+
`coder-eval` as a CI gate. It installs the pinned CLI, runs your tasks, writes a
|
|
166
|
+
JUnit XML report, appends `run.md` to the job summary, and fails the step on any
|
|
167
|
+
task/gate failure:
|
|
166
168
|
|
|
167
169
|
```yaml
|
|
168
|
-
- uses:
|
|
170
|
+
- uses: actions/setup-node@v4 # the claude-code agent needs the Claude CLI…
|
|
171
|
+
with: { node-version: '20' }
|
|
172
|
+
- run: npm install -g @anthropic-ai/claude-code
|
|
173
|
+
|
|
174
|
+
- uses: UiPath/coder_eval@v0 # …then run the gate (@v1 once 1.0.0 ships; @vX.Y.Z pins exactly)
|
|
169
175
|
with:
|
|
170
176
|
tasks: tests/tasks/**/*.yaml
|
|
171
177
|
model: claude-sonnet-5
|
|
@@ -217,9 +223,11 @@ code: the step fails if *either* coder-eval exits non-zero *or* any task's
|
|
|
217
223
|
alone.
|
|
218
224
|
|
|
219
225
|
> **Agent runtime is the caller's responsibility.** The action is agent-agnostic —
|
|
220
|
-
> it installs `coder-eval` but no coding-agent runtime
|
|
221
|
-
>
|
|
222
|
-
> `npm install -g @anthropic-ai/claude-code
|
|
226
|
+
> it installs `coder-eval` but no coding-agent runtime, which is why the example
|
|
227
|
+
> above starts with `actions/setup-node` +
|
|
228
|
+
> `npm install -g @anthropic-ai/claude-code`: the default `claude-code` agent
|
|
229
|
+
> needs the `claude` CLI on `PATH` before the action runs. Swap those steps for
|
|
230
|
+
> your own agent's runtime as needed.
|
|
223
231
|
|
|
224
232
|
> **Security.** Evaluated tasks execute agent-generated code. Do **not** run this
|
|
225
233
|
> action under `pull_request_target` with secrets exposed to untrusted fork PRs —
|
|
@@ -251,7 +259,7 @@ alone.
|
|
|
251
259
|
| [Bring Your Own Dataset](docs/DATASETS.md) | Fan a single task out over a dataset |
|
|
252
260
|
| [Dialog Mode](docs/DIALOG_MODE.md) | Evaluate agents in multi-turn conversation via a simulated user |
|
|
253
261
|
| [Docker Isolation](docs/DOCKER_ISOLATION.md) | The container sandbox driver, with custom images |
|
|
254
|
-
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the
|
|
262
|
+
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output, score floor |
|
|
255
263
|
| [Extending Coder Eval](docs/EXTENDING.md) | Author a custom agent, criterion, or model pricing via the plugin SPI |
|
|
256
264
|
| [Report Schema](docs/REPORT_SCHEMA.md) | Field-level reference for run.json / variant.json / task.json |
|
|
257
265
|
| [How It Compares](docs/comparison.md) | vs. SWE-bench, SkillsBench, Harbor, OpenAI Evals, hand-rolled scripts |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Coder Eval — evaluate & benchmark AI coding agents and Claude Code skills
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/coder-eval/)
|
|
4
|
+
[](https://github.com/marketplace/actions/coder_eval)
|
|
4
5
|
[](https://coder-eval.com)
|
|
5
|
-
[](https://coder-eval.com/docs)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://www.python.org/downloads/)
|
|
8
8
|
[](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml)
|
|
@@ -97,12 +97,18 @@ the full setup.
|
|
|
97
97
|
|
|
98
98
|
## Use as a GitHub Action
|
|
99
99
|
|
|
100
|
-
A composite action
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
A composite action — on the Marketplace as
|
|
101
|
+
[**coder_eval**](https://github.com/marketplace/actions/coder_eval) — runs
|
|
102
|
+
`coder-eval` as a CI gate. It installs the pinned CLI, runs your tasks, writes a
|
|
103
|
+
JUnit XML report, appends `run.md` to the job summary, and fails the step on any
|
|
104
|
+
task/gate failure:
|
|
103
105
|
|
|
104
106
|
```yaml
|
|
105
|
-
- uses:
|
|
107
|
+
- uses: actions/setup-node@v4 # the claude-code agent needs the Claude CLI…
|
|
108
|
+
with: { node-version: '20' }
|
|
109
|
+
- run: npm install -g @anthropic-ai/claude-code
|
|
110
|
+
|
|
111
|
+
- uses: UiPath/coder_eval@v0 # …then run the gate (@v1 once 1.0.0 ships; @vX.Y.Z pins exactly)
|
|
106
112
|
with:
|
|
107
113
|
tasks: tests/tasks/**/*.yaml
|
|
108
114
|
model: claude-sonnet-5
|
|
@@ -154,9 +160,11 @@ code: the step fails if *either* coder-eval exits non-zero *or* any task's
|
|
|
154
160
|
alone.
|
|
155
161
|
|
|
156
162
|
> **Agent runtime is the caller's responsibility.** The action is agent-agnostic —
|
|
157
|
-
> it installs `coder-eval` but no coding-agent runtime
|
|
158
|
-
>
|
|
159
|
-
> `npm install -g @anthropic-ai/claude-code
|
|
163
|
+
> it installs `coder-eval` but no coding-agent runtime, which is why the example
|
|
164
|
+
> above starts with `actions/setup-node` +
|
|
165
|
+
> `npm install -g @anthropic-ai/claude-code`: the default `claude-code` agent
|
|
166
|
+
> needs the `claude` CLI on `PATH` before the action runs. Swap those steps for
|
|
167
|
+
> your own agent's runtime as needed.
|
|
160
168
|
|
|
161
169
|
> **Security.** Evaluated tasks execute agent-generated code. Do **not** run this
|
|
162
170
|
> action under `pull_request_target` with secrets exposed to untrusted fork PRs —
|
|
@@ -188,7 +196,7 @@ alone.
|
|
|
188
196
|
| [Bring Your Own Dataset](docs/DATASETS.md) | Fan a single task out over a dataset |
|
|
189
197
|
| [Dialog Mode](docs/DIALOG_MODE.md) | Evaluate agents in multi-turn conversation via a simulated user |
|
|
190
198
|
| [Docker Isolation](docs/DOCKER_ISOLATION.md) | The container sandbox driver, with custom images |
|
|
191
|
-
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the
|
|
199
|
+
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output, score floor |
|
|
192
200
|
| [Extending Coder Eval](docs/EXTENDING.md) | Author a custom agent, criterion, or model pricing via the plugin SPI |
|
|
193
201
|
| [Report Schema](docs/REPORT_SCHEMA.md) | Field-level reference for run.json / variant.json / task.json |
|
|
194
202
|
| [How It Compares](docs/comparison.md) | vs. SWE-bench, SkillsBench, Harbor, OpenAI Evals, hand-rolled scripts |
|
|
@@ -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.
|
|
44
|
+
default: "0.9.5" # <-- kept in sync with releases by release.yml
|
|
45
45
|
run-dir:
|
|
46
46
|
description: Run directory (--run-dir)
|
|
47
47
|
required: false
|
|
@@ -268,11 +268,12 @@ variant's, on the already-mutated prompt.
|
|
|
268
268
|
## Recipe: Smoke vs. e2e Flavors (Early Stop)
|
|
269
269
|
|
|
270
270
|
Run the **same** task file as both a fast `smoke` flavor and a full `e2e` flavor
|
|
271
|
-
|
|
272
|
-
that define "the interesting thing happened" with `
|
|
271
|
+
with a one-line kill switch on the reference variant. Arm the criteria
|
|
272
|
+
that define "the interesting thing happened" with `stop_early:` blocks in the
|
|
273
|
+
task file;
|
|
273
274
|
the `smoke` variant cuts off as soon as they're decided, while `e2e` runs to
|
|
274
275
|
completion. Because the field merge is per-key, the variant sets only
|
|
275
|
-
`stop_early` without disturbing the task's `max_turns`.
|
|
276
|
+
`stop_early` (the run-level kill switch) without disturbing the task's `max_turns`.
|
|
276
277
|
|
|
277
278
|
```yaml
|
|
278
279
|
experiment_id: early-stop-ab
|
|
@@ -281,13 +282,12 @@ description: "Smoke vs. e2e from one file via opt-in early stop"
|
|
|
281
282
|
variants:
|
|
282
283
|
- variant_id: e2e
|
|
283
284
|
run_limits:
|
|
284
|
-
stop_early: false #
|
|
285
|
+
stop_early: false # kill switch: force-disarm the blocks (the reference flavor)
|
|
285
286
|
- variant_id: smoke
|
|
286
|
-
|
|
287
|
-
stop_early: true # cut off once the armed criteria are decided
|
|
287
|
+
# no override needed: the task's stop_early: blocks arm the watcher
|
|
288
288
|
```
|
|
289
289
|
|
|
290
|
-
The task file supplies the arming (`
|
|
290
|
+
The task file supplies the arming (`stop_early:` blocks on the criteria that gate the
|
|
291
291
|
flavor) and a `max_turns` generous enough for `e2e`; see
|
|
292
292
|
[`stop_early`](TASK_DEFINITION_GUIDE.md#stop_early-opt-in-early-stop). This recipe
|
|
293
293
|
ships as `experiments/early-stop-ab.yaml`.
|
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: >-
|
|
3
|
-
Run Coder Eval as a CI gate — the
|
|
4
|
-
output for test-report ingestion, and an optional
|
|
3
|
+
Run Coder Eval as a CI gate — the coder_eval GitHub Action from the Actions
|
|
4
|
+
Marketplace, JUnit XML output for test-report ingestion, and an optional
|
|
5
|
+
per-task score floor.
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# CI Gate: GitHub Action & JUnit reports
|
|
8
9
|
|
|
9
|
-
Coder Eval ships a **packaged CI gate**: a composite GitHub Action
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
Coder Eval ships a **packaged CI gate**: a composite GitHub Action — on the
|
|
11
|
+
Actions Marketplace as
|
|
12
|
+
[**coder_eval**](https://github.com/marketplace/actions/coder_eval) — that
|
|
13
|
+
installs the CLI, runs your tasks, emits a JUnit XML report, appends the run
|
|
14
|
+
summary to the job summary, and fails the build on any task/gate failure. This
|
|
15
|
+
page is the reference for the Action and the JUnit output. For a walkthrough
|
|
13
16
|
(including a hand-rolled workflow), see
|
|
14
17
|
[Tutorial 02 — Running Coder Eval in CI](tutorials/02-ci-pipeline.md).
|
|
15
18
|
|
|
16
19
|
## The GitHub Action
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
The action is published on the GitHub Actions Marketplace as
|
|
22
|
+
[**coder_eval**](https://github.com/marketplace/actions/coder_eval). It is a
|
|
23
|
+
composite action living at the repo root (`action.yml`), so you reference it by
|
|
24
|
+
repo path — there is no Marketplace install step:
|
|
20
25
|
|
|
21
26
|
```yaml
|
|
22
|
-
- uses:
|
|
27
|
+
- uses: actions/setup-node@v4 # the claude-code agent needs the Claude CLI…
|
|
28
|
+
with: { node-version: '20' }
|
|
29
|
+
- run: npm install -g @anthropic-ai/claude-code
|
|
30
|
+
|
|
31
|
+
- uses: UiPath/coder_eval@v0 # …then run the gate (@v1 once 1.0.0 ships; @vX.Y.Z pins exactly)
|
|
23
32
|
with:
|
|
24
33
|
tasks: tests/tasks/**/*.yaml
|
|
25
34
|
model: claude-sonnet-5
|
|
@@ -27,10 +36,11 @@ directly:
|
|
|
27
36
|
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
|
|
28
37
|
```
|
|
29
38
|
|
|
30
|
-
The action is **agent-agnostic** — it
|
|
31
|
-
coding-agent runtime. Tasks using the default
|
|
32
|
-
`claude` CLI on `PATH` (Node +
|
|
33
|
-
*before*
|
|
39
|
+
The first two steps are there because the action is **agent-agnostic** — it
|
|
40
|
+
installs `coder-eval` but *not* any coding-agent runtime. Tasks using the default
|
|
41
|
+
`claude-code` agent need the `claude` CLI on `PATH` (Node +
|
|
42
|
+
`@anthropic-ai/claude-code`), provided by your job *before* the action runs; swap
|
|
43
|
+
those steps for your own agent's runtime as needed.
|
|
34
44
|
|
|
35
45
|
### Inputs
|
|
36
46
|
|
|
@@ -69,9 +69,10 @@ calls the agent's `communicate()`, so Codex and plugin agents work. The *simulat
|
|
|
69
69
|
always a Claude Code agent. A dialog run therefore needs the `claude` CLI on `PATH` and working
|
|
70
70
|
Anthropic or Bedrock credentials **even when the agent under test is not Claude**.
|
|
71
71
|
|
|
72
|
-
**Early stop is not available here.** [`
|
|
73
|
-
is single-shot-only;
|
|
74
|
-
a silent no-op
|
|
72
|
+
**Early stop is not available here.** [Criterion-level `stop_early:` arming](TASK_DEFINITION_GUIDE.md#stop_early-opt-in-early-stop)
|
|
73
|
+
is single-shot-only; an armed criterion alongside `simulation.enabled` is a hard error at resolution
|
|
74
|
+
time, not a silent no-op (disarm with the `run_limits.stop_early: false` kill switch to run anyway).
|
|
75
|
+
Use `stop_on_criteria_pass` (below) for the dialog equivalent.
|
|
75
76
|
|
|
76
77
|
Every field's default and constraint lives in one place — the
|
|
77
78
|
[Task Definition Guide's simulation section](TASK_DEFINITION_GUIDE.md#simulation-multi-turn-user-dialog).
|
|
@@ -109,7 +109,7 @@ turn, and `ToolStart`/`ToolEnd` per tool call (close orphaned tools with
|
|
|
109
109
|
returned `TurnRecord`, the single agent-agnostic capture path.
|
|
110
110
|
|
|
111
111
|
Set `supports_cooperative_stop: ClassVar[bool] = True` only if your `communicate()`
|
|
112
|
-
actually honors `should_stop` (needed for `
|
|
112
|
+
actually honors `should_stop` (needed for criterion-level `stop_early:` arming). Leaving it
|
|
113
113
|
`False` means early stop is rejected at resolution for your agent — which is correct
|
|
114
114
|
if you can't stop cooperatively.
|
|
115
115
|
|
|
@@ -146,7 +146,7 @@ class MyCriterion(BaseSuccessCriterion):
|
|
|
146
146
|
Union membership is required — a run validates that every union member's `type` has a
|
|
147
147
|
registered checker, and rejects unknown `type` tags in YAML. `BaseSuccessCriterion`
|
|
148
148
|
gives you `description`, `weight` (default 1.0; `0` = informational/non-gating),
|
|
149
|
-
`pass_threshold` (default 0.9)
|
|
149
|
+
`pass_threshold` (default 0.9) and `suite_thresholds` for free, with
|
|
150
150
|
`extra="forbid"` so YAML typos are caught.
|
|
151
151
|
|
|
152
152
|
### Step 2 — the checker
|
|
@@ -189,8 +189,9 @@ backend), `num_turns`, `max_turns_exhausted`,
|
|
|
189
189
|
|
|
190
190
|
Present (non-`null`) iff the run stopped early — there is no separate boolean.
|
|
191
191
|
Fields: `reason` (`criterion_passed` / `criterion_failed` /
|
|
192
|
-
`decision_budget_exceeded` — the last
|
|
193
|
-
|
|
192
|
+
`decision_budget_exceeded` — the last marks a fail-stop whose deciding
|
|
193
|
+
criterion timed out undecided past its `stop_early.decide_within`; it gates through
|
|
194
|
+
the same weighted armed gate as a native fail),
|
|
194
195
|
`deciding_criterion_type`, `deciding_criterion_description`, `armed_criteria`,
|
|
195
196
|
`sdk_turn_index`, `tool_call_index` (1-based, includes the in-flight call),
|
|
196
197
|
`elapsed_seconds`, `turns_remaining_at_stop`, `gate_threshold` (the
|