coder-eval 0.11.7__tar.gz → 0.12.1__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.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-review.md +2 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/harness-candidates.md +96 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/shared/run-layout.md +3 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/pages-stub/index.html +2 -2
- coder_eval-0.12.1/.github/scripts/harbor_e2e.py +163 -0
- coder_eval-0.12.1/.github/workflows/harbor-e2e.yml +91 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/pr-checks.yml +15 -8
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/verify-published-action.yml +12 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/CHANGELOG.md +303 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/CLAUDE.md +26 -6
- {coder_eval-0.11.7 → coder_eval-0.12.1}/PKG-INFO +13 -8
- {coder_eval-0.11.7 → coder_eval-0.12.1}/README.md +6 -5
- {coder_eval-0.11.7 → coder_eval-0.12.1}/action.yml +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docker/Dockerfile +29 -15
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/DOCKER_ISOLATION.md +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/EXTENDING.md +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/REPORT_SCHEMA.md +28 -6
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/TASK_DEFINITION_GUIDE.md +43 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/USER_GUIDE.md +202 -10
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/agents/HARNESS_PARITY.md +127 -13
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/agents/OPENCODE.md +16 -15
- coder_eval-0.12.1/docs/agents/PI.md +272 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/comparison.md +4 -4
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/index.md +5 -4
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/llms.txt +2 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/02-ci-pipeline.md +8 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/06-use-docker-isolation.md +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/harness-badge.test.tsx +11 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/harness-badge.tsx +1 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/window-summary.tsx +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/page.tsx +55 -14
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +1 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/scribe/run-table.tsx +5 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/trends/trends-view.tsx +17 -9
- coder_eval-0.12.1/evalboard/public/harness/pi.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/default.yaml +2 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/mkdocs.yml +3 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/run-layout.md +3 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/analyze/SKILL.md +11 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/pyproject.toml +70 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/__init__.py +5 -2
- coder_eval-0.12.1/src/coder_eval/agents/_skills.py +113 -0
- coder_eval-0.12.1/src/coder_eval/agents/_timing.py +42 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/antigravity_agent.py +85 -5
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/claude_code_agent.py +8 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/codex_agent.py +232 -27
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/opencode_agent.py +53 -88
- coder_eval-0.12.1/src/coder_eval/agents/pi_agent.py +1269 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/analysis.py +16 -8
- coder_eval-0.12.1/src/coder_eval/argv_match.py +267 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/__init__.py +10 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/aggregate_command.py +9 -5
- coder_eval-0.12.1/src/coder_eval/cli/evaluate_command.py +693 -0
- coder_eval-0.12.1/src/coder_eval/cli/evaluate_target.py +120 -0
- coder_eval-0.12.1/src/coder_eval/cli/execute_command.py +261 -0
- coder_eval-0.12.1/src/coder_eval/cli/export_command.py +126 -0
- coder_eval-0.12.1/src/coder_eval/cli/harbor_command.py +65 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/plan_command.py +14 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/report_command.py +2 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/run_command.py +471 -28
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/run_helpers.py +17 -1
- coder_eval-0.12.1/src/coder_eval/cli/run_task_internal_command.py +410 -0
- coder_eval-0.12.1/src/coder_eval/criteria/cli_called.py +218 -0
- coder_eval-0.12.1/src/coder_eval/harbor/__init__.py +22 -0
- coder_eval-0.12.1/src/coder_eval/harbor/agent.py +160 -0
- coder_eval-0.12.1/src/coder_eval/harbor/agent_paths.py +29 -0
- coder_eval-0.12.1/src/coder_eval/harbor/atif_emit.py +422 -0
- coder_eval-0.12.1/src/coder_eval/harbor/atif_hydrate.py +180 -0
- coder_eval-0.12.1/src/coder_eval/harbor/atif_models.py +290 -0
- coder_eval-0.12.1/src/coder_eval/harbor/experiment_packager.py +211 -0
- coder_eval-0.12.1/src/coder_eval/harbor/packager.py +701 -0
- coder_eval-0.12.1/src/coder_eval/harbor/portability.py +149 -0
- coder_eval-0.12.1/src/coder_eval/harbor/reward.py +102 -0
- coder_eval-0.12.1/src/coder_eval/invocation_log.py +306 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/isolation/docker_runner.py +245 -11
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/__init__.py +21 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/agent_config.py +55 -1
- coder_eval-0.12.1/src/coder_eval/models/cli_match.py +392 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/container_paths.py +23 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/criteria.py +50 -172
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/enums.py +59 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/experiment.py +57 -9
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/results.py +156 -12
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/sandbox.py +186 -6
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/tasks.py +13 -10
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/telemetry.py +13 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/batch.py +112 -14
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/config.py +32 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/evaluation.py +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/experiment.py +121 -36
- coder_eval-0.12.1/src/coder_eval/orchestration/regrade.py +1213 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestrator.py +724 -103
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/path_utils.py +101 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/reports.py +64 -15
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/reports_experiment.py +27 -8
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/reports_html.py +31 -6
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/reports_junit.py +13 -4
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/reports_stats.py +43 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/sandbox.py +250 -18
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/README.md +5 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/byod_smoke_test.yaml +9 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +14 -6
- coder_eval-0.12.1/tasks/pi_smoke_test.yaml +38 -0
- coder_eval-0.12.1/tasks/record_cli_responses.yaml +206 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/__init__.py +2 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/_scrub.py +64 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/antigravity_fixtures.py +279 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/codex_fixtures.py +50 -12
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +52 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +83 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +92 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +72 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +106 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +12 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +7 -7
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -1
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +57 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +106 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +47 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +155 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/opencode_fixtures.py +227 -0
- coder_eval-0.12.1/tests/_fixtures/golden_streams/pi_fixtures.py +207 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +6 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +25 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/instruction.md +9 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/task.toml +73 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +1 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +28 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +17 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +2 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +1 -0
- coder_eval-0.12.1/tests/_fixtures/harbor_export_golden/source_task/task.yaml +33 -0
- coder_eval-0.12.1/tests/_fixtures/timing_union_cases.json +100 -0
- coder_eval-0.12.1/tests/fixtures/atif/known_good_trajectory.json +125 -0
- coder_eval-0.12.1/tests/fixtures/pi_happy_stream.jsonl +45 -0
- coder_eval-0.12.1/tests/harbor_e2e/fixtures/docker_baseline.yaml +35 -0
- coder_eval-0.12.1/tests/harbor_e2e/fixtures/llm_judge.yaml +44 -0
- coder_eval-0.12.1/tests/harbor_e2e/fixtures/template_sources.yaml +38 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/agent_roster_parity.py +12 -5
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/doc_env_parity.py +23 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/doc_schema_parity.py +16 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce018_no_final_status_name_denylist.py +1 -0
- coder_eval-0.12.1/tests/lint/rules/ce048_no_in_process_typer_command_call.py +106 -0
- coder_eval-0.12.1/tests/lint/rules/ce049_no_score_or_zero.py +70 -0
- coder_eval-0.12.1/tests/lint/rules/ce050_no_union_getattr_probe.py +132 -0
- coder_eval-0.12.1/tests/lint/rules/ce051_no_driver_override.py +94 -0
- coder_eval-0.12.1/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +98 -0
- coder_eval-0.12.1/tests/lint/rules/ce053_run_record_filename_literal.py +96 -0
- coder_eval-0.12.1/tests/lint/rules/ce054_env_info_key_round_trip.py +126 -0
- coder_eval-0.12.1/tests/lint/rules/ce056_no_container_env_literal.py +83 -0
- coder_eval-0.12.1/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +82 -0
- coder_eval-0.12.1/tests/lint/rules/ce058_no_timing_literal.py +204 -0
- coder_eval-0.12.1/tests/lint/rules/ce059_generation_window_is_two_reads.py +79 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_cli_imports_in_core.py +7 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/runner.py +22 -0
- coder_eval-0.12.1/tests/test_agent_golden_master.py +364 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_telemetry.py +8 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_telemetry_advanced.py +3 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_antigravity_agent.py +436 -99
- coder_eval-0.12.1/tests/test_atif_emit.py +365 -0
- coder_eval-0.12.1/tests/test_atif_hydrate.py +138 -0
- coder_eval-0.12.1/tests/test_atif_models.py +181 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cleanup_preservation_guard.py +4 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_called_criterion.py +235 -41
- coder_eval-0.12.1/tests/test_cli_match_parity.py +121 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_telemetry.py +2 -2
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_codex_agent.py +344 -3
- coder_eval-0.12.1/tests/test_codex_agent_unit.py +280 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_command_statistics.py +37 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_custom_lint.py +762 -5
- coder_eval-0.12.1/tests/test_detached_grading_boundaries.py +951 -0
- coder_eval-0.12.1/tests/test_detached_grading_guards.py +479 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_runner_mounts.py +37 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_wildcard_env.py +7 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_early_stop.py +3 -3
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_evaluate_command.py +16 -16
- coder_eval-0.12.1/tests/test_evaluate_format_harbor.py +126 -0
- coder_eval-0.12.1/tests/test_evaluate_target.py +102 -0
- coder_eval-0.12.1/tests/test_execute_command.py +305 -0
- coder_eval-0.12.1/tests/test_execute_evaluate_loop.py +771 -0
- coder_eval-0.12.1/tests/test_execute_format_harbor.py +87 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_reports.py +99 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_runner.py +81 -0
- coder_eval-0.12.1/tests/test_harbor_agent.py +171 -0
- coder_eval-0.12.1/tests/test_harbor_experiment_packager.py +308 -0
- coder_eval-0.12.1/tests/test_harbor_export_golden.py +80 -0
- coder_eval-0.12.1/tests/test_harbor_packager.py +659 -0
- coder_eval-0.12.1/tests/test_harbor_portability.py +135 -0
- coder_eval-0.12.1/tests/test_harbor_reward.py +123 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_image_from_dockerfiles.py +31 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_litellm_cost.py +6 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_models.py +56 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_opencode_agent.py +174 -125
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_orchestrator.py +73 -0
- coder_eval-0.12.1/tests/test_pi_agent.py +1187 -0
- coder_eval-0.12.1/tests/test_pi_agent_config.py +73 -0
- coder_eval-0.12.1/tests/test_pi_smoke_task.py +38 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_plan_command.py +11 -11
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_post_run.py +10 -10
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_pre_run.py +16 -16
- coder_eval-0.12.1/tests/test_regrade.py +1274 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports.py +74 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports_html.py +90 -5
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_resume.py +110 -6
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_route_seam_exhaustiveness.py +9 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_command_junit.py +1 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_metrics.py +3 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox.py +56 -1
- coder_eval-0.12.1/tests/test_sandbox_adopt.py +130 -0
- coder_eval-0.12.1/tests/test_sandbox_record_cli.py +1182 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox_templates.py +11 -6
- coder_eval-0.12.1/tests/test_sandbox_venv_live.py +110 -0
- coder_eval-0.12.1/tests/test_seed_from_prior_result.py +319 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_simulation_integration.py +73 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_suite_rollup.py +78 -1
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_tags.py +186 -1
- coder_eval-0.12.1/tests/test_timing_union_parity.py +55 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_token_usage.py +12 -0
- coder_eval-0.12.1/tests/test_ungraded_reporting.py +288 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/uv.lock +261 -8
- coder_eval-0.11.7/src/coder_eval/cli/evaluate_command.py +0 -173
- coder_eval-0.11.7/src/coder_eval/cli/run_task_internal_command.py +0 -210
- coder_eval-0.11.7/src/coder_eval/criteria/cli_called.py +0 -312
- coder_eval-0.11.7/src/coder_eval/invocation_log.py +0 -151
- coder_eval-0.11.7/tests/test_agent_golden_master.py +0 -98
- coder_eval-0.11.7/tests/test_codex_agent_unit.py +0 -131
- coder_eval-0.11.7/tests/test_sandbox_record_cli.py +0 -506
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/shared/axes.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.claude-plugin/marketplace.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.env.example +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/CODEOWNERS +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/actionlint.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/code_review.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/dependabot.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.github/workflows/release.yml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.gitignore +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/.python-version +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/ADOPTERS.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/CONTRIBUTING.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/LICENSE +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/Makefile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/NOTICE +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/SECURITY.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/comparison.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/AB_EXPERIMENTS.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/CI_GATE.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/DATASETS.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/DIALOG_MODE.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/PLUGIN.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/agents/CLAUDE_CODE.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/agents/CODEX.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/assets/hero.gif +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/docs/tutorials/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/.gitignore +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/skeleton.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/globals.css +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/icon.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/loading.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/scribe/page.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/package.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/litellm/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/litellm/cost_logger.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/osv-scanner.toml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/init/SKILL.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/plugins/coder-eval/skills/task/SKILL.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_litellm.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/limits.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/pricing.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/opencode_smoke_test.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tasks/token_check.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/_path_helpers.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/conftest.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/generated.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/plugin_manifest_parity.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/violation.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_action_inputs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_agentless.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_aggregate.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_classification_match.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_command_executed.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_error_handling.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_evaluator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_event_collector.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_file_check.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_formatting.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_integration.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_json_check.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_litellm.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_litellm_judge_live.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_logging.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_mutations.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_parallel.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_path_utils.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_plugins.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reference_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reference_permissions.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_registry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_release_notes.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_report_command.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports_experiment.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports_stats.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_reports_stats_nonfinite.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_routing.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_helpers.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_scorers.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_summaries.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_telemetry.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_utils.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_visible_turn_cap.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_watchdog.py +0 -0
- {coder_eval-0.11.7 → coder_eval-0.12.1}/tests/test_yaml_migration.py +0 -0
|
@@ -24,7 +24,8 @@ The run layout (`runs/<run_id>/<variant_id>/<task_id>/<NN>/…`, `<NN>` a zero-p
|
|
|
24
24
|
1. Read `<run_path>/run.json` if present (for context — `run_id`, `start_time`).
|
|
25
25
|
2. Glob `<run_path>/*/*/*/task.json` and read each one.
|
|
26
26
|
3. Read `<run_path>/analysis.md` if present — it already diagnoses many failures; lean on its findings rather than re-deriving them.
|
|
27
|
-
4.
|
|
27
|
+
4. Skip any task whose `final_status` is `"NOT_GRADED"` — `coder-eval execute` produced it, no criterion ran, and `weighted_score` is `null`. It is neither a pass nor a failure, and comparing `null < 0.9` would book every ungraded row as a failure to review.
|
|
28
|
+
5. Of the rest, a task counts as **failed** if `final_status != "SUCCESS"` **or** `weighted_score < 0.9`. Skip passing tasks for now (we may extend to passing tasks later — the schema supports it).
|
|
28
29
|
|
|
29
30
|
If no `task.json` files exist, write an empty `review_index.json` (`{"reviews": []}`) and exit.
|
|
30
31
|
|
|
@@ -455,3 +455,99 @@ with the two `action.yml` items above — one considered change to the action's
|
|
|
455
455
|
`final_status`, which does not exist in `run.json` and would have made a new
|
|
456
456
|
assertion dead on arrival. Guard: assert the key set that non-Python consumers
|
|
457
457
|
depend on, mirroring how CE030 pins doc/schema parity.
|
|
458
|
+
- [ ] **A probe task's detector must not be satisfiable from the sandbox-readable task
|
|
459
|
+
YAML.** `docker_runner._stage_inputs` serialises the post-override `TaskDefinition` to
|
|
460
|
+
`/work/input/task.yaml` and mounts `tasks/` again at `/work/task_dir`, both agent-readable.
|
|
461
|
+
Two probes now depend on NOT being satisfiable from that text — `anti_cheat_reference` via a
|
|
462
|
+
regex that cannot match its own source, `record_cli_responses` via a log-derived detector —
|
|
463
|
+
and nothing enforces it. `record_cli_responses` originally shipped (in review) with
|
|
464
|
+
`file_contains` needles that were verbatim in its own YAML, which would have let a
|
|
465
|
+
transcribing agent pass while dispatch was dead. Guard: for every `smoke-pass` task, assert no
|
|
466
|
+
`file_contains` needle / `file_matches_regex` pattern on a must-match criterion appears in the
|
|
467
|
+
serialised task YAML. Deferred: needs per-criterion-type handling and a real false-positive
|
|
468
|
+
pass (paths and generic words will collide), so well over 30 min.
|
|
469
|
+
- [ ] **A new shim failure mode must still RECORD the invocation.** A generated shim that dies
|
|
470
|
+
before `record()` leaves a log byte-identical to "the agent never ran it", which passes a
|
|
471
|
+
`max_count: 0` guard. The sidecar import was exactly that, caught only in review. Guard:
|
|
472
|
+
render each shim shape, break each external dependency in turn, assert the log is non-empty.
|
|
473
|
+
Deferred: "each external dependency" has no enumeration today, so the rule needs a seam
|
|
474
|
+
(a declared list of what a shim depends on) before it can be mechanical rather than a
|
|
475
|
+
hand-maintained list that decays.
|
|
476
|
+
- [ ] **A generated-artifact invariant must be asserted against a real run of that artifact,
|
|
477
|
+
not against the config that produced it.** `TestRecordCliProbeIntegrity` first shipped
|
|
478
|
+
comparing the task YAML with itself and hardcoding `"rule": 0` — a spelling `json.dumps`'s
|
|
479
|
+
default separators own — so a separator change would have left it green while the blocking CI
|
|
480
|
+
probe failed. Now fixed for this case by running a real shim. Deferred as a general guard:
|
|
481
|
+
"derives its expectation from the thing it checks" is not mechanically detectable; it belongs
|
|
482
|
+
in the review rubric rather than a lint rule.
|
|
483
|
+
|
|
484
|
+
- [ ] A `_*TurnState` (agent turn-state) attribute that is written but never read
|
|
485
|
+
outside its own assignment — CE037-class dead accumulator. Surfaced during the
|
|
486
|
+
Pi harness port: `_PiTurnState.turns_finished` was copied from OpenCode's
|
|
487
|
+
`steps_finished` (which drives that agent's `finished_without_tokens` guard) but
|
|
488
|
+
Pi deliberately dropped that guard, leaving the counter dead. Fixed by hand this
|
|
489
|
+
run. Guard would need cross-method dataflow over each `Agent`-subclass turn-state
|
|
490
|
+
class (write sites vs read sites), which the AST-only CExxx runner can't express
|
|
491
|
+
in ~30 min — deferred. Caught in: Pi harness Phase 2 quality review.
|
|
492
|
+
|
|
493
|
+
- [ ] A duration/count aggregate over run-task rows that fails to exclude
|
|
494
|
+
`mature_skipped`. Nothing guards it: the CExxx runner is Python-AST only and
|
|
495
|
+
this defect class lives in the evalboard's TypeScript. A codex nightly
|
|
496
|
+
rendered "1300 tasks · 15h 29m" for the 397 tasks that actually ran. Fixed
|
|
497
|
+
for the two whole-run sites by extracting `deriveRunDuration`; a general
|
|
498
|
+
guard needs a TS lint surface the harness does not have.
|
|
499
|
+
Caught in: timing-capture Phase 1 review.
|
|
500
|
+
|
|
501
|
+
- [ ] Subtracting a SUM of intervals from a wall span where the intervals can
|
|
502
|
+
overlap. Semantic, not syntactic — an AST rule cannot tell a sum of
|
|
503
|
+
durations from a union. Antigravity shipped it: four concurrent 400ms tool
|
|
504
|
+
calls inside a 1000ms window summed to 1600ms and clamped generation to the
|
|
505
|
+
0.0 the change existed to remove. The real guard is the replay-based
|
|
506
|
+
`assert_timing_captured` golden sensor, which now exists; a static rule
|
|
507
|
+
would not have caught it. Caught in: timing-capture Phase 3 review.
|
|
508
|
+
|
|
509
|
+
- [ ] A test fixture whose field name does not exist on the type it models.
|
|
510
|
+
`parseMessages`'s `CommandEntry` keys on `tool_id`; a fixture using
|
|
511
|
+
`tool_use_id` never resolves, params fall back to `{}`, and every tool
|
|
512
|
+
weighs exactly 1 — which silently turned a "split by content size" test
|
|
513
|
+
into a 99%-thinking assertion that passed. TypeScript accepts it because
|
|
514
|
+
the fixtures are untyped object literals. Typing the fixture factories
|
|
515
|
+
against the real interfaces would guard the whole class; that is a
|
|
516
|
+
sweep across the evalboard test suite, not ~30 min.
|
|
517
|
+
Caught in: timing-capture Phase 5 review.
|
|
518
|
+
|
|
519
|
+
### Deferred timing divergences (not guardrails — accounting gaps)
|
|
520
|
+
|
|
521
|
+
Recorded here as well as in `docs/agents/HARNESS_PARITY.md` § Known
|
|
522
|
+
divergences, so the deferred-work record is one place. Measurements in
|
|
523
|
+
`c/time-bugs-audit.md`.
|
|
524
|
+
|
|
525
|
+
- [ ] **Antigravity books orphan-poll waiting as agent duration** (audit P2-1).
|
|
526
|
+
A task can spend `0.8 × turn_timeout` waiting on a tool call that never
|
|
527
|
+
reaches DONE — 14 tasks, 9.6h of one 83h run. Only CLOSED tool intervals are
|
|
528
|
+
subtracted from a generation window, so that wait stays inside whichever
|
|
529
|
+
window contains it; the force-close records `execution_completed_at` while
|
|
530
|
+
leaving `duration_ms` as `None`. Deliberately out of scope of the timing
|
|
531
|
+
work: closing it means deciding whether a backgrounded tool's elapsed time
|
|
532
|
+
is model time (the model IS generating while it runs), which is a semantic
|
|
533
|
+
question, not a bug fix.
|
|
534
|
+
|
|
535
|
+
- [ ] **Delegate (`delegate-sdk`) records no execution bounds** (audit P3-1).
|
|
536
|
+
It reports `duration_ms` but neither `execution_started_at` nor
|
|
537
|
+
`execution_completed_at`, so its tool calls cannot be placed on a timeline.
|
|
538
|
+
Coverage is ~88%, so it is not urgent. The agent lives in the separate
|
|
539
|
+
`coder_eval_uipath` repo; mirror the Codex change there
|
|
540
|
+
(`_item_timing` + threading the SDK stamps through the telemetry builders).
|
|
541
|
+
|
|
542
|
+
- [ ] **Pre-existing, surfaced by this work's final review: `TokenUsage._adopt_legacy_input_tokens`
|
|
543
|
+
double-counts the cache buckets.** The validator copies a legacy record's
|
|
544
|
+
full-prompt `input_tokens` straight into `uncached_input_tokens`, and the
|
|
545
|
+
computed `input_tokens` then adds `cache_creation` + `cache_read` again. A
|
|
546
|
+
legacy record with `input_tokens=1000`, `cache_creation=200`, `cache_read=150`
|
|
547
|
+
reloads as 1350 prompt tokens and bills 1000 at the uncached rate instead of
|
|
548
|
+
650. Affects every report, budget check and detached regrade over a
|
|
549
|
+
pre-split run that used prompt caching. NOT touched by the timing work
|
|
550
|
+
(token accounting was explicitly out of its scope) and not a guardrail
|
|
551
|
+
candidate — a real bug needing its own change, with a decision about
|
|
552
|
+
whether legacy records can be distinguished from current ones at all.
|
|
553
|
+
Caught in: timing-capture final review (gpt-5.6-sol).
|
|
@@ -12,6 +12,9 @@ runs/<run_id>/<variant_id>/<task_id>/<NN>/{task.json, task.log, artifacts/}
|
|
|
12
12
|
- `<NN>` — zero-padded replicate index (e.g. `00`, `01`).
|
|
13
13
|
- `task.json` — the persisted per-replicate result (the consumer contract; carries the large `iterations` array — still accepted under its former name `turns` when reading, but not what current runs write).
|
|
14
14
|
- `task.json.malformed` — present only on the docker degrade path: when an existing `task.json` fails to parse (schema skew from a stale `:latest` image, or a truncated/torn write), the docker runner moves the unparseable original aside to this sidecar and writes a synthetic `final_status=ERROR` `task.json` in its place. Diagnostic-only; `rglob("task.json")` consumers do not match it.
|
|
15
|
+
- `task.execute.json` — present only after a DETACHED grade (`coder-eval evaluate <run_dir>` or `coder-eval run --resume` over a `NOT_GRADED` row). The pre-grade snapshot of `task.json`, written once and never overwritten by a later grade, so "this run was executed separately from grading" stays auditable. Diagnostic-only; `rglob("task.json")` consumers do not match it.
|
|
16
|
+
- `task.json.graded` — present only after `coder-eval execute --driver docker` refused a container's verdict: the runtime image predated `execute` and graded anyway, so the runner quarantines the graded record here rather than leaving it readable as `task.json`, where a later `--resume` / `aggregate` would fold in exactly the row it declined to publish. Diagnostic-only; `rglob("task.json")` consumers do not match it.
|
|
17
|
+
- `grade.log` — present only after a DETACHED grade over this directory (`coder-eval run --resume`). The grading pass's own log. It is a separate file because the log handler truncates whatever file it opens, so writing to `task.log` would destroy the agent trajectory log the run already paid for.
|
|
15
18
|
- `task.log` — the human-readable task log; `artifacts/` — files the agent produced.
|
|
16
19
|
|
|
17
20
|
**Scope-marker files** (used to detect what a given path represents):
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
-->
|
|
13
13
|
<meta
|
|
14
14
|
name="description"
|
|
15
|
-
content="Coder Eval is Playwright for coding agents: an open-source, agent-agnostic framework for evaluating and benchmarking AI coding agents and their skills — sandboxed runs of Claude Code, Codex, Antigravity (Gemini), or
|
|
15
|
+
content="Coder Eval is Playwright for coding agents: an open-source, agent-agnostic framework for evaluating and benchmarking AI coding agents and their skills — sandboxed runs of Claude Code, Codex, Antigravity (Gemini), OpenCode, or Pi against declarative YAML tasks, with weighted scoring and CI gates. Documentation: coder-eval.com/docs"
|
|
16
16
|
/>
|
|
17
17
|
|
|
18
18
|
<!--
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
<p class="lead">
|
|
228
228
|
<strong>Playwright for coding agents.</strong> An open-source, agent-agnostic framework for
|
|
229
229
|
evaluating and benchmarking AI coding agents and their skills: it runs a real agent — Claude
|
|
230
|
-
Code, Codex, Antigravity (Gemini), or
|
|
230
|
+
Code, Codex, Antigravity (Gemini), OpenCode, or Pi — in a sandbox against declarative YAML
|
|
231
231
|
tasks, then scores the files and commands the agent actually produced.
|
|
232
232
|
</p>
|
|
233
233
|
<p class="notice">
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Harbor end-to-end smoke test.
|
|
3
|
+
|
|
4
|
+
Exports a handful of coder-eval tasks to Harbor (`coder-eval export --format
|
|
5
|
+
harbor`), runs each with `hb run -a coder_eval.harbor.agent:CoderEvalAgent`
|
|
6
|
+
against real Docker, and asserts that:
|
|
7
|
+
|
|
8
|
+
- the verifier phase wrote `reward.json` with `reward == 1.0`
|
|
9
|
+
- the agent phase wrote a real ATIF `trajectory.json`
|
|
10
|
+
- both the agent and verifier phases left a `task.json` behind
|
|
11
|
+
|
|
12
|
+
Invoked by `.github/workflows/harbor-e2e.yml` -- deliberately NOT part of
|
|
13
|
+
`make test`: it shells out to a real `hb` CLI, real Docker builds, and (for
|
|
14
|
+
the llm_judge scenario) a real model call, none of which belong in the fast
|
|
15
|
+
unit-test suite.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import json
|
|
21
|
+
import shutil
|
|
22
|
+
import subprocess
|
|
23
|
+
import sys
|
|
24
|
+
from dataclasses import dataclass
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
29
|
+
WORK_DIR = REPO_ROOT / "tmp" / "harbor_e2e"
|
|
30
|
+
AGENT_IMPORT_PATH = "coder_eval.harbor.agent:CoderEvalAgent"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass(frozen=True)
|
|
34
|
+
class Scenario:
|
|
35
|
+
"""One (task.yaml, export flags) pair to round-trip through Harbor."""
|
|
36
|
+
|
|
37
|
+
name: str
|
|
38
|
+
task_file: Path
|
|
39
|
+
allow_credentials: bool = False
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
SCENARIOS: list[Scenario] = [
|
|
43
|
+
# "tmpdir" baseline: plain docker driver, default coder-eval-agent image,
|
|
44
|
+
# no dockerfile_path / template_sources / llm_judge -- exercises the bare
|
|
45
|
+
# export -> CoderEvalAgent -> --workspace-dir -> verifier round trip.
|
|
46
|
+
Scenario("baseline", REPO_ROOT / "tests/harbor_e2e/fixtures/docker_baseline.yaml"),
|
|
47
|
+
# llm_judge: real model call inside the VERIFIER phase, not just the agent.
|
|
48
|
+
Scenario("llm_judge", REPO_ROOT / "tests/harbor_e2e/fixtures/llm_judge.yaml", allow_credentials=True),
|
|
49
|
+
# Custom (BYOD) Docker image via dockerfile_path -- reuses the in-tree
|
|
50
|
+
# byod_smoke_test task/image rather than duplicating it.
|
|
51
|
+
Scenario("docker_custom_image", REPO_ROOT / "tasks/byod_smoke_test.yaml"),
|
|
52
|
+
# template_sources: TemplateDirSource copy-in + rewritten path, plus
|
|
53
|
+
# sandbox.python.env_packages surviving the agent-phase task.yaml merge.
|
|
54
|
+
Scenario("template_sources", REPO_ROOT / "tests/harbor_e2e/fixtures/template_sources.yaml"),
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _run(cmd: list[str]) -> subprocess.CompletedProcess[str]:
|
|
59
|
+
print(f"+ {' '.join(cmd)}", flush=True)
|
|
60
|
+
return subprocess.run(cmd, check=False, text=True, capture_output=True)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def export_task(scenario: Scenario, out_dir: Path) -> None:
|
|
64
|
+
if out_dir.exists():
|
|
65
|
+
shutil.rmtree(out_dir)
|
|
66
|
+
cmd = ["coder-eval", "export", str(scenario.task_file), "-o", str(out_dir)]
|
|
67
|
+
if scenario.allow_credentials:
|
|
68
|
+
cmd.append("--allow-credentials")
|
|
69
|
+
result = _run(cmd)
|
|
70
|
+
print(result.stdout)
|
|
71
|
+
print(result.stderr, file=sys.stderr)
|
|
72
|
+
if result.returncode != 0:
|
|
73
|
+
raise RuntimeError(f"[{scenario.name}] `coder-eval export` failed (exit {result.returncode})")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def run_harbor(scenario: Scenario, export_dir: Path, jobs_dir: Path) -> Path:
|
|
77
|
+
if jobs_dir.exists():
|
|
78
|
+
shutil.rmtree(jobs_dir)
|
|
79
|
+
cmd = [
|
|
80
|
+
"hb",
|
|
81
|
+
"run",
|
|
82
|
+
"-p",
|
|
83
|
+
str(export_dir),
|
|
84
|
+
"-a",
|
|
85
|
+
AGENT_IMPORT_PATH,
|
|
86
|
+
"--jobs-dir",
|
|
87
|
+
str(jobs_dir),
|
|
88
|
+
"-n",
|
|
89
|
+
"1",
|
|
90
|
+
"-y",
|
|
91
|
+
]
|
|
92
|
+
result = _run(cmd)
|
|
93
|
+
print(result.stdout)
|
|
94
|
+
print(result.stderr, file=sys.stderr)
|
|
95
|
+
if result.returncode != 0:
|
|
96
|
+
raise RuntimeError(f"[{scenario.name}] `hb run` failed (exit {result.returncode})")
|
|
97
|
+
|
|
98
|
+
# <jobs_dir>/<job_timestamp>/<trial_name>/{agent,verifier}/... -- glob for
|
|
99
|
+
# the one directory two levels down that actually holds a verifier/ output,
|
|
100
|
+
# rather than assuming a fixed trial-name shape Harbor doesn't guarantee.
|
|
101
|
+
trial_dirs = [d for d in jobs_dir.glob("*/*/") if (d / "verifier").is_dir()]
|
|
102
|
+
if len(trial_dirs) != 1:
|
|
103
|
+
raise RuntimeError(
|
|
104
|
+
f"[{scenario.name}] expected exactly one trial directory under {jobs_dir}, found {len(trial_dirs)}"
|
|
105
|
+
)
|
|
106
|
+
return trial_dirs[0]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def assert_scenario_artifacts(scenario: Scenario, trial_dir: Path) -> None:
|
|
110
|
+
reward_path = trial_dir / "verifier" / "reward.json"
|
|
111
|
+
if not reward_path.is_file():
|
|
112
|
+
raise RuntimeError(f"[{scenario.name}] missing {reward_path}")
|
|
113
|
+
reward = json.loads(reward_path.read_text(encoding="utf-8"))
|
|
114
|
+
if reward.get("reward") != 1.0:
|
|
115
|
+
raise RuntimeError(f"[{scenario.name}] expected reward 1.0, got {reward!r} ({reward_path})")
|
|
116
|
+
|
|
117
|
+
trajectory_path = trial_dir / "agent" / "trajectory.json"
|
|
118
|
+
if not trajectory_path.is_file():
|
|
119
|
+
raise RuntimeError(f"[{scenario.name}] missing {trajectory_path}")
|
|
120
|
+
trajectory = json.loads(trajectory_path.read_text(encoding="utf-8"))
|
|
121
|
+
if "schema_version" not in trajectory:
|
|
122
|
+
raise RuntimeError(f"[{scenario.name}] {trajectory_path} is missing 'schema_version'")
|
|
123
|
+
|
|
124
|
+
agent_task_jsons = list((trial_dir / "agent").glob("**/task.json"))
|
|
125
|
+
if not agent_task_jsons:
|
|
126
|
+
raise RuntimeError(f"[{scenario.name}] no task.json found under {trial_dir / 'agent'}")
|
|
127
|
+
verifier_task_json = trial_dir / "verifier" / "task.json"
|
|
128
|
+
if not verifier_task_json.is_file():
|
|
129
|
+
raise RuntimeError(f"[{scenario.name}] missing {verifier_task_json}")
|
|
130
|
+
|
|
131
|
+
print(
|
|
132
|
+
f"[{scenario.name}] OK: reward=1.0, trajectory.json present, "
|
|
133
|
+
+ f"{len(agent_task_jsons)} agent task.json + verifier/task.json present"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def main() -> int:
|
|
138
|
+
WORK_DIR.mkdir(parents=True, exist_ok=True)
|
|
139
|
+
failures: list[str] = []
|
|
140
|
+
for scenario in SCENARIOS:
|
|
141
|
+
export_dir = WORK_DIR / scenario.name / "export"
|
|
142
|
+
jobs_dir = WORK_DIR / scenario.name / "jobs"
|
|
143
|
+
print(f"\n=== {scenario.name} ===", flush=True)
|
|
144
|
+
try:
|
|
145
|
+
export_task(scenario, export_dir)
|
|
146
|
+
trial_dir = run_harbor(scenario, export_dir, jobs_dir)
|
|
147
|
+
assert_scenario_artifacts(scenario, trial_dir)
|
|
148
|
+
except Exception as exc:
|
|
149
|
+
print(f"[{scenario.name}] FAILED: {exc}", file=sys.stderr)
|
|
150
|
+
failures.append(scenario.name)
|
|
151
|
+
|
|
152
|
+
print("\n=== Summary ===")
|
|
153
|
+
for scenario in SCENARIOS:
|
|
154
|
+
print(f" {scenario.name}: {'FAILED' if scenario.name in failures else 'OK'}")
|
|
155
|
+
|
|
156
|
+
if failures:
|
|
157
|
+
print(f"\n{len(failures)}/{len(SCENARIOS)} scenario(s) failed: {', '.join(failures)}", file=sys.stderr)
|
|
158
|
+
return 1
|
|
159
|
+
return 0
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
if __name__ == "__main__":
|
|
163
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Harbor E2E
|
|
2
|
+
|
|
3
|
+
# Deliberately NOT triggered on pull_request: this exercises real Docker
|
|
4
|
+
# builds, a real `harbor` install, and (for the llm_judge scenario) a real
|
|
5
|
+
# model call, so it is informational rather than a required PR check for now
|
|
6
|
+
# (see .github/scripts/harbor_e2e.py's module docstring). workflow_dispatch
|
|
7
|
+
# lets a maintainer run it on demand; the nightly schedule catches drift
|
|
8
|
+
# between coder-eval's own release and Harbor's own upstream releases without
|
|
9
|
+
# blocking anyone's PR.
|
|
10
|
+
on:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
schedule:
|
|
13
|
+
- cron: "17 5 * * *" # nightly, off the hour to avoid GitHub's peak-load pile-up
|
|
14
|
+
push:
|
|
15
|
+
branches: [main]
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
env:
|
|
25
|
+
TELEMETRY_ENABLED: "false"
|
|
26
|
+
# Route through Bedrock, mirroring pr-checks.yml's smoke-pass job -- keeps
|
|
27
|
+
# Anthropic-credit spend off this path; DirectRoute is exercised elsewhere.
|
|
28
|
+
API_BACKEND: "bedrock"
|
|
29
|
+
CLAUDE_CODE_USE_BEDROCK: "1"
|
|
30
|
+
AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
|
|
31
|
+
AWS_REGION: ${{ secrets.AWS_REGION }}
|
|
32
|
+
BEDROCK_MODEL: ${{ secrets.BEDROCK_MODEL }}
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
harbor-e2e:
|
|
36
|
+
name: Harbor export + CoderEvalAgent round trip
|
|
37
|
+
runs-on: uipath-ubuntu-latest
|
|
38
|
+
timeout-minutes: 20
|
|
39
|
+
|
|
40
|
+
steps:
|
|
41
|
+
- name: Checkout code
|
|
42
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
43
|
+
|
|
44
|
+
- name: Set up Python 3.13
|
|
45
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
46
|
+
with:
|
|
47
|
+
python-version: "3.13"
|
|
48
|
+
|
|
49
|
+
- name: Set up Node.js 20
|
|
50
|
+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
51
|
+
with:
|
|
52
|
+
node-version: "20"
|
|
53
|
+
|
|
54
|
+
- name: Install Claude CLI
|
|
55
|
+
run: npm install -g @anthropic-ai/claude-code
|
|
56
|
+
|
|
57
|
+
- name: Cache dependencies
|
|
58
|
+
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
59
|
+
with:
|
|
60
|
+
path: |
|
|
61
|
+
~/.cache/uv
|
|
62
|
+
~/.cache/pip
|
|
63
|
+
key: ${{ runner.os }}-py3.13-harbor-e2e-${{ hashFiles('pyproject.toml', 'uv.lock') }}
|
|
64
|
+
restore-keys: |
|
|
65
|
+
${{ runner.os }}-py3.13-harbor-e2e-
|
|
66
|
+
|
|
67
|
+
- name: Install uv
|
|
68
|
+
run: |
|
|
69
|
+
python -m pip install --upgrade "pip>=26.2"
|
|
70
|
+
pip install uv
|
|
71
|
+
|
|
72
|
+
- name: Install project dependencies (hash-verified from uv.lock)
|
|
73
|
+
# --extra harbor installs `harbor` into the SAME venv as coder-eval:
|
|
74
|
+
# CoderEvalAgent is resolved by `hb run -a
|
|
75
|
+
# coder_eval.harbor.agent:CoderEvalAgent` on the HOST process, so
|
|
76
|
+
# `harbor` and `coder_eval` must be importable from the same
|
|
77
|
+
# interpreter (see harbor/agent.py's module docstring). The version is
|
|
78
|
+
# pinned once, in pyproject.toml's `harbor` extra -- bump it there.
|
|
79
|
+
run: uv sync --frozen --extra dev --extra harbor
|
|
80
|
+
|
|
81
|
+
- name: Put the project venv on PATH
|
|
82
|
+
run: echo "${{ github.workspace }}/.venv/bin" >> "$GITHUB_PATH"
|
|
83
|
+
|
|
84
|
+
- name: Build coder-eval-agent base Docker image
|
|
85
|
+
run: make docker-image
|
|
86
|
+
|
|
87
|
+
- name: Build BYOD template Docker image
|
|
88
|
+
run: docker build -t byod-custom-image:0.1.0 templates/byod_smoke_test/
|
|
89
|
+
|
|
90
|
+
- name: Run Harbor E2E scenarios
|
|
91
|
+
run: python .github/scripts/harbor_e2e.py
|
|
@@ -80,7 +80,9 @@ jobs:
|
|
|
80
80
|
pip install uv
|
|
81
81
|
|
|
82
82
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
83
|
-
|
|
83
|
+
# --extra harbor: pyright below type-checks src/coder_eval/harbor/agent.py
|
|
84
|
+
# against harbor's real types, not a scoped ignore.
|
|
85
|
+
run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm --extra harbor
|
|
84
86
|
|
|
85
87
|
# PHASE 1: Fast checks (fail early)
|
|
86
88
|
- name: Check code formatting (ruff format)
|
|
@@ -385,7 +387,9 @@ jobs:
|
|
|
385
387
|
pip install uv
|
|
386
388
|
|
|
387
389
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
388
|
-
|
|
390
|
+
# --extra harbor: pyright below type-checks src/coder_eval/harbor/agent.py
|
|
391
|
+
# against harbor's real types, not a scoped ignore.
|
|
392
|
+
run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm --extra harbor
|
|
389
393
|
|
|
390
394
|
- name: Check code formatting (ruff format)
|
|
391
395
|
run: .venv/Scripts/ruff format --check src/ tests/
|
|
@@ -469,16 +473,16 @@ jobs:
|
|
|
469
473
|
AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
|
|
470
474
|
AWS_REGION: ${{ secrets.AWS_REGION }}
|
|
471
475
|
BEDROCK_MODEL: ${{ secrets.BEDROCK_MODEL }}
|
|
472
|
-
# tasks_run for --tags smoke-pass.
|
|
476
|
+
# tasks_run for --tags smoke-pass. 8 task files (hello_date, dataset_example,
|
|
473
477
|
# smoke_llm_judge, smoke_agent_judge, byod_smoke_test, agentless_smoke_test,
|
|
474
|
-
# anti_cheat_reference); dataset_example fans out to 2
|
|
475
|
-
# sub-tasks. If you add/remove a smoke-pass task or change
|
|
476
|
-
# count, bump these.
|
|
478
|
+
# anti_cheat_reference, record_cli_responses); dataset_example fans out to 2
|
|
479
|
+
# inline rows, so 9 sub-tasks. If you add/remove a smoke-pass task or change
|
|
480
|
+
# the dataset row count, bump these.
|
|
477
481
|
#
|
|
478
482
|
# anti_cheat_reference lives in a SUBDIRECTORY, which `tasks/*.yaml` does not
|
|
479
483
|
# match — the smoke-pass step names its path explicitly. Keep that in sync.
|
|
480
|
-
EXPECTED_SMOKE_PASS_RUN: "
|
|
481
|
-
EXPECTED_SMOKE_PASS_SUCCEEDED: "
|
|
484
|
+
EXPECTED_SMOKE_PASS_RUN: "9"
|
|
485
|
+
EXPECTED_SMOKE_PASS_SUCCEEDED: "9"
|
|
482
486
|
# smoke-fail bucket: three tasks expected to fail.
|
|
483
487
|
# 1. smoke_negative_path: file_contains criterion is unsatisfiable
|
|
484
488
|
# (sentinel-string regression detection for success-checker).
|
|
@@ -549,6 +553,9 @@ jobs:
|
|
|
549
553
|
# explicitly. anti_cheat_reference is the adversarial probe that the agent
|
|
550
554
|
# cannot read the reference solution during its turn; it needs the
|
|
551
555
|
# coder-eval-agent image built above (it is a driver: docker task).
|
|
556
|
+
# record_cli_responses is the record_cli per-invocation-response probe and
|
|
557
|
+
# is also driver: docker, so it needs that same image; it is flat in
|
|
558
|
+
# tasks/, so the glob already matches it.
|
|
552
559
|
- name: Run smoke-pass bucket (expect all to succeed)
|
|
553
560
|
run: |
|
|
554
561
|
.venv/bin/coder-eval run tasks/*.yaml tasks/anti_cheat_reference/*.yaml \
|
|
@@ -541,6 +541,18 @@ jobs:
|
|
|
541
541
|
"uploaded run dir before re-running; this is an unattended paid job.")
|
|
542
542
|
sys.exit(1)
|
|
543
543
|
|
|
544
|
+
# NOT_GRADED means a task ran but was never scored. This job invokes the
|
|
545
|
+
# published action, which runs `coder-eval run` (graded), so reaching it is
|
|
546
|
+
# impossible unless the action started dispatching `coder-eval execute` --
|
|
547
|
+
# in which case every score gate below silently measures nothing and the job
|
|
548
|
+
# goes green having verified no verdict at all. Hard-fail, don't tolerate.
|
|
549
|
+
ungraded = [s for s in statuses if s == "NOT_GRADED"]
|
|
550
|
+
if ungraded:
|
|
551
|
+
print("::error::task(s) reported NOT_GRADED -- the published action ran without "
|
|
552
|
+
"grading. `coder-eval run` always grades, so the action is dispatching the "
|
|
553
|
+
"wrong command and every score gate in this job is measuring nothing.")
|
|
554
|
+
sys.exit(1)
|
|
555
|
+
|
|
544
556
|
# Exit-contract check, conditional on the model having actually performed.
|
|
545
557
|
# Ignoring the step's exit code entirely (see the continue-on-error rationale
|
|
546
558
|
# above) would also hide a REGRESSION in the action's own exit logic -- e.g. a
|