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