coder-eval 0.12.16__tar.gz → 0.12.17__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.12.16 → coder_eval-0.12.17}/.claude/harness-candidates.md +8 -12
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/agents.md +8 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/isolation.md +197 -6
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/lint-rules.md +9 -10
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/orchestration.md +73 -9
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/persistence.md +1 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/pr-checks.yml +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/CHANGELOG.md +250 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/CLAUDE.md +3 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/PKG-INFO +2 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/action.yml +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DATASETS.md +4 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DIALOG_MODE.md +87 -11
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/DOCKER_ISOLATION.md +264 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/EXTENDING.md +8 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/REPORT_SCHEMA.md +18 -4
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/TASK_DEFINITION_GUIDE.md +73 -13
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/USER_GUIDE.md +16 -12
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/DELEGATE.md +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/HARNESS_PARITY.md +37 -22
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/06-use-docker-isolation.md +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/harness-badge.test.tsx +4 -5
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/harness-selector.test.tsx +2 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/harness-badge.tsx +5 -16
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/scribe/page.tsx +1 -1
- coder_eval-0.12.17/osv-scanner.toml +7 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/pyproject.toml +6 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate_agent.py +4 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/evaluate_command.py +29 -20
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/execute_command.py +2 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_command.py +21 -33
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_task_internal_command.py +67 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/agent_judge.py +7 -10
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/llm_judge.py +8 -16
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/system_one_judge.py +20 -4
- coder_eval-0.12.17/src/coder_eval/egress_proxy.py +476 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/__init__.py +2 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/executor.py +5 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/judge.py +16 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_context.py +134 -5
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_persistence.py +4 -11
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/formatting.py +2 -6
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/packager.py +6 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/docker_runner.py +239 -67
- coder_eval-0.12.17/src/coder_eval/isolation/egress.py +613 -0
- coder_eval-0.12.17/src/coder_eval/isolation/errors.py +20 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/__init__.py +8 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/agent_config.py +48 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/enums.py +6 -8
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/experiment.py +1 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/limits.py +10 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/results.py +42 -55
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/sandbox.py +123 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/tasks.py +124 -15
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/telemetry.py +1 -20
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/batch.py +21 -20
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/experiment.py +17 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/regrade.py +65 -25
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/task_loader.py +5 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestrator.py +331 -193
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/path_utils.py +9 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/helpers.py +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/html.py +15 -30
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/run_record.py +1 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/__init__.py +10 -0
- coder_eval-0.12.17/src/coder_eval/simulation/scripted_user.py +38 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/termination.py +8 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/collector.py +2 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/README.md +1 -0
- coder_eval-0.12.17/tasks/docker_egress_probe/docker_egress_grading.yaml +27 -0
- coder_eval-0.12.17/tasks/docker_egress_probe/docker_egress_probe.yaml +75 -0
- coder_eval-0.12.17/tasks/docker_egress_probe/egress_probe.py +258 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +8 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +13 -3
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/README.md +18 -5
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_a_tool_call.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_b_max_turns_cut.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_c_error_frame_crash.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_d_orphaned_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_e_tool_only_call_crosses_cap.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/delegate_f_batched_tools_in_sequence.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce060_message_id_declared.py +3 -5
- coder_eval-0.12.17/tests/test_bai_judge_review_regressions.py +140 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cost_accounting_paths.py +9 -17
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_criterion_result_round_trip.py +2 -44
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_custom_lint.py +3 -2
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_dataset_expansion.py +42 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent.py +62 -1
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_detached_grading_boundaries.py +32 -52
- coder_eval-0.12.17/tests/test_detached_grading_watchdog.py +54 -0
- coder_eval-0.12.17/tests/test_dialog_judge_provenance.py +241 -0
- coder_eval-0.12.17/tests/test_docker_egress_config.py +117 -0
- coder_eval-0.12.17/tests/test_docker_egress_runner.py +759 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_litellm_env.py +7 -9
- coder_eval-0.12.17/tests/test_egress_grading_phase.py +174 -0
- coder_eval-0.12.17/tests/test_egress_proxy.py +395 -0
- coder_eval-0.12.17/tests/test_egress_targets.py +205 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_event_collector.py +1 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_evaluate_loop.py +282 -5
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_resolver.py +28 -0
- coder_eval-0.12.17/tests/test_grading_cli_failure_boundaries.py +258 -0
- coder_eval-0.12.17/tests/test_grading_container_failure.py +128 -0
- coder_eval-0.12.17/tests/test_grading_execution_completion.py +298 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_packager.py +6 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_persistence.py +0 -25
- coder_eval-0.12.17/tests/test_judge_retry_attempt_labels.py +476 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_characterization.py +22 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_models.py +0 -40
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_regrade.py +16 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_html.py +23 -30
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_retry_logic_comprehensive.py +18 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_models.py +11 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_orchestrator.py +132 -25
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_limits_resolver.py +24 -0
- coder_eval-0.12.17/tests/test_scripted_dialog.py +408 -0
- coder_eval-0.12.17/tests/test_scripted_user.py +44 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_seed_from_prior_result.py +5 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_config.py +121 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_termination.py +42 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_trials.py +53 -0
- coder_eval-0.12.17/tests/test_skillsbench_3d_scan_calc_verifier.py +83 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_orchestrator.py +2 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/uv.lock +172 -131
- coder_eval-0.12.16/osv-scanner.toml +0 -15
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/context-window.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/contracts.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/permissions.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/reporting.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/notes/timing.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/axes.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.claude-plugin/marketplace.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.env.example +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/CODEOWNERS +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/actionlint.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/code_review.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/dependabot.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/harbor_e2e.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/harbor-e2e.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/release.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.github/workflows/verify-published-action.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.gitignore +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/.python-version +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/ADOPTERS.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/CONTRIBUTING.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/LICENSE +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/Makefile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/NOTICE +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/SECURITY.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/comparison.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/AB_EXPERIMENTS.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/CI_GATE.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/PLUGIN.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/CLAUDE_CODE.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/CODEX.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/OPENCODE.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/agents/PI.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/assets/hero.gif +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/comparison.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/index.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/llms.txt +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/02-ci-pipeline.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/docs/tutorials/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/.gitignore +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/skeleton.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/globals.css +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/icon.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/loading.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/scribe/run-table.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/package.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/harness/pi.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/default.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/cost_logger.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/mkdocs.yml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/run-layout.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/init/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/plugins/coder-eval/skills/task/SKILL.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/antigravity.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/claude-code.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/codex.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/opencode.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/corpus/pi.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/scripts/timing/decompose_run.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/_skills.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/claude_code_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/codex_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate/.gitignore +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/delegate/package.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/opencode_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/pi_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/argv_match.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/evaluate_target.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/export_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/harbor_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/cli_called.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/durations.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_litellm.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_system_one.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/agent_paths.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_emit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_hydrate.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/atif_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/experiment_packager.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/portability.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/harbor/reward.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/invocation_log.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/isolation/eval_material.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/cli_match.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/container_context.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/system_one.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/pricing.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/experiment.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/junit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/reports/markdown.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/result_metrics.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/simulation/utterance.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/stats.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/timing.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/delegate/hello_date_delegate.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/opencode_smoke_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/pi_smoke_test.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/record_cli_responses.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_system_one_judge.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tasks/token_check.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_bracket_clock.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_container_contract.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/codex_rollouts.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/delegate_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_fixtures/timing_union_cases.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/_path_helpers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/conftest.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/atif/known_good_trajectory.json +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/pi_happy_stream.jsonl +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/agent_roster_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/generated.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/plugin_manifest_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/pricing_mirror.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/prose_budget.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/_layers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/_model_ctor.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce051_no_driver_override.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/runner.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/violation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_action_inputs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_context_window.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_agentless.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_emit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_hydrate.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_atif_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_classification_match.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_called_criterion.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_match_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_executed.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_container_context.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_delegate_agent_registration.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_detached_grading_guards.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_durations.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_early_stop.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_error_handling.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_eval_material.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_format_harbor.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluate_target.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_evaluator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_execute_format_harbor.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_file_check.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_formatting.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_e2e_fixtures.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_experiment_packager.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_export_golden.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_portability.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_harbor_reward.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_image_skew_refusal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_integration.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_json_check.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_litellm.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_judge_system_one.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_judge_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_logging.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_mutations.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_opencode_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_parallel.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_path_utils.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_agent.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_agent_config.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pi_smoke_task.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plan_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_plugins.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_post_run.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pre_run.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pricing_mirror.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_prose_budget.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_prose_budget_commands.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reference_permissions.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_registry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_release_notes.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_report_command.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_reports_package.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_result_metrics.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_resume.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_route_seam_exhaustiveness.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_routing.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_helpers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_record.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_summary_rebuild.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_run_task_internal.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_adopt.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_record_cli.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sandbox_venv_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_scorers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_stats.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_stats_nonfinite.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_summaries.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_system_one_judge.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_system_one_judge_live.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_tags.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_telemetry.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_close_window.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_identity_contract.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_timing_union_parity.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_token_usage.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_ungraded_reporting.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_utils.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_watchdog.py +0 -0
- {coder_eval-0.12.16 → coder_eval-0.12.17}/tests/test_yaml_migration.py +0 -0
|
@@ -545,18 +545,10 @@ divergences, so the deferred-work record is one place. Measurements in
|
|
|
545
545
|
as tool execution. Pinned by `unbounded_cases` in
|
|
546
546
|
`tests/_fixtures/timing_union_cases.json`, which both suites replay.
|
|
547
547
|
|
|
548
|
-
- [
|
|
549
|
-
double-counts the cache buckets.** The validator
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
legacy record with `input_tokens=1000`, `cache_creation=200`, `cache_read=150`
|
|
553
|
-
reloads as 1350 prompt tokens and bills 1000 at the uncached rate instead of
|
|
554
|
-
650. Affects every report, budget check and detached regrade over a
|
|
555
|
-
pre-split run that used prompt caching. NOT touched by the timing work
|
|
556
|
-
(token accounting was explicitly out of its scope) and not a guardrail
|
|
557
|
-
candidate — a real bug needing its own change, with a decision about
|
|
558
|
-
whether legacy records can be distinguished from current ones at all.
|
|
559
|
-
Caught in: timing-capture final review (gpt-5.6-sol).
|
|
548
|
+
- [x] ~~**Pre-existing, surfaced by this work's final review: `TokenUsage._adopt_legacy_input_tokens`
|
|
549
|
+
double-counts the cache buckets.**~~ **DONE.** The validator is deleted. Every run
|
|
550
|
+
uploaded in the last 30 days stores `uncached_input_tokens`, so no pre-split record
|
|
551
|
+
is read. Caught in: timing-capture final review (gpt-5.6-sol).
|
|
560
552
|
|
|
561
553
|
- [x] ~~No golden-corpus assertion of the four-bucket identity.~~ **DONE.** The
|
|
562
554
|
fixture clocks were unified (`_rebase_notifications` / `_rebase_lines` shift
|
|
@@ -1032,3 +1024,7 @@ re-derive from scratch.
|
|
|
1032
1024
|
stayed at 1 so `max_turns` never tripped — all silently, with `make verify` green.
|
|
1033
1025
|
A static rule cannot see an SDK field go dead; a live-telemetry smoke (one real turn,
|
|
1034
1026
|
assert `token_usage` is non-empty) in the harness-bump checklist would have.
|
|
1027
|
+
- [ ] Validation regexes anchored with `$` and applied with `.match` (not `.fullmatch`) accept a trailing newline — `"evil.com\n:443"` passed `normalize_egress_target` until it moved to `fullmatch`. A lint rule needs to tell a validation regex from a search regex; not cheap — caught in the network: llm_only Phase 1 review.
|
|
1028
|
+
- [ ] `raise X(...) from exc` where `exc` came from parsing an env/URL value leaks the value through `__cause__` in a traceback (urlsplit put a URL password in its port error). Needs data-flow from env reads; not cheap — caught in the network: llm_only Phase 3 review.
|
|
1029
|
+
- [ ] `await asyncio.to_thread(subprocess.run, ...)` that CREATES a resource inside a try whose `finally` removes it: a cancel leaves the worker thread running, so teardown races the create and leaks it (fixed in `isolation/egress.py` by `_run_to_completion`). Detecting "creates a resource" is not mechanical — caught in the network: llm_only Phase 4 review.
|
|
1030
|
+
- [ ] The single-`asyncio.shield` join in `fs_permissions.set_permissions` does not survive a SECOND cancel of the caller; `isolation/egress._run_to_completion` loops on the shield. Promote that helper to a shared module and use it in both places — caught in the network: llm_only Phase 4 review.
|
|
@@ -92,6 +92,14 @@ The record is BUILT before `_end_turn_ok()` on every harness: a failure inside t
|
|
|
92
92
|
reduction is a failed turn, and `_end_turn_ok` would already have cleared the rollback
|
|
93
93
|
flag `discard_pending_turn` needs.
|
|
94
94
|
|
|
95
|
+
`run_limits.max_turn_retries` bounds replay of the entire `communicate()` call at
|
|
96
|
+
the shared orchestrator wrapper. Benchmarks can set it to zero when replay would
|
|
97
|
+
change the measured trajectory. Unset preserves the existing error-category
|
|
98
|
+
policy. The executor's total-attempt cap includes the first call and is checked
|
|
99
|
+
before backoff, after the failure callback drains the partial. A larger cap cannot
|
|
100
|
+
make a rejected error category retryable. Agent/provider internal retries and
|
|
101
|
+
setup retries keep their own policies.
|
|
102
|
+
|
|
95
103
|
Three exit paths converge on `finalize`, and it is idempotent on all of them, because the
|
|
96
104
|
protocol allows EXACTLY ONE `AgentEndEvent` per `communicate()`: the clean return, the
|
|
97
105
|
crash/timeout kernel, and the outer `except` that can fire *after* a normal finalize (a
|
|
@@ -23,9 +23,10 @@
|
|
|
23
23
|
written and never read. `tests/test_seed_from_prior_result.py` partitions every
|
|
24
24
|
`EvaluationResult` field as CARRIED or RECOMPUTED and fails closed on a new one, and
|
|
25
25
|
asserts the two `_select_gate()` call sites. A prior status that
|
|
26
|
-
`
|
|
27
|
-
**preserved**, never overwritten
|
|
28
|
-
|
|
26
|
+
`EvaluationResult.has_execution_failure` (TIMEOUT / execution or legacy ERROR /
|
|
27
|
+
BUILD_FAILED / the budget stops) is **preserved**, never overwritten. An explicitly
|
|
28
|
+
grading-origin ERROR can instead be repaired, with its incident retained in history;
|
|
29
|
+
see orchestration.md § Grading incidents and execution facts.
|
|
29
30
|
**`MAX_TURNS_EXHAUSTED` is deliberately NOT one of them — anywhere**.
|
|
30
31
|
`_EXECUTION_FACT_STATUSES` maps it to `False`, and the table and the chain that reads
|
|
31
32
|
it must agree: it shipped as `True` while `_terminal_status`'s own docstring argued
|
|
@@ -516,9 +517,10 @@ the `~/.claude` copy the target can be an arbitrary path outside the staging tre
|
|
|
516
517
|
`writable=False` is not cosmetic. The container only ever *reads* and `chmod`s the
|
|
517
518
|
reference copy, so withholding the write bit keeps `_verify_reference_integrity` from being
|
|
518
519
|
the sole guard against tampering during the gaps between windows. The task-dir copy is
|
|
519
|
-
read-only
|
|
520
|
-
|
|
521
|
-
|
|
520
|
+
read-only too: criteria read fixtures there and nothing legitimately writes them. That
|
|
521
|
+
does not stop an agent from rewriting the expectations it is graded against: root keeps
|
|
522
|
+
`CAP_FOWNER` and can chmod the copy back, and `_verify_reference_integrity` does not cover
|
|
523
|
+
it. The `~/.claude` copy IS writable — the CLI rewrites settings and state in place,
|
|
522
524
|
`copytree` preserves host modes, and `~/.claude` is routinely 0700 with 0600 files, which
|
|
523
525
|
without DAC_OVERRIDE is unreadable to the container, so the agent cannot authenticate.
|
|
524
526
|
|
|
@@ -1036,3 +1038,192 @@ separator a value beginning with `-` is parsed as an OPTION rather than a reposi
|
|
|
1036
1038
|
(`--upload-pack=…` runs a command of the caller's choosing). That URL is task-authored, and
|
|
1037
1039
|
since `evaluate <run_dir>` rebuilds the task from a shareable run directory it is no longer
|
|
1038
1040
|
necessarily the operator's own string.
|
|
1041
|
+
|
|
1042
|
+
## The egress sidecar (network: llm_only)
|
|
1043
|
+
|
|
1044
|
+
`network: llm_only` puts the task container on a per-task `--internal` network whose only exit
|
|
1045
|
+
is a proxy sidecar that forwards to an exact `host:port` allowlist. The plan and its spike log
|
|
1046
|
+
are in `c/2026-10-01-docker-no-internet-egress.md` (not committed); the facts that shaped the
|
|
1047
|
+
design are below.
|
|
1048
|
+
|
|
1049
|
+
### Why an explicit proxy, not a transparent one
|
|
1050
|
+
|
|
1051
|
+
Harbor's design (a `gost` sidecar, nftables `redirect`, SNI sniffing, the task in the sidecar's
|
|
1052
|
+
netns with `NET_ADMIN`) also catches tools that ignore proxy env. Phase 0 found no built-in
|
|
1053
|
+
harness that needs it: Claude Code (Bun native binary), Codex (Rust reqwest), Antigravity (Go
|
|
1054
|
+
`ProxyFromEnvironment`) and Pi (undici `EnvHttpProxyAgent` with `NODE_USE_ENV_PROXY=1`) all
|
|
1055
|
+
honour `HTTPS_PROXY`. An explicit proxy needs no capability, no third-party image and no SNI
|
|
1056
|
+
parser, and a tool that ignores it has no route, so it fails closed. iptables inside the task
|
|
1057
|
+
container was rejected because it needs `NET_ADMIN` in the agent's own container, which lets the
|
|
1058
|
+
agent undo it.
|
|
1059
|
+
|
|
1060
|
+
### Why a per-task network
|
|
1061
|
+
|
|
1062
|
+
A shared internal network lets task A use task B's sidecar (and its allowlist) and reach task
|
|
1063
|
+
B's ports. One network per task costs one address pool each: a default Docker Desktop ran out at
|
|
1064
|
+
the 30th network (`all predefined address pools have been fully subnetted`), which is why the
|
|
1065
|
+
error names `--max-parallel` and `default-address-pools`.
|
|
1066
|
+
|
|
1067
|
+
### Why inhibit_ipv4 and ip_forward=0
|
|
1068
|
+
|
|
1069
|
+
On native Linux a default `--internal` bridge still holds a gateway IP on the host, and the task
|
|
1070
|
+
container reached every host service bound on `0.0.0.0` through it (dockerd 20.10, 24 and 29,
|
|
1071
|
+
both firewall backends; on 20.10 and 24 also `docker0` and the host NIC). The
|
|
1072
|
+
`com.docker.network.bridge.inhibit_ipv4=true` option removes the gateway; the sidecar then takes
|
|
1073
|
+
the `.1` address and the embedded DNS alias still works. `gateway_mode_ipv4=isolated` was
|
|
1074
|
+
rejected: Docker 24 ignores it silently. Docker Desktop never showed the hole.
|
|
1075
|
+
`--sysctl net.ipv4.ip_forward=0` on the sidecar is defence in depth: Docker enables forwarding in
|
|
1076
|
+
the sidecar's netns, so a task container with `NET_ADMIN` could try to route through it. No
|
|
1077
|
+
config field grants the task container run-time capabilities, and the measured route did not
|
|
1078
|
+
reach the internet, but the sysctl costs nothing.
|
|
1079
|
+
|
|
1080
|
+
### Why a black-hole DNS server and --ipv6=false
|
|
1081
|
+
|
|
1082
|
+
The spikes ran on dind, which has no loopback resolver, so they could not show CVE-2024-29018:
|
|
1083
|
+
on daemons before 26.0 / 25.0.5 / 23.0.11 the embedded DNS forwards an internal network's
|
|
1084
|
+
queries from the host namespace when the host resolver is loopback (systemd-resolved), which is a
|
|
1085
|
+
DNS tunnel out. The task container's `--dns 192.0.2.1` (TEST-NET-1, never routed) keeps the
|
|
1086
|
+
embedded DNS answering the sidecar alias while every external forward goes nowhere.
|
|
1087
|
+
`inhibit_ipv4` removes only the IPv4 gateway, so `--ipv6=false` keeps a daemon whose
|
|
1088
|
+
`default-network-opts` enable IPv6 from giving the internal bridge an IPv6 gateway. IPv6
|
|
1089
|
+
link-local reach to a host service was not measured.
|
|
1090
|
+
|
|
1091
|
+
`NET_RAW` is dropped from the task container for the same reason: with raw sockets an agent could
|
|
1092
|
+
write frames for the bridge's own MAC address and reach a host service over UDP without the
|
|
1093
|
+
sidecar. That path was not measured; the cap drop removes it at no cost, since no tool needs raw
|
|
1094
|
+
sockets under `llm_only`.
|
|
1095
|
+
|
|
1096
|
+
### Why the sidecar log is a separate, atomically written file
|
|
1097
|
+
|
|
1098
|
+
The first version appended the sidecar log to `docker.log` after the container exited. That file
|
|
1099
|
+
is in the run directory, which is bind-mounted writable into the container at the SAME path, so
|
|
1100
|
+
the agent could replace it with a symlink to a host file (for example a shell rc file) and get a
|
|
1101
|
+
line it chose (`DENY $(cmd):443 CONNECT` passes the visible-ASCII check) appended there by the
|
|
1102
|
+
host. Container stdout could also forge `ALLOW` / `DENY` lines in it. The log is now `egress.log`,
|
|
1103
|
+
written once by `write_text_atomic`, whose `os.replace` replaces a planted symlink instead of
|
|
1104
|
+
following it. `BAD` lines carry only the method and length, because a refused target can hold
|
|
1105
|
+
credentials in its userinfo or query.
|
|
1106
|
+
|
|
1107
|
+
### Why the framework image and a bind-mounted module
|
|
1108
|
+
|
|
1109
|
+
The sidecar image is the framework image, never the task image: a task image is task-authored and
|
|
1110
|
+
may be a runtime-kit image with a different Python. The proxy code is NOT taken from the image:
|
|
1111
|
+
the host bind-mounts its own `egress_proxy.py` read-only, so the code under test is the boundary
|
|
1112
|
+
that runs and image skew cannot change it. That is also why the module is stdlib-only (five
|
|
1113
|
+
imports, guarded by a test): the image only supplies `python3`.
|
|
1114
|
+
|
|
1115
|
+
### Why the sidecar watches the heartbeat
|
|
1116
|
+
|
|
1117
|
+
A host SIGKILL skips every `finally`, and so does a SIGTERM (a CI cancel, `timeout`, systemd):
|
|
1118
|
+
coder-eval has no SIGTERM-to-cancel bridge, and `fs_permissions` re-kills with the default action.
|
|
1119
|
+
The task container already exits on a stale host heartbeat;
|
|
1120
|
+
the sidecar reads the same file through a single-file `:ro` bind (Docker Desktop VirtioFS saw
|
|
1121
|
+
every in-place counter write) and stops itself with the same counter-or-mtime rule as
|
|
1122
|
+
`heartbeat_is_alive`. It has no `--rm`, so a crashed or stale-stopped sidecar keeps its log until
|
|
1123
|
+
teardown reads it; `docker network rm` works with a stopped container still attached, so a later
|
|
1124
|
+
prune needs no ordering. The watchdog returns from `serve` instead of calling `os._exit`, because
|
|
1125
|
+
CE052 gates process-lethal calls on `IN_CONTAINER_ENV`, which a stdlib-only module cannot import.
|
|
1126
|
+
|
|
1127
|
+
The heartbeat stops the sidecar but cannot remove it or its network, and each leaked network holds
|
|
1128
|
+
one of the daemon's address pools (about 29 on a default Docker Desktop). A few cancelled parallel
|
|
1129
|
+
runs then fail every `network create`, for coder-eval and for anything else on that daemon. So every
|
|
1130
|
+
egress setup first prunes egress-labelled stopped containers and unused networks older than
|
|
1131
|
+
`RECLAIM_MIN_AGE`. Prune never removes a running container or a network in use, and the age spares a
|
|
1132
|
+
concurrent setup between `network create` and `start`. A SIGTERM-to-cancel bridge was not added: the
|
|
1133
|
+
prune also covers SIGKILL, and a process-wide handler would change shutdown for every driver.
|
|
1134
|
+
|
|
1135
|
+
### Why a refused grading host does not change the status
|
|
1136
|
+
|
|
1137
|
+
A grader that cannot reach a host it needs (an `apt-get` mirror, PyPI) fails its criterion, and
|
|
1138
|
+
the row reads as an ordinary FAILURE: an agent miss that is really the grader's. Only `egress.log`
|
|
1139
|
+
showed it. So after a graded run the host reads the sidecar log from Docker (not the run
|
|
1140
|
+
directory's copy, which the container can write), takes the `DENY` lines after `PHASE grading` (or
|
|
1141
|
+
all of them for a container that only grades), and records the hosts in
|
|
1142
|
+
`environment_info["egress_denied_in_grading"]` as one comma-separated string, which the report
|
|
1143
|
+
environment tables render as-is.
|
|
1144
|
+
|
|
1145
|
+
Turning such a FAILURE into an ERROR does not work. A DENY does not prove the grader needed the
|
|
1146
|
+
host: the probe task's criteria and any no-internet task's criteria are refused on purpose, so a
|
|
1147
|
+
real leak would read as a grader error with advice to allowlist `example.com`; an `agent_judge` can
|
|
1148
|
+
use a network tool on one run and not the next; and a process the agent left running is refused
|
|
1149
|
+
under the same rule. An ERROR written by the host is also an execution fact decided outside the
|
|
1150
|
+
orchestrator, so `evaluate` would not re-grade it and `task.html` would keep the FAILURE. Errors
|
|
1151
|
+
count as misses in the pass rate, so the rewrite would buy only an error count. The row keeps its
|
|
1152
|
+
status, and the host writes the hosts through the same `TASK_JSON_TRANSCRIPT_EXCLUDE` serializer
|
|
1153
|
+
the orchestrator uses.
|
|
1154
|
+
|
|
1155
|
+
`GRADING_DENIAL_NOISE` drops the hosts the judge CLIs call and do not need (§ Expected DENY lines
|
|
1156
|
+
in docs/DOCKER_ISOLATION.md), so they are not recorded on every judged row.
|
|
1157
|
+
|
|
1158
|
+
### Why every docker call runs to completion
|
|
1159
|
+
|
|
1160
|
+
`_docker` runs `subprocess.run` in a worker thread, and cancelling the await does not stop the
|
|
1161
|
+
thread. A Ctrl-C during `docker create` once let teardown run `docker rm -f` before the create
|
|
1162
|
+
finished, leaking a created-but-never-started sidecar that no heartbeat would ever stop. So every
|
|
1163
|
+
call is joined across any number of cancels (`_run_to_completion`) before the cancel propagates,
|
|
1164
|
+
and teardown is joined the same way.
|
|
1165
|
+
|
|
1166
|
+
### The log line format is a security boundary
|
|
1167
|
+
|
|
1168
|
+
`docker.log` is the only evidence the boundary leaves, and operators grep it for
|
|
1169
|
+
`^(ALLOW|DENY|FAIL)`. A request line with a control or non-ASCII byte is refused before anything is
|
|
1170
|
+
logged, because a lone `\n` in a method once forged a separate `ALLOW` line.
|
|
1171
|
+
|
|
1172
|
+
### Why the allowlist follows the model callers, not the forwarded env
|
|
1173
|
+
|
|
1174
|
+
The first version allowed the API backend's hosts for every agent and the host of every forwarded
|
|
1175
|
+
`*_URL` variable. The real runs showed the cost: a Claude task could reach the Azure
|
|
1176
|
+
`CODEX_BASE_URL` host, and a Codex, Antigravity or Pi task could reach `api.anthropic.com`,
|
|
1177
|
+
because those variables are on the default passthrough list and the default backend is `direct`.
|
|
1178
|
+
Each host was a model provider, but none was needed. So the backend's hosts are added only for a
|
|
1179
|
+
component that uses `API_BACKEND` (`uses_api_backend` on the agent config, an enabled simulator,
|
|
1180
|
+
an `llm_judge` / `agent_judge` criterion), and a URL variable counts only where its owner reads it
|
|
1181
|
+
(`LITELLM_BASE_URL` for the litellm backend, `CODEX_BASE_URL` in `CodexAgentConfig.egress_hosts`).
|
|
1182
|
+
Any other host is explicit in `egress_allowlist`.
|
|
1183
|
+
|
|
1184
|
+
### Why grading switches the sidecar in place
|
|
1185
|
+
|
|
1186
|
+
Graders often install their own test dependencies (SkillsBench test scripts run `apt-get`, the
|
|
1187
|
+
`astral.sh` uv installer and `uvx` from PyPI). With one allowlist for both phases those hosts are
|
|
1188
|
+
open to the agent as well, and `github.com`, which the uv installer needs, is where public
|
|
1189
|
+
benchmark solutions live. So grading may widen the allowlist, never narrow it.
|
|
1190
|
+
|
|
1191
|
+
Grading in a second container (the detached-grade path) was rejected: only the workspace crosses
|
|
1192
|
+
over, and the known equivalence gaps in § Two known equivalence gaps already score real rows 0.000
|
|
1193
|
+
for state outside it. The switch therefore happens in the same container, as in Harbor, at the
|
|
1194
|
+
two grading sites that run after the agent is finished (the single-shot loop and the post-failure
|
|
1195
|
+
path). The dialog loop is refused at load, because its criteria run between turns and a one-way
|
|
1196
|
+
switch would leave the agent the grading network for the rest of the dialog.
|
|
1197
|
+
|
|
1198
|
+
The phase boundary is known only inside the container, so the in-container run asks through a
|
|
1199
|
+
request file in the run directory and waits for the host's answer in an ack file. The host, not
|
|
1200
|
+
the container, talks to the proxy: `docker exec` into the sidecar reaches a control listener on
|
|
1201
|
+
the sidecar's own loopback, which no other netns can reach, and the proxy confirms before the
|
|
1202
|
+
host answers. The ack is written with `write_text_atomic` because the run directory is writable
|
|
1203
|
+
from the container.
|
|
1204
|
+
|
|
1205
|
+
This is not a boundary against an agent that targets it. The agent is root in the same
|
|
1206
|
+
container, so it can write the request file early, and a background process it started keeps
|
|
1207
|
+
running into grading. Both are the same class as the deliberate re-chmod the anti-cheat window
|
|
1208
|
+
leaves open. The `PHASE grading` line in `egress.log` separates the two phases' traffic.
|
|
1209
|
+
|
|
1210
|
+
Every graded `llm_only` run switches, including one with no grading allowlist: there the switch
|
|
1211
|
+
adds nothing and only writes the `PHASE grading` line that § Why a refused grading host makes the
|
|
1212
|
+
row ERROR reads. Such a switch is best-effort, because a failure only loses that report.
|
|
1213
|
+
|
|
1214
|
+
Grading-only hosts are checked at setup with `probe --direct` (a TCP connection from the sidecar),
|
|
1215
|
+
not through the proxy, because the proxy does not allow them yet.
|
|
1216
|
+
|
|
1217
|
+
### What Phase 0 measured
|
|
1218
|
+
|
|
1219
|
+
- Every built-in harness in the image and every judge route (`llm_judge`, `agent_judge`,
|
|
1220
|
+
litellm with aiohttp) works through the proxy with an exact host set.
|
|
1221
|
+
- Claude Code on Bedrock calls the control plane `bedrock.<region>.amazonaws.com` at every start;
|
|
1222
|
+
it is allowed so the CLI behaves as under `bridge`. `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`
|
|
1223
|
+
does not remove that call, and on direct its Datadog `DENY` did not slow the CLI, so it is not set.
|
|
1224
|
+
- Claude Code OAuth refresh goes to `platform.claude.com` (binary string `TOKEN_URL`), which is on
|
|
1225
|
+
the direct backend list because `agent_judge` runs the CLI too.
|
|
1226
|
+
- `LITELLM_LOCAL_MODEL_COST_MAP=True` costs no latency either way (the `403` is immediate); it is set
|
|
1227
|
+
to remove one `DENY` per process and a network-dependent cost map.
|
|
1228
|
+
- busybox `wget` sends absolute-form `GET https://…` to a proxy instead of `CONNECT`; the proxy
|
|
1229
|
+
answers `400` with a `BAD … absolute-form https (use CONNECT)` line rather than originate TLS.
|
|
@@ -714,16 +714,15 @@ None else self.open_start_ms)` collapse to one instant whenever `open_end_ms` is
|
|
|
714
714
|
|
|
715
715
|
An identity invariant, which is why it is its own id rather than a second arm of
|
|
716
716
|
CE058/CE059, both of which are about timing. Antigravity omitted the kwarg, so the field
|
|
717
|
-
defaulted to `None` on every message it ever recorded, and the evalboard — which
|
|
718
|
-
assistant emissions by `message_id
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
describe it: a grouped emission is one API call to the evalboard's thinking-cost
|
|
717
|
+
defaulted to `None` on every message it ever recorded, and the evalboard — which then
|
|
718
|
+
grouped assistant emissions by `message_id`, else by a 100 ms wall-clock gap — collapsed a
|
|
719
|
+
whole turn's generations into ONE timeline row as soon as the harness's generation windows
|
|
720
|
+
became contiguous (the gap is then exactly 0 ms, always). Nothing failed: the consumer
|
|
721
|
+
SUMS the group, so the totals and the reconciliation invariant stayed right, and the
|
|
722
|
+
golden snapshots had ratified the `null` on the day they were written — a snapshot is
|
|
723
|
+
regenerated from whatever the code currently does, so it catches a later change and never
|
|
724
|
+
an initial omission. The damage was not confined to the timeline, which is why "only
|
|
725
|
+
granularity is lost" was the wrong way to describe it: a grouped emission is one API call to the evalboard's thinking-cost
|
|
727
726
|
simulator, whose prompt-cache cascade is quadratic in that count, so a single-shot
|
|
728
727
|
Antigravity run had every cascade coefficient pinned at zero; the `Messages` count and the
|
|
729
728
|
10 s slow-generation bar were per-turn too. Deriving the constructor set from each
|
|
@@ -50,9 +50,10 @@
|
|
|
50
50
|
path. Three things are refused rather than degraded: `--junit-xml` (a report of
|
|
51
51
|
verdicts, and there are none — though `reports/junit.py` still emits `<skipped>` for
|
|
52
52
|
an ungraded row it encounters), `--allow-host-grading` (it decides how an ungraded row
|
|
53
|
-
is GRADED, and `execute` grades nothing), and simulation tasks
|
|
54
|
-
turn-continuation logic reads criteria results, so an ungraded dialog would
|
|
55
|
-
change its own stopping behavior).
|
|
53
|
+
is GRADED, and `execute` grades nothing), and simulation tasks with an LLM-simulated
|
|
54
|
+
user (their turn-continuation logic reads criteria results, so an ungraded dialog would
|
|
55
|
+
silently change its own stopping behavior). A scripted dialog reads none, so `execute`
|
|
56
|
+
accepts it. `stop_early:` blocks are inert under `execute` for
|
|
56
57
|
the same reason the kill switch exists: the full trajectory is the deliverable.
|
|
57
58
|
Motivating consumer: an external harness (Harbor / Terminal-Bench 2.0) that builds its
|
|
58
59
|
own container, calls coder-eval as the agent, and grades with its own tests.
|
|
@@ -86,6 +87,40 @@ produces is under isolation.md § Detached grading and `Sandbox.adopt`).
|
|
|
86
87
|
`tests/test_seed_from_prior_result.py` pins the status in a test of its own, apart from
|
|
87
88
|
the loop over the real execution facts.
|
|
88
89
|
|
|
90
|
+
### Grading incidents and execution facts
|
|
91
|
+
|
|
92
|
+
`FinalStatus.is_execution_fact` is deliberately conservative and context-free.
|
|
93
|
+
`EvaluationResult.has_execution_failure` is the result-aware predicate: only an
|
|
94
|
+
explicit `ERROR` with `error_phase: grading` can be replaced by a new verdict.
|
|
95
|
+
Unknown legacy ERROR, TIMEOUT, build and budget outcomes remain execution facts.
|
|
96
|
+
No error-message matching or transcript inference is used.
|
|
97
|
+
|
|
98
|
+
Execution limits are settled immediately after each recorded turn, before grading.
|
|
99
|
+
The limit error is raised after grading returns, preserving partial-credit results.
|
|
100
|
+
A grading crash cannot hide the already-settled execution fact. A real task watchdog
|
|
101
|
+
keeps its phase: a fresh run times out execution, while a detached grading attempt
|
|
102
|
+
times out grading. A checker merely raising a timeout or budget exception is not a
|
|
103
|
+
watchdog or an agent limit.
|
|
104
|
+
|
|
105
|
+
Grading sites wrap failures in one typed error. Reference-integrity failures pass
|
|
106
|
+
through unchanged. A per-turn dialog grade that prevents the remaining execution
|
|
107
|
+
writes an execution-phase ERROR; a completed single-shot or end-only grade writes
|
|
108
|
+
a repairable grading-phase ERROR. No dialog telemetry heuristic is needed to decide
|
|
109
|
+
which one a new record means.
|
|
110
|
+
|
|
111
|
+
Current failure details remain in the primary error fields. Secondary and repaired
|
|
112
|
+
grading incidents belong in `error_history`. A failed detached grade does not write
|
|
113
|
+
an authoritative result, transcript or HTML verdict: its caller appends the incident
|
|
114
|
+
to a deep copy of the immediate prior row and writes that selected row once. The
|
|
115
|
+
first execute audit copy remains immutable and is never used as a rollback source.
|
|
116
|
+
The Docker path may serialize a failed attempt to its private scratch transport;
|
|
117
|
+
its explicit incident marker is consumed before any authoritative write or fold-back.
|
|
118
|
+
|
|
119
|
+
Explicit grading ERROR rows owe a grade even if a partial vector or zero score was
|
|
120
|
+
recorded. Otherwise resume eligibility and scoring keep their existing semantics:
|
|
121
|
+
a graded empty vector scores zero, and execute leaves the score unset. No additional
|
|
122
|
+
execution-error rows are automatically scheduled because their vector is empty.
|
|
123
|
+
|
|
89
124
|
### The four grading sites
|
|
90
125
|
|
|
91
126
|
`grade=False` is checked in exactly four places, and they do not behave alike:
|
|
@@ -95,11 +130,13 @@ the loop over the real execution facts.
|
|
|
95
130
|
2. **The single-shot loop** stops after capturing the trajectory. Returning False keeps
|
|
96
131
|
`FinalStatus` off SUCCESS and the status chain turns it into NOT_GRADED. The
|
|
97
132
|
reference-integrity check is skipped too — it protects a grade that is not happening.
|
|
98
|
-
3. **The dialog loop**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
133
|
+
3. **The dialog loop** checks criteria only on a graded run. Its end-of-dialog and
|
|
134
|
+
budget-gate checks are skipped when ungraded, so a scripted dialog finalizes
|
|
135
|
+
NOT_GRADED. The per-turn check still RAISES, and is unreachable today because
|
|
136
|
+
`execute` rejects LLM-simulated tasks at the CLI: that dialog reads criteria results to
|
|
137
|
+
decide whether to keep talking, so an ungraded run would silently change its own
|
|
138
|
+
stopping behavior. An empty-list "defensive no-op" there would be worse than a
|
|
139
|
+
refusal — the gate treats an empty criteria list as a vacuous pass.
|
|
103
140
|
4. **The diagnostics path** records nothing: a `not_evaluated` vector would imply criteria
|
|
104
141
|
we were supposed to run and could not.
|
|
105
142
|
|
|
@@ -632,10 +669,37 @@ unchanged.
|
|
|
632
669
|
§ Gate selection is fired-only — so `result.early_stop` is never assigned here and an armed
|
|
633
670
|
simulation task gates strict-AND on a possibly truncated trajectory.
|
|
634
671
|
|
|
635
|
-
`execute` rejects
|
|
672
|
+
`execute` rejects LLM-simulated tasks at the CLI, because the loop reads criteria results to
|
|
636
673
|
decide whether to keep talking: an ungraded dialog would silently change its own stopping
|
|
637
674
|
behaviour rather than merely skipping the score.
|
|
638
675
|
|
|
676
|
+
### Scripted dialogs
|
|
677
|
+
|
|
678
|
+
`simulation.turns` swaps the LLM user for `ScriptedUser`, which answers the loop's own
|
|
679
|
+
`next_user_message` call. `_evaluation_loop` composes it and hands it to the loop as
|
|
680
|
+
`user=`; the loop never branches on the kind afterwards, so the stop, telemetry and logging
|
|
681
|
+
paths are shared.
|
|
682
|
+
|
|
683
|
+
- **The cursor is the loop's history.** `ScriptedUser` returns `turns[len(dialog_pairs)]`
|
|
684
|
+
and keeps no counter, so it cannot drift from the exchanges the loop actually completed.
|
|
685
|
+
The dialog ends in `evaluate_stop` (`script_exhausted`) before the user is asked past the
|
|
686
|
+
last turn.
|
|
687
|
+
- **`turns[0]` is the pinned opener.** `_evaluation_loop` hands it to the loop as
|
|
688
|
+
`initial_prompt`, so turn 1 is recorded like any pinned opener (no simulator timing, an
|
|
689
|
+
accurate `conversation.log` label) and the task carries one source of truth for its
|
|
690
|
+
first prompt: `initial_prompt` beside `turns` is rejected.
|
|
691
|
+
- **The fields a script ignores are compared by value, not by `model_fields_set`.**
|
|
692
|
+
`evaluate` rebuilds the task from a full `model_dump()`, which marks every field as set,
|
|
693
|
+
so a "was it set" test would reject every recorded scripted task.
|
|
694
|
+
- **Script length owns the dialog length.** Derive `max_turns` after simulation config
|
|
695
|
+
validation, including merged variant scripts, so a replacement cannot inherit a stale cap.
|
|
696
|
+
Prompt overrides are rejected before mutation because a script owns every user turn.
|
|
697
|
+
- **No criteria steer a script.** `check_criteria` and `stop_on_criteria_pass` stay at their
|
|
698
|
+
defaults, so the one criteria check is the end-of-dialog verdict. That is also why
|
|
699
|
+
`execute` can accept it: nothing the dialog does depends on a verdict it lacks.
|
|
700
|
+
- **No simulator, no simulator egress.** `isolation/egress.py` adds the simulator's model
|
|
701
|
+
route only for a simulated user.
|
|
702
|
+
|
|
639
703
|
## Embedded commands
|
|
640
704
|
|
|
641
705
|
A recorded config is UNTRUSTED INPUT. `evaluate <run_dir>` rebuilds the task from the
|
|
@@ -167,8 +167,7 @@ render still sees it; the JSON dump excludes it.
|
|
|
167
167
|
|
|
168
168
|
The sibling is YAML rather than JSON because the transcript carries multi-line text, which
|
|
169
169
|
YAML's literal block scalar renders as readable paragraphs instead of one line full of `\n`
|
|
170
|
-
escapes. Its consumers are humans.
|
|
171
|
-
keep rendering, and a row with no path at all is a no-op, so old inline records keep working.
|
|
170
|
+
escapes. Its consumers are humans. A row with no path at all is a no-op.
|
|
172
171
|
|
|
173
172
|
FILE ORDER IS LOAD-BEARING. Each filename is keyed off the criterion's position in its result
|
|
174
173
|
list, and the reader resolves the stored path, so each list must retain its order through
|
|
@@ -123,7 +123,7 @@ jobs:
|
|
|
123
123
|
|
|
124
124
|
# PHASE 3: Security scanning
|
|
125
125
|
- name: Security - Dependency vulnerabilities (pip-audit)
|
|
126
|
-
run: .venv/bin/pip-audit --desc --skip-editable
|
|
126
|
+
run: .venv/bin/pip-audit --desc --skip-editable
|
|
127
127
|
|
|
128
128
|
- name: Security - OSV vulnerability scan (osv-scanner)
|
|
129
129
|
# Complements pip-audit: pip-audit queries the PyPI advisory DB;
|